見出し画像

GASコード付き|Google Apps ScriptでXのトレンドを自動取得する方法|getdaytrendsで手軽に作る話題リスト

getdaytrendsとGoogle Apps Scriptを使って、Xで話題のトレンドワードを自動取得し、スプレッドシートで整理・分析する方法をコード付きで解説。SNS運用やネタ探しに便利な自動化ガイド。



こんにちは、SHOです。
みなさんは最近流行ってるものって何かしっていますか?

僕は知っています。インフルエンザです。ここしばらくnoteには来れていませんでした。1週間くらい。つまりお久しぶりです。

だからこのタイミングでせっかく僕のnoteを紹介してくれた人の記事への御礼とかコメントとかすぐにできなくてごめんなさい。

で、ようやく復帰してみたものの、今度は困ったことに何もしてないので、ネタが無いです。僕何もしてないのに。

というわけで、今回は僕の初めての日記です。では行きます。



今日僕は、ずっと何もできなかったからネタが無いという状態でネタを考えるnoteはじめて日記を書こうと思います。


…ところでみなさんはgetdaytrendsというサイトは知っていますか?

Xのトレンドをまとめてくれているサイトです。

つまり、流行りの題材がここにあるということなので、GASを作ればいいんじゃないかということなのでやっていきたいとおもいます。

というわけで、日記はやめてお勉強です。


getdaytrendsとは?


これのことです。getdaytrends

Xで「いま話題になっているワード」を国や地域ごとにまとめてくれていて、いわゆるトレンド観測系のサイトです。

  • Now(いまこの瞬間のトップ)

  • Most Tweeted(24時間で最もツイートされたもの)

  • Longest Trending(長時間トレンド入りしていたもの)

などが一覧になっていて、ざっくり何が話題なのかをつかむのに便利です。

ちょっと気をつけたいポイント

getdaytrends は X公式のデータをもとにした非公式サービスなので、次の点だけ頭に入れておくと安全です。

・データの更新タイミングは 1時間ごと
・X公式アプリで見たトレンドと完全一致するとは限らない
・調査方法・内部アルゴリズムは非公開
・サイト側の仕様変更で、取得ロジックが変わる場合がある
・大量アクセスや商用目的でのデータ収集は禁止されています

利用規約

今回は 個人利用・1日1回レベル・Top10だけ取得 の非常にライトな使い方なので、規約にあるような重いスクレイピングには該当しないと思います。

もし使ってみようって思った人は利用規約を確認してください。


とりあえずチャレンジ


そんなわけで今回のテーマは、世の中の流行にのってしまった僕が流行を追いかけようということです。

僕がXで投稿した流行最先端の情報の発信がトレンド入りするやや手前から若干遠い位置にある少し先の山の向こうの海を隔てた海岸沿いまできているので、ぼくのXの役目は果たせている気がします。

※コメントありがとうございます!思い出が走馬灯のように見えていた中、とっても救われました。noteのみんなはあったかいです。


出来上がったのはこれです。

Google Apps Scriptで自動取得したXトレンドデータのスプレッドシート一覧。収集日時、順位、キーワード、tweet数、検索URLなどが表形式で記録されているRawデータのスクリーンショット。
Rawのシート


Googleスプレッドシートに作成したXトレンドの集計表(Scoresシート)。取得したRawデータをもとに、キーワード別の出現回数とtweet_countを整理した一覧のスクリーンショット。
Scoresのシート


「#インフルエンザ」は入っていないです。

んで、Googleのスプレッドシートにはシートを2枚用意しています。


Raw シート

getdaytrends から「Now / Most Tweeted / Longest Trending」の Top10 をそのまま保存します。

・collected_at:日付
・rel_time:「now」、「most」、「longest」
・rank:ランキング
・keyword:キーワード
・tweet_count:ツィートカウント
・url:そのキーワードでXを検索するURL

Rawのシート

毎回実行するたびに Raw シートは初期化されて、そのタイミングの Top10 だけが入るようになっています。


Scores シート

