Node.js Twitter APIを使って今のトレンドリストを取得 trends

node.js twitter api トレンド取得 nodejs

普段は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の構成はググったらいろいろ出るので割愛・・

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です。

https://nodejs.org/ja/

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です。

twitter
Twitter API client library for node.js. Latest version: 1.7.1, last published: 6 years ago. Start using twitter in your project by running `npm i twitter`. Ther...

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になっていますね・・・

node.js twitter apiからトレンド取得した結果
GET trends/place

4.1 WOEIDとは?

trends/placeと一緒に渡すparamsには数字が並んでいますが、これは地域(町名、国名などの)パラメータです。これを指定することにより、地域差がわかったりします。
ほぼ同時に、日本全国と、札幌、東京、大阪、福岡のモーメント取得すると、微妙に違ったり。

WOEID - Wikipedia

これも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日現在です。

node.js twitter api WOEID取得
テストテーブル
地域WOEID
Kitakyushu1110809
Saitama1116753
Chiba1117034
Fukuoka1117099
Hamamatsu1117155
Hiroshima1117227
Kawasaki1117502
Kobe1117545
Kumamoto1117605
Nagoya1117817
Niigata1117881
Sagamihara1118072
Sapporo1118108
Sendai1118129
Takamatsu1118285
Tokyo1118370
Yokohama1118550
Okinawa2345896
Osaka15015370
Kyoto15015372
Japan23424856
Okayama90036018
GET trends/available

5. その他

node.jsでgoogleトレンドからデータを取得する記事も似たような感じなので参考までに

twitterのキーワードで検索 searchは今回紹介したtrendsをちょっと変更するだけでOK

コメント

タイトルとURLをコピーしました