この記事では、Twitter APIのGET trends/place APIを使ってツイッターのトレンドワードデータを取得し、これをサイトの形に仕立てるまでの流れをご紹介しています。実際にこのデータを元にして作ったサイトが「ツイータン」になります。サイトをまずはご確認下さい。

Twitterでは様々なAPIを公開されていますが、ツイッターのトレンド情報を地域別に取得できるGET trends/place APIでは、トレンドのキーワード情報という、かなり使えるデータを取得することができます。

5分毎に更新されるこのデータをスコアリングしつつ集信して、ランキングにまとめたサイトがこの「ツイータン」になります。

TwitterのAPI

TwitterのAPIでおなじみのものといえば、dtnディレクトリのキーワード検索でも使っているSearch Tweets APIがありますが、TwitterのAPIにはこれ以外にもアカウント関連、ツイート関連など、さまざまなAPIが用意されています。中でも、データ取得で使えそうなものとして、ツイッターのトレンド情報を地域別に取得できるGET trends/place APIがあります。

Twitter APIのトレンドデータ

ツイッターのトレンドとは何か?についてはFAQにも詳しく書いてありますが、単純なキーワードの日別ランキングということではなく、結構複雑なアルゴリズムでHOTな話題に関連するキーワードを抽出したものということのようです。

トレンドはアルゴリズムによって決定され、初期設定では、フォローしているアカウント、興味関心、位置情報をもとにカスタマイズされています。ここ数日や今日1日で話題になったトピックではなく、今まさに注目されているトピックが選び出されるため、Twitterで盛り上がっている最新の話題をリアルタイムで見つけることができます。

Twitterのトレンドについてのよくある質問

Twitterでまさに今盛り上がっている話題に関するキーワードが取得できるということで、これを集めると色々と面白いことができそうな気がしました。

トレンドデータをためる

そんなことを昨年末の台風が吹き荒れて寝れずにいた夜中にふと思い付き、5分毎に更新されるAPIのデータをcronを使ってMySQLにひっそりと貯め始めておりました。とはいえ、サイトの形に仕上げる暇もなく年末休みまで過ごしていたので、この年末年始休みをいかしてサイトの形に仕上げてみたという感じです。

APIレスポンスデータの中身

APIのマニュアルを見てもわかると思いますが、取得できるデータは下のJSONにあるように、「トレンドキーワード(#ハッシュタグの場合もあり)」、「キーワードURL」程度しかなく、1番使えそうなツイートのボリュームデータは値があるものがチラホラ存在している、ほとんどがNULLだったりして使えそうにはありませんでした。

 [
  {
    "trends": [
     {
        "name": "あなたの精神年齢",
        "url": "http://twitter.com/search?q=%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E7%B2%BE%E7%A5%9E%E5%B9%B4%E9%BD%A2",
        "promoted_content": null,
        "query": "%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AE%E7%B2%BE%E7%A5%9E%E5%B9%B4%E9%BD%A2",
        "tweet_volume": null
      },

最終的にはランキングの形に仕立てたいので、ログを貯める際に何かしら値を持たせておきたいとは思いましたが、こうなると自分でなんとかするしかなさそうです。

ランキングを数値化

取得データをランキングに仕立てる最終的な解決法ですが、1回のレスポンスで取得できるトレンドワードが50個ということもあり、上から順に50,49,48・・・・3,2,1とポイントを付けてログを貯めるで解決することにしてしまいました。色々考えたものの、手っ取り早くできそうなことはこの程度かと思いまして…

とはいえ、これだけでデータを貯めていっても集計でつまづきそうなので、Yahooショッピングのキーワード分析サイトを作るときに使った、カレンダーマスターの日付データも連携させ、Twitter APIのトレンドランキングデータ蓄積をスタートしてみました。

API取得開始から3ヶ月後

cronを仕掛け始めてから約3ヶ月。5分毎に走るcronは一度もこけることなく無事走り続けてくれたようで、みたら70万レコードを超えるデータがSQLにたまっておりました。

年末休みに入り、データがきれいにたまっているのはよく分かりましたが、なにせ適当に値を付けて保存したデータを集計するとどうなるかがサッパリ予想できなかったので、取り急ぎこのトレンドデータを月別にスコア値でSUM ORDER BYをするクエリを書いて吐き出してみました。

すると、なんとなく使えそうなデータが取得できていることが確認できました。

API取得開始から3ヶ月後で取得した70万レコードをORDER BYしてみた
70万レコードからSUM GROUP BYして0.6294 秒で取れました

データを元にWEB化

クエリのレスポンス速度もさほど問題ない感じでしたので、早速このクエリをベースとして、月別のトレンドワードのランキングを見れるようなサイトに仕立て上げてみました。年末年始休みもそれほど休みがある訳ではないので、デザインは画像掲示板の泉で使ったbootstrapのテンプレートをほぼそのまま流用してしまいました。

バックエンドが制作できたのでフロントデザインを加えてサイトとする
twitterトレンドランキングサイトのついーたん

できあがったのが、こちらのツイータンです。なんでこんなサイト名かというと、cron用のプログラムを作ったときに何故か/tweetanというサブディレクトリを切って作っていたので、このtweetanをそのまま流用してついーたんにしてしまいました。何を思って/tweetanというディレクトリを切っていたかはさっぱり思い出せません。

現在のtweetan

その後、ひらがなでこのフォントだと流石にダサすぎとは思いまして、トップのロゴも筆記体に変えておきました。

Twitterトレンドランキングサイトのサイト名をひらがなから片仮名に
その後、ちょっとロゴ変えました

おわりに

あっという間に2020年となりました。このサイトも含めると、dtn.jpのサブドメインは全部で6サイトとなりました。

どのサイトも、ユーザ数・セッション数が微妙に増えつつあるので、今年ものんびりと個人サイト運営を頑張りたいと思います。