Rawシートだけだとつまんないので今日一日の中で同じキーワードが、

  • どのくらいのツイート数を持ってて

  • 「now / most / longest」に何回顔を出しているか

をちょっと工夫してわかりやすくしたやつです。出力はこんな形です。

・keyword:キーワード
・occurrences:頻出回数
・tweet_count:ツイート数

Scoresのシート

tweet_count は「max」か「sum」か選べるようにしていて、デフォルトは「max」にしています。たぶん使うこと無いけど。

これを見ると、

  • 今日一番熱かったワード

  • 何度もトレンド入りしていたワード

などがわかりやすいです。

※Most Tweeted / Longest Trendingが何故か取れないので、ゆっくり調べて改造してみます。


Google Apps Script(GAS)のこと


これのことです。GASってみんな言ってます。


Google が提供しているクラウドで動く JavaScript ベースの自動化環境で、

  • Googleのサーバーで動く

  • コードは全部クラウド保存

  • ブラウザさえあれば動く

  • Google アカウントがあれば無料で使える

    • 1日 90分程度の実行時間が上限

    • UrlFetchApp.fetchの外部アクセスは無料枠だと 1日あたり 20,000回くらいまで

つまり、なんやかんやいい感じで今回のように色々便利な事をしてくれます。

今回はClaudを使ってやってみました。僕こんなの一人で出来ません。

だから僕はいま勉強中なので、記念すべき初GASをここに置いておきます。

もし、今回つくったものが何かに使えるかもって思ってくれたら使ってみてください。

僕の記念のGAS第1号!

※ダウンロード前に必ず本文末尾にある「txtファイルのご利用について」をご確認ください。

SHOより

Googleスプレッドシートの拡張機能を使う


今回はGoogle Spread sheetにアクセスします。

スプレッドシートの拡張機能でGoogle Apps Scriptのコードをセットしておくイメージです。たぶん。

Googleスプレッドシートの新規作成画面。「空白のスプレッドシート」を選んで新しいシートを作成できる。
まずは空白のスプレッドシートを開きます。


Googleスプレッドシートの拡張機能メニューを開き、「Apps Script」を選択しようとしている画面。ここからスクリプトエディタを開いてGASを実装できる。
好きなファイル名を付けて、拡張機能のボタンをおすと、
Apps Scriptっていうのが出てきます。


Google Apps Script エディタに、getdaytrendsを利用したXトレンド自動取得スクリプトのサンプルコードが貼られている画面。URL設定、シート定義、集計パラメータなどが記述されている。
このApps Scriptが開くと、コードを書き込むところが出てくるので、
僕がつくったコードを使う人はここにコピペしてください。


Google Apps Script エディタの実行メニューで、Xトレンド収集・集計処理を一括実行する「updateAll」関数を選択している様子。関数一覧には fetchJapanFromGetDayTrends や updateScores なども並ぶ。
「▷実行」って書いてある左の保存ボタンを押すと、何をするかがプルダウンで出てきます。
ここでは、「updateAll」を選んで「▷実行」を押します。

すると、一回目の実行ではこんな感じの流れになります。

Google Apps Script を初回実行した際に表示される権限承認ダイアログ。スクリプトに必要なアクセス権の付与を求める画面。
まずGoogleから承認を求められます。


Google Apps Script 実行時に表示されるアカウント選択画面。スクリプトのアクセス権付与のため、どのGoogleアカウントを使用するか選ぶステップ。
そして、承認するアカウントを選びます。


Google Apps Script を初回実行した際に表示される警告画面。「このアプリはGoogleで確認されていません」と表示され、詳細を開いて続行する必要がある権限承認ステップ。
すると、すっごく不安になるような画面が出てきます


Google Apps Script 実行時の権限設定画面。get_X_trend が利用するスプレッドシート操作権限や外部サービス接続権限をユーザーが承認するステップ。
すべて選択にチェックをして続行を押します。
僕は自分で作ったものだから怖くないです。


