自身の興味のあるトピックのニュースを自動配信する
今回の目標はプログラミングで自動ニュース配信のプログラムを作成することである。
ニュースと言うと〜新聞、〜ニュースといったメディアを思いつくが…
これらニュース媒体の後ろには数多くの編集者が携わっている。
大手の新聞社、テレビであったら100人以上が制作に携わっていると言っても過言ではない。
今回は自身でニュース媒体を作る
まずはGoogleドキュメントにアクセスして、自身で作りたいニュースタイトルを決めよう。
今回は「GoogleAppsScript」という題材で記事を作りますが
「サッカー日本代表」
「オリンピック」
「紅白歌合戦」
どんな内容のニュースでも良いでしょう。
定期的にニュースをプログラムで書くということは?
①自動的にニュースを集めること
朝日新聞・読売新聞を始めとした…ネットニュース全般記事を網羅する必要があります。
それも自動的にインターネット上からニュースを収集するという仕組みが必要です。
②自動的に集めたニュースを新聞に掲載すること
ニュースを集めてきたら、その記事を自身が発行する新聞に掲載しなくてはいけません。
この2点が必要です。
自動的にニュースを集めるためにはRSSフィードを使う
インターネット上の情報ソースをプログラムで扱うにはRSSフィードが良い。
RSSフィードとはウェブサイトの新着情報を取得できる全世界共通の フォーマットである。
GoogleニュースなどはこのRSS形式で記事を配信してくれていて、
このような形式でニュース配信ながされている。
修正前(URL)
https://news.google.com/search?q=Power%20Automate%20when%3A7d&hl=ja&gl=JP&ceid=JP%3Aja
修正後(RSS)
https://news.google.com/rss/search?q=Power%20Automate%20when%3A7d&hl=ja&gl=JP&ceid=JP%3Aja
修正後のURLにはrssという文字が入っており、おRSS形式での配信を受けているのが確認できる。
プログラムの前にGoogleドキュメントを立ち上げる
にアクセスして好きなニュースタイトルを付けましょう。
## 次にニュース収集用のスプレッドシートを新規に立ち上げましょう
こんなスプレッドシートができたら完成です。
=IMPORTFEED("https://news.google.com/rss/search?hl=ja&gl=JP&q=GoogleAppsScript&ceid=JP:ja","items created",FALSE,250)
をA2セルに入れてみましょう。
すると指定したトピックのニュースを返却してくれます。
しかしこのままだと単なるスプレッドシートなので、ドキュメント形式ではありません。
そこでGASを使用してニュース化していきたいと思います。
function createTableOfContents() {
//docに書き込む
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var paragraphs = body.getParagraphs();
//まずは改ページを入れる
body.appendPageBreak();
//今日の日付を取得
let today = new Date();
//日付フォーマットをyyyy年MM月dd日に変更
today = Utilities.formatDate(today,'JST','yyyy/MM/dd');
//今日の日付を実行ログに出力
console.log(today);
//パラグラフを追加
var par1 = body.appendParagraph(today+'の〇〇〇ニュース');
par1.setHeading(DocumentApp.ParagraphHeading.HEADING1);
var spreadsheet = SpreadsheetApp.openById('Googleスプレッドシートのid');
var sheet = spreadsheet.getSheetByName('全記事並び替え');
Logger.log('A1からA4の値を読み込む')
var values1 = sheet.getRange('A3:C13').getValues();
for (var i in values1) {
var date = values1[i][0];
var content = values1[i][1];
var url = values1[i][2];
var body = DocumentApp.getActiveDocument().getBody();
// パラグラフを追加
//body.insertParagraph(1, content+"\n"+url+"\n");
//段落番号を0が文章の最初
// 挿入したいリンクのテキストとURLを指定します
var linkText = content;
var linkUrl = url;
// リンクを挿入する位置を指定します(ここではドキュメントの末尾に挿入)
//body.insertParagraph(1, content+"\n"+url+"\n");
var i=Number(i)+1;
// リンクのテキストとURLを指定します
var linkText = "("+i+")"+content;
var linkUrl = url;
var date = new Date();
// 今日の日付を表示
// リンクを挿入します
if(date = today){
body.appendParagraph('').appendText(linkText).setLinkUrl(linkUrl);
}
}
}
function moveToEndOfDocument() {
// 現在のドキュメント情報取得します。
var doc = DocumentApp.getActiveDocument();
// 現在のドキュメントに存在する、子要素の数を取得し、子要素数-1の数を保持します。
var childLastIndex = doc.getBody().getNumChildren()-1;
// 現在のドキュメントに存在する、一番最後の子要素の情報を取得します
var lastChild = doc.getBody().getChild(childLastIndex);
// カーソルとして設定するポジション情報を、子要素の情報をもとに保持します。
var position = doc.newPosition(lastChild, 0);
// 現在のドキュメントのカーソル位置を、最後の子要素の位置に設定します。
doc.setCursor(position);
}
function onOpen() {
DocumentApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
.createMenu('GASメニュー')
.addItem('末尾移動', 'moveToEndOfDocument')
.addToUi();
}
function moveToEndOfDocument() {
// 現在のドキュメント情報取得します。
var doc = DocumentApp.getActiveDocument();
// 現在のドキュメントに存在する、子要素の数を取得し、子要素数-1の数を保持します。
var childLastIndex = doc.getBody().getNumChildren()-1;
// 現在のドキュメントに存在する、一番最後の子要素の情報を取得します
var lastChild = doc.getBody().getChild(childLastIndex);
// カーソルとして設定するポジション情報を、子要素の情報をもとに保持します。
var position = doc.newPosition(lastChild, 0);
// 現在のドキュメントのカーソル位置を、最後の子要素の位置に設定します。
doc.setCursor(position);
}
これで自身のオリジナルニュースの作り方の説明は終わりです。
修正後(RSS)
https://news.google.com/rss/search?q=ここを好きな文字に変更%20when%3A7d&hl=ja&gl=JP&ceid=JP%3Aja
ここを好きな文字に変更という箇所を変更すると自身だけの記事が作れます。
ここを好きな文字に変更する際はURLエンコードを使用してください。
URLエンコードがわからない方は上記記事を参考にしてみてください。
完成したオリジナルニュースの完成例は
GoogleAppsScriptのオープンチャットもありますので、興味ある人は参加してみてください。
コード解説はありませんが、情報交換などを行えます。