はじめに

あっという間に2020年となりました。本年もどうぞよろしくお願いいたします。今回はこの年末年始の休みを利用して、やり残していたTwitter APIを使ったサイト制作をやってみた話をしようと思います。

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ショッピングのキーワード分析サイトを作るときに使ったカレンダーマスターテーブルのデータも連携させ、レスポンスデータの蓄積をスタートしてみました。

API取得開始から3ヶ月後

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

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

70万レコードからSUM GROUP BYして0.6294 秒で取れました

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

データを元にWEB化

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

twitterトレンドランキングサイトのついーたん

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

現在のtweetan

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

その後、ちょっとロゴ変えました

おわりに

とにもかくにも、これでdtn.jpのサブドメインは全部で6サイトとなりました。

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