普段はAutoIt記事ばかり書いていますが、TwitterなどのWebサービスはAutoItで無理やりはちょっと面倒です。webdriver使ってTwitterページ開いてモーメント部分を取得・・あ、出来そうですね。この記事は後日時間見て書くとして、node.jsでTwitter API(登録必要)を使ったほうが10行くらいで書けるので楽かなと。
これを定期実行しDBにでも入れれば、いつこんなキーワードで盛り上がったなんてのもわかり、何かに使えそうですね。
1.Node.jsを入れる
自分はWindows10 Pro 64bitなので、Hyper-VのDocker環境があるので、Dockerでnode.jsを立ち上げています。インストールする方は1.2のようにダウンロードしてインストール。
1.1 Dockerfile、docker-compose
Dockerの構成はググったらいろいろ出るので割愛・・
1.1.2 nodeサーバに入れば準備OKですね。
docker-compose.ymlではtty:trueにしてdocker-compose up -d でdocker exec -it nodecontainer /bin/sh とかで入り、node -v npm -vとかで出ればOKですね。
1.2 windowsにnode.jsをインストールしpowershellなどで使う
node.jsのサイトに行き、LTS版をダウンロード、インストールしましょう。普通のアプリインストールと同じで次々進めばOKです。
1.2.1 インストールされたか確認
コマンドプロンプトかPowershellを立ち上げて(Win+R、cmdかpowershell)動作するか確認。下記2つ打ちましょう。バージョンが出てくると思います。
node -v
npm -v
2. Twitter API登録
やったことない人は結構大変かもしれませんが、「Twitter API 登録」などでググり、下記4つを取得します。これがないと何もできません。
- API Key(consumer key)
- Secret Key(consumer secret)
- Access Token
- Access Token Secret
3. npmコマンドでtwitterモジュール取得
まずは、プロジェクトディレクトリを作りましょう。
C:\Users\(あなた)\Documents\node\twtrends フォルダでも作成し、そこに移動します。
cd C:\Users\(あなた)\Documents\node\twtrends\
次に下記 npmコマンドを打ってtwitterモジュールを。
npm i twitter
これでエラーが出なければOKです。

4. コードを書いて動作確認
早速コード書いてみましょう。というか下記コピペ。正常に動けばモーメント一覧を取得できtrends.jsonファイルに保存されます。
const twitter = require('twitter'); const fs = require('fs'); const client = new twitter({ consumer_key: "API Key", consumer_secret: "Secret Key", access_token_key: "Access Token", access_token_secret: "Access Token Secret" }); const params = { id: 23424856 }; client.get('trends/place', params).then(function(res){ var json = JSON.stringify(res,undefined,2); console.log(json); fs.writeFileSync("trends.json", json); }).catch(function(err){ console.log(err); });
取得は出来ているのですが、肝心のtweet_volumeがnullになっていますね・・・


4.1 WOEIDとは?
trends/placeと一緒に渡すparamsには数字が並んでいますが、これは地域(町名、国名などの)パラメータです。これを指定することにより、地域差がわかったりします。
ほぼ同時に、日本全国と、札幌、東京、大阪、福岡のモーメント取得すると、微妙に違ったり。
これもTwitter APIで取得することが出来ます。
const params = {}; client.get('trends/available', params).then(function(res){ var json = JSON.stringify(res,undefined,2); fs.writeFileSync("woelist.json", json); }).catch(function(err){ console.log(err); });
結果をJapanなどで検索すると出てきますね。
woeidをメモっておきましょう。 2020年3月6日現在です。

地域 | WOEID |
---|---|
Kitakyushu | 1110809 |
Saitama | 1116753 |
Chiba | 1117034 |
Fukuoka | 1117099 |
Hamamatsu | 1117155 |
Hiroshima | 1117227 |
Kawasaki | 1117502 |
Kobe | 1117545 |
Kumamoto | 1117605 |
Nagoya | 1117817 |
Niigata | 1117881 |
Sagamihara | 1118072 |
Sapporo | 1118108 |
Sendai | 1118129 |
Takamatsu | 1118285 |
Tokyo | 1118370 |
Yokohama | 1118550 |
Okinawa | 2345896 |
Osaka | 15015370 |
Kyoto | 15015372 |
Japan | 23424856 |
Okayama | 90036018 |

5. その他
node.jsでgoogleトレンドからデータを取得する記事も似たような感じなので参考までに
twitterのキーワードで検索 searchは今回紹介したtrendsをちょっと変更するだけでOK
コメント