GeekFactory

int128.hatenablog.com

Google Cloud FunctionsでTwitter検索のRSSフィードを作る

Twitterの検索結果をRSSフィードで提供するサービスはいくつかありますが、リフレッシュ間隔がいまいちだったのでGoogle Cloud Functionsで自作することにしました。

Twitter Search APIの結果をRSSフィードに変換して返して、SlackでRSSフィードを購読します。

Twitter APIへのアクセスやRSSフィードの生成には以下のモジュールを利用することにしました。

Cloud Functionsでは管理コンソールからエディタでindex.jspackage.jsonを直接編集できるので便利です。

下記のようなスクリプトを書きます。

exports.search = (req, res) => {
  const { id } = req.query;
  if (id) {
    const client = new Twitter(credential);
    // idユーザのツイートを検索する
    client.get('search/tweets', {q: `from:${id}`}).then(tweets => {
      const feed = new Feed({
        id: id,
        title: `${id}'s Tweets`,
      });
      // フィードに追加する
      tweets.statuses.forEach(tweet => feed.addItem({
        id: tweet.id,
        title: tweet.text,
        date: new Date(tweet.created_at),
      }));
      res.status(200).contentType('application/xml').send(feed.rss2());
    });
  } else {
      res.status(400).end();
  }
};

あらかじめTwitter APIAPIキーを取得しておく必要があります。今のところ管理コンソールでは実行時の環境変数を設定できないようなので、ソースコードAPIキーを直書きしています。

デプロイしたらURLに ?id=username を付けてアクセスしてみましょう。RSSフィードが表示されるはずです。

ソースコードを下記に置いているのでご参考まで。

github.com