Google Apps Script の実行ログ。スクリプトが正常に開始・完了した記録が表示され、トレンド取得処理が正しく動作していることを確認できる。
そうすると、このコードが実行されてすぐに終わります。


GoogleスプレッドシートのRawシートに、Google Apps Scriptによって取得されたXトレンドデータが自動入力された画面。longestカテゴリのランキングとURLが表示されている。
終ったら、シートが2個できあがっていて、


Google Apps Script の実行で完成したXトレンド取得レポート。Rawシートにnow・most・longestの各カテゴリのランキング、キーワード、tweet_count、検索URLが一覧で整備されている。
ちゃんとデータが取れています。

function 一覧(何をしているの?)


Claudと一緒につくったから、ちゃんと僕も理解しておかないとだめなのでどんな機能(関数)があるのかを整理します。

これは、僕が書いたこのコードにどんな機能があるかっていうのをまとめておきます。

Google Apps Script の関数一覧ドロップダウン。Xトレンド取得処理に使う updateAll、fetchJapanFromGetDayTrends、parseSectionTop10、updateScores などの関数が並んでいる状態。
functionの一覧

🟣 updateAll

  • 全体のメイン処理

  • トレンドを取得して Raw シートを更新

  • Raw をもとに Scores シートを更新する「まとめ役」


🟣 fetchJapanFromGetDayTrends

  • getdaytrends の日本ページを取得

  • テキストを行単位に分解

  • 「now / most / longest」の3つのTop10を抽出して Raw に書き込む

この中で下の関数も呼ばれています:

  • getOrCreateRaw:Raw シートが無ければ作り、ヘッダを整える

  • resetRawSheet:毎回 Raw シートの中身を初期化する

  • parseSectionTop10:テキストの中から 各Top10 を抽出する


🟣 updateScores

  • Raw を読み込む

  • キーワードごとに「出現回数(occ)」と「tweet数(tweet)」を集計

  • tweet数 → 降順

  • 出現回数 → 降順
    という優先順位で並べて Scores シートを作る

「今日の日本トレンドで一番強いワードが何か」が分かるやつです。


🟣 findLineIndex

たくさん並んだ文字列の中から、「ここから読み始めてね」っていう目印を探す関数です。


🟣 parseTweetCount

スコア計算するときに、tweet数を数値に変換する小さな関数です。

  • 「23.2K tweets」 → 23200

  • 「2.1M tweets」 → 2100000

という感じです。


🟣 runOnce

手動のテスト用です。updateAllを一回だけ実行するための関数です。


🟣 createDaily8JST

毎日 朝8時(JST)に updateAllを自動実行するトリガーを作るもの。以前のトリガーを全部削除してから回しなおすときに使います。


まとめ


いかがでしたでしょうか?今回は僕の初の日記にチャレンジしてみました。

本来であれば、X の公式APIを使うのが一番だと思います。

ただ、XのAPIを調べてみたのですが、開発者登録や有料プランなどイマイチよくわからなかったので、「ちょっとネタを拾いたいだけ」の用途にはだいぶ重たい感じがします。

だから今回は、公開トレンドをまとめてくれている getdaytrends のページを
Readerモード経由でテキストとして取得し、それを自分用のネタリストとしてスプレッドシートにまとめる、というアプローチをしてみました。

もし、面白かったり何か役に立ったら、スキやフォローしてくれるととっても嬉しいです!


最後に

txtファイルのご利用について

このファイルは、みんなが自由に使えるように公開しています。自由に閲覧・学習・カスタマイズ・個人利用ももちろんOKです。

ただし、ご利用は自己責任でお願いします。

禁止事項
このファイルを無断で再配布・販売すること。作者を偽って自作発言を行うこと。公序良俗に反する形での利用。

免責事項
このファイルの利用により生じたいかなる損害・トラブルについては一切の責任を負うことができません。また、今後のアップデートやサポートを保証するものではありません。

txtのファイルのご利用にあたって

※他にもこんなチャレンジしています。

※Googleを活用した内容もこちらにまとめてます。