トレンドに関係した資料をつぶやくBotを作ってみた話
むかしむかしにCouseraでPythonをならったりしたものの、特に使うこともなく生きてきたわけですが、最近AtCoderなどを楽しんでいます。
せっかくなので、国立国会図書館(NDL)が提供しているAPI*1を利用して、Twitterのトレンドに関係した資料を探してくるBotを作れないかな、と思いまして。
作ってみました。
要素としては、
TwitterのAPIを使って、Twitterのトレンドを拾ってくる
→NDLのAPIで資料を探す
というようなコードを書いて、定期実行する、ということで良いのかな、と思っていたのが運の尽き。結構考えることが多かったです。
教訓としては、
・エラーメッセージを読むのは大切。
・ドキュメントは神。
1.トレンドを拾ってくる
トレンドを拾ってくる事自体は難しくありません。
Pythonで言えば、Twitter用のライブラリもいくつかあって、ぐぐるとたくさん記事が出てきます。
Python: Twitterにおけるトレンドを取得する - Fuwafuwa's memorandum
ただ、トレンドに入ってくる単語って、ハッシュタグ付きのわけわからない単文か、それだけではなんのことかわからないような固有名詞とかが多いんですね(今だと甲子園に出てる高校名とか)。
そうすると、それだけで、資料の検索をかけてもうまいものが出てこない、と。
結論から言うと
・ハッシュタグは諦めた。
・単語については、Googleトレンドの関連語検索で情報を取ってきて、加えるようにしてみた。
という感じで、できる限り、今トレンドになってる言葉に近いものを拾ってくれないかな、と願っています(あと意外とトレンドに変動がない・・・)
Googleトレンドについては、以下参照。
Pandasだなんだと次から次へデータ型を使わなきゃいけない・・・
2.NDLサーチにかける
国会図書館サーチね、たくさん横断検索かけられるのはいいのだけど、あまりにもかかりすぎるという欠点が・・・。
苦労したということでいうと辺戻りのXMLの読み方で、名前空間の概念がよくわかってなかった。
キーワードでなるべく絞ろう、というのは上で書いたとおりだけど、引っかかったものが近いのかどうかの判別はまだまだ未完成。今後用検討かなというところ。
反応が遅いのもあって、取得レコードを1点に制限しているのだけど、これを拡張して、トレンドの関連語と比較して点数つけたりするのだろうか。ちょっと気が遠くなってきた。
適切または意味ありげなデータを探してくるために、青空文庫と新書マップを優先して検索しているのだけど、上に書いたようなキーワードの制約上、まだかかったことなし。
〇〇の日、というのから、「の日」を除いて検索かけるように調整してみたので、うまく行けばなにか出るかもしれない。
3.つぶやく(定期実行)
つぶやく自体はライブラリ使えばいいので、かんたん。
定期実行は、自分のPCをつけっぱにして回す方法と、サーバを使う方法がありそうだったけど、前者は電気代が死にそうなので、後者を。
Pythonで作ったTwitterのbotをHerokuで動かす - ひとメモ
などを参照して、Herokuにデプロイして動かしてみました。
gitも覚えないといけない。まぁ、こうやって一つなにか作っていくと、色々勉強の契機になっていいよね、という感じはします。
この点での要改善点で行くと、トレンドがあんまり変わらないことと関連して、過去ツイートとのかぶりの排除をどうしてくか、ということでしょうか。
別にファイルを持っておいて、比較したりするのがよいのかな。
今後の予定
・表示分の改善のための関数の微調整
・ニュースフィードから関連の資料を取ってくる(自然言語処理API?)
←トレンドってまじまじ見たことなかったけど、ほんとにほぼエンタメっぽいので、それ以外のバリエーションも紹介したいな、と。
ここをこうしたほうがいいよ、とか、諸先輩に教えていただけるとありがたいです。
どうぞよろしくおねがいします