XR (VR/AR/MR) 情報をあつめてTwitterにポストするbotを作った

XR (VR/AR/MR) 情報をあつめてTwitterにポストするbotを作った

僕はTwitterで技術情報などをTweetしてくれるアカウントをフォローして空いた時間に流し見することで情報収集してるんですが、VRに関する情報を集めようとすると某社のアダルトVR動画の情報ばっかりヒットしてしまいます。

なので、アダルト系以外のXR情報サイトをスクレイピングし、定期的に記事のリンクをTweetするbotを作成しました。

XRNewsJP

収集した記事のURLを現在は10分毎にTweetしています。
(Herokuの無料枠内でやっているので、Tweet間隔は状況を見て調整予定)

この記事では、このbotの概要について解説します。


システム仕様

XR情報サイトなどをスクレイピングするプログラム xr-news-scraping と、スクレイピングした記事をTwitterに投稿するプログラム xr-news-tweet-bot の2本構成となっています。

実際のソースコードは以下です。

それぞれ Node.jsのCLIプログラムで、Heroku 上で一定時間ごとに実行されています。

Heroku Redisは無料枠(Hobby Dev)では25MBしかメモリを使用できないので、記事情報はLISTに保持し RPUSH -> LPOP することで不必要な記事データが残らないようにしています。

スクレイピング

  1. cheerio-httpcli で対象ページをダウンロード
  2. ダウンロードしたページから記事リンクを抽出
  3. タイトルとURLをHerokuのRedisに登録

同じURLを何個も登録しないように、RedisのSetにURLのハッシュ値を保持しておき、既に登録済みの記事は破棄しています。

TweetBot

  1. HerokuのRedisから記事データを取得
  2. goo.glでURLを短縮
  3. 1Tweetにタイトルと短縮URL, ハッシュタグ #XR_News が収まるようにタイトルを切り詰め
  4. twitterでTweet

URLやハッシュタグはTweetの文字数に含まれないんでしたっけ?
TwitterAPIのルールがよく分かっていないです。


実は一番手間取ったのはスクレイピングやBotの実装、Herokuへのデプロイではなく、Twitterの電話番号認証でした…
TwitterからのSMSが受信できなくて、スマホの設定とかキャリアの迷惑メール設定とかかなり調査したんですが、結局分からず。電話の自動応答で対応しました。(これも2-3回チャレンジしてやっと認証コード取得できた)

コメント

このブログの人気の投稿

Classpath entry org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER is marked for publish/export but is not exported on the project classpath

蛍光灯フリッカー現象 (ちらつき) の対策

[node.js] CP932のテキストを読み込む