かずきち。の日記

サーバサイドエンジニアのつぶやき

【自動実行】10年前のあの日のネットトレンドはどうだった?毎日のGoogleトレンドを自動的にカレンダーに書き込むスクリプトを書いてみたぞ!【スクリプトあり】

f:id:kazukichi_0914:20210430202248p:plain

Googleカレンダーはオンラインの自分専用カレンダー

Googleカレンダー使っていますか?
分単位や日別でスケジュールを書き込むことができるオンラインのカレンダーです。
自身のカレンダーに書き込んだり、他人を招待したカレンダーを作ったりできます。
でも人手でスケジュールを書くのが楽なときとめんどくさい時があります。
その日あったニュースや出来事くらい自動でカレンダーに書き込みたいですよね?(←たぶん)
なので、その日日本であった検索トレンドを自動でカレンダーに書き込むスクリプトを書いてみました。
それも未来永劫にわたってひたすら書き込みます。
2000年を振り返ることもできるし、2010年を振り返ることができます。
これはオンラインだからできる代物です。

パソコン、スマホで見られるのが大きな魅力

昔は紙のカレンダーやスケジュール帳を使っていました。
ここには大きなデメリットがあるんです。
「期末テスト」や「病院」みたいなスケジュールだったら、紙のカレンダーに書き込む価値はあります。
一方で些細な出来事は紙のカレンダーに書き込むまでもないですよね?
でもGoogleカレンダーなら些細なことも書き込むに値します。

社会では何が話題になったのか?と振り返るためにカレンダーに書き込んでしまおう

1日前は
1週間前は
1か月前
1年前は
n年前は 社会で何が話題になったのか?

を振り返るのは新聞を保存しておくか、日記をつけておくことくらいしかありません。
そんな事毎日していたら大変です。
新聞の切り抜きを取っておくみたいなことはできません。
こんなこと2100年までしていたら大変ですよね?
なので自動化しちゃいましょう!!

Googleカレンダーは容量消費がないので、あらゆる時事ネタを記録してしまおう

ここからが真髄です。
毎日話題になった社会のトレンドをGoogleカレンダーに書き込みます。

function getgoogletrend() {

  // url設定

  var url = 'https://trends.google.co.jp/trends/trendingsearches/daily/rss?geo=JP';

  // namespace設定

  var namespace = XmlService.getNamespace("ht",'https://trends.google.co.jp/trends/trendingsearches/daily');

  // rss取得

  var xml = UrlFetchApp.fetch(url).getContentText();
  var document = XmlService.parse(xml);
  var root = document.getRootElement();
  var channel = root.getChild("channel");
  var items = channel.getChildren("item");

  // sheetに記入

  var sheet = SpreadsheetApp.getActiveSheet();
  var length = items.length;
  var today = new Date();
  var Month = today.getMonth() + 1;

  for(var i = 0; i < length; i++) {

    //var lastRow = sheet.getLastRow();  
    var title = items[i].getChildText("title");
    var traffic = items[i].getChildText("approx_traffic",namespace);

    // 1記事のみ取得なのでgetChild

    var news_title = items[i].getChild("news_item",namespace).getChildText("news_item_title",namespace);
    var news_link = items[i].getChild("news_item",namespace).getChildText("news_item_url",namespace);
   
    Logger.log(title);

    //sheet.getRange(lastRow+1, 1).setValue(today.getFullYear() + "/" +  Month + "/"+ today.getDate()+ "/" + today.getHours() + ":00");
    //sheet.getRange(lastRow+1, 2).setValue(title);
    //sheet.getRange(lastRow+1, 3).setValue(traffic);
    //sheet.getRange(lastRow+1, 4).setValue(news_title);
    //sheet.getRange(lastRow+1, 5).setValue(news_link);
       
    //登録するカレンダーIDを呼び出してeventへ格納
    var calendar = CalendarApp.getCalendarById('*************************@group.calendar.google.com');
   
    //イベントのタイトルをtitleへ格納
    Logger.log(title);

    //イベントの開始日をstartへ格納
    var start = new Date('2021/04/29');
    Logger.log(start);

    //イベントの終了日をendへ格納
    var end = new Date('2021/04/30');
    Logger.log(end);
   
    var date = new Date();
    // 今日の日付を表示
    Logger.log(Utilities.formatDate( date, 'Asia/Tokyo', 'yyyyMMdd'));
    Logger.log(date);

    //createAllDayEventでカレンダーへイベントを登録
    calendar.createAllDayEvent(title,start,end);
   
  }
}

スクリプトを書いたら、毎日JST 23:00くらいに自動実行です。
スケジュール設定をしたら、パソコンの電源が落ちていようがいまいと
Googleサーバー上で実行です。
今回の場合は毎日決まった時間に自動実行したいので、

f:id:kazukichi_0914:20210430202403p:plain

午後11時~12時の自動実行を選びます。
そうするとさっきのスクリプトを毎日決まった時間に実行をしてくれるわけです。

スクリプトの時限式トリガーの記事は下記のサイトにうまくまとまっています。
というより、いつも困ったら大体ここを見ています。
サンプルスクリプトも充実しているし、著者の本も買っています。

"【初心者向けGAS】時限式のイベントトリガーを設置して決まった時刻にBotを送信する方法"
https://tonari-it.com/gas-timed-driven-trigger/

気になるのは実行結果です

先ほどのスクリプトを実行すると毎日のネットトレンドを取得してカレンダーに書き込んでくれるわけです。
今日は2021/4/30なのでカレンダーには2021/4/30によく検索された
「あつ森」「はたらく細胞」「るろうに剣心映画」etc...が良く検索されていたことがカレンダーに自動追加されます。


f:id:kazukichi_0914:20210430202248p:plain

<埋め込みカレンダー>


https://calendar.google.com/calendar/ical/o3f8vq6mts6bhi4qgjh56qo0qo%40group.calendar.google.com/public/basic.ics

で公開していますので興味ある人は上記icsを追加してみてください。