Skip to content

ブログ更新をtweetする

  • Jamstack

📅 October 18, 2020

⏱️4 min read

こんちは、まっさんです。 昨日意気揚々とブログを新しくしたので、せっかくなので、ブログ更新通知機能を作って見ようと思います。

gatsbyとかのプラグインでそういった機構あるのかな?調べてないのでわからないですが、今回はお勉強がてら泥臭くwebhookとlambda使って通知します。(この記事書いてるときは、まだ完成してませんw)

使うのは、

  • twitter api
  • lambda
  • api gateway
  • contentful webhook

です。

Twitter APIの準備

これがマジで、めちゃくちゃ面倒でした。。。

2020年度版 Twitter API利用申請の例文からAPIキーの取得まで詳しく解説 | 新宿のホームページ制作会社 ITTI(イッティ)

このサイトが詳しく方法が載ってるのですが、今は若干UIが変わっていたりしています。何がめんどいって、なんと言っても必須の項目が多い。しかも英語。。。

Lambdaの準備

次は、実際にtweetしてくれるlambdaを準備していきます。 私は、js大好き民(jsしか書けない)のでnodejs12系を選んでいきます。

node moduleのtwitter - npmを使って行くので、layerとやらを使います。

layerにnode moduleぶっこんで使っていく方法はこちらを↓。zipに固めてuploadするだけなので、楽ちんですね。 node_modulesをLambdaレイヤーにアップロードしてライブラリを使用する - Qiita

Lambdaでツイートするコードを書く

const Twitter = require('twitter');

const client = new Twitter({
  consumer_key: '',
  consumer_secret: '',
  access_token_key: '',
  access_token_secret: ''
});

function tweetPost(content = 'テストtweet') {
  return client.post('statuses/update', {status: content})
}

exports.handler = async (event) => {

    await tweetPost(event.tweet)
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

ここらへんも、「lambda tweet」とかで、ぐぐるといっぱい参考になる記事が出てきますが、ちょっと詰まったのが、ググって上がってくる記事が古いからかして、実際にツイートするapiを叩くのが非同期処理なのを考慮してない記事が多い。

awaitつけずに、実行するとtweetするより早く、lambdaが終了?してしまって、tweetしてくれないのでawaitが必要かと思われます。

(postのbodyで{"tweet": "ツイートする内容"}を受け取る想定)

api gatewayを準備する

AWS Lambda + API Gateway の使い方【初心者】 - Qiita

このあたりを参考に、api gatewayを設定していきました。発火させるlambdaのarnに$LATESTを使うと、{"message": "Internal server error"}% が返って来て使えないので、lambda側でもちゃんとバージョンを発行してあげましょう。

contentfulでwebhookの設定をする

api gatewayで作成したURLをcontentfulのwebhookに登録します。 netlifyでもいいかと思ったのですが、将来的に、更新したブログのurl・titleを取得したいので、netlifyではなく、contentfulのwebhookを使用します。

この設定は致命的な欠陥があり、contentfulが記事の更新をトリガーにnetlifyとlambdaを叩くので、netlifyのビルドより先に、「記事更新したぜ」ツイートが投稿されてしまいますwww

そのあたりは、lambda側でなんとかすれば良さそうなのですが、ちょっと面倒そうなので、一旦この残念な仕様でいきます。

結局ちゃんと自動ツイートできた?

この記事を書いてるときは、まだ、実際にcontentfulから通しでチェックしていないので、あしからず。 色々と残念な部分が多いので、また、追記修正していきます!!!!

【追記】 ちゃんと、更新ツイートできてました!!! やっぱり、JAMstack構成だと、webhook使って簡単にブログの方をいじらずに、追加機能を作れちゃうのがいいですね。

それではまたー。

← PrevNext →
  • @masayuki031