XR (VR/AR/MR) 情報をあつめてTwitterにポストするbotを作った
僕はTwitterで技術情報などをTweetしてくれるアカウントをフォローして空いた時間に流し見することで情報収集してるんですが、VRに関する情報を集めようとすると某社のアダルトVR動画の情報ばっかりヒットしてしまいます。
なので、アダルト系以外のXR情報サイトをスクレイピングし、定期的に記事のリンクをTweetするbotを作成しました。
収集した記事のURLを現在は10分毎にTweetしています。
(Herokuの無料枠内でやっているので、Tweet間隔は状況を見て調整予定)
この記事では、このbotの概要について解説します。
システム仕様
XR情報サイトなどをスクレイピングするプログラム xr-news-scraping
と、スクレイピングした記事をTwitterに投稿するプログラム xr-news-tweet-bot
の2本構成となっています。
実際のソースコードは以下です。
- Kazunori-Kimura/xr-news-scraping: XR (VR/AR/MR) に関するニュースを収集するスクリプト
- Kazunori-Kimura/xr-news-tweet-bot: XR-NewsJPのTwitterBot
それぞれ Node.jsのCLIプログラムで、Heroku 上で一定時間ごとに実行されています。
Heroku Redisは無料枠(Hobby Dev)では25MBしかメモリを使用できないので、記事情報はLISTに保持し RPUSH
-> LPOP
することで不必要な記事データが残らないようにしています。
スクレイピング
- cheerio-httpcli で対象ページをダウンロード
- ダウンロードしたページから記事リンクを抽出
- タイトルとURLをHerokuのRedisに登録
同じURLを何個も登録しないように、RedisのSetにURLのハッシュ値を保持しておき、既に登録済みの記事は破棄しています。
TweetBot
- HerokuのRedisから記事データを取得
- goo.glでURLを短縮
- 1Tweetにタイトルと短縮URL, ハッシュタグ
#XR_News
が収まるようにタイトルを切り詰め - twitterでTweet
URLやハッシュタグはTweetの文字数に含まれないんでしたっけ?
TwitterAPIのルールがよく分かっていないです。
実は一番手間取ったのはスクレイピングやBotの実装、Herokuへのデプロイではなく、Twitterの電話番号認証でした…
TwitterからのSMSが受信できなくて、スマホの設定とかキャリアの迷惑メール設定とかかなり調査したんですが、結局分からず。電話の自動応答で対応しました。(これも2-3回チャレンジしてやっと認証コード取得できた)
コメント
コメントを投稿