かずきち。の日記

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

ネットトレンドを自動取得して、自動更新の可視化ツールを作ってみた!

Googleトレンド知っていますか?

Google Trendsでは、入力した単語の検索数をグラフで示してくれる。このときその単語に関連したニュースを見る事ができ、特に検索数が多いときに何があったのかが分かるようになっている。特定の国、期間に絞ったグラフを見ることもでき、また世界中の都市や国、言語毎にどこでの検索が最も多いのかのランキングも提供される。さらにコンマで区切ることにより複数の単語のグラフを比較することも可能である

引用:
https://ja.wikipedia.org/wiki/Google_Trends

trends.google.co.jp

どんなサービスか知らない人は上記リンクをたどってみてください。
今インターネット上でどんなワードが検索されているのか?がわかります。

このサイトに毎日、手作業でアクセスをすれば当然、単語はわかりますが…人手になります。

そこでトレンドワードのJPにおけるWeeklyトレンドワードの自動更新の可視化をしてみたので、作り方を紹介します。

【完成体】

このスプレッドシートを自動で作成するには、スプレッドシートの裏でコードを走らせる必要があります。

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 = 1; i < length+1; i++) {
    try {
      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);

      // エラーが発生する可能性がある処理

      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);    }
    catch(error){
      Logger.log(error);
    } 
        
  }
}

以上で完成です。

さくっとできましたね。

一応やっていることを解説します。
  // 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");

この箇所で、トレンドのRSS(日本・日別)を取りに行って、変数に入れています。

  // sheetに記入

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

ここでスプレッドシートに格納します。
日付取得や月取得はお好みで変えましょう。

 // 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);

      // エラーが発生する可能性がある処理

      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);    }
    catch(error){
      Logger.log(error);
    } 
        
  }
}

ここではRSSの1記事の取得のみなので、「getChild」してxmlをParseしに行きます。
要素のgetChild(),getChildren()をして、名前空間を与えています。
こちらのスクリプトは「日本地域」「日別」で動作しますので、パラメータをいじれば自分に好きなトレンドが取得できますよ。
無償サポートはしていませんので、コードをカスタマイズして納品を希望の場合は@kazukichi_0914にお問い合わせください。