AWS Lambdaからツイートする


はじめに

引き続き、退社情報自動通知機能を作っていきます。
前回の記事で、スマホからAWSに位置情報を送信することができました。
次は、AWS Lambdaを使って、Twitterと接続します。

通知手段について

前提として、通知先は妻のiPhoneを想定しているので、特殊な設定はしたくありません。
簡単にAWSから第三者のスマホに通知するには以下の方法があげられます。
・LineBot
・TwitterBot
・メール
この中で、一番実装が早そうなTwitterを用いて、通知します。
(もっと簡単な方法があったら教えてください。)

Twitter APIの利用登録

Botのように、プログラムを用いてツイートするためには、「Twitter API」の利用登録をする必要があります。
利用登録の前に、まだTwitterのアカウント登録をしていない方は、しておいてください。
なお、アカウントにメールアドレスも登録しておかないと、「Twitter API」の使用登録はできません。

下記サイトにアクセスし、TwitterAPIの利用登録を行います。
https://developer.twitter.com/en/apps

利用用途が問われます。
今回は趣味(Hobbyist)でBotを作成するので「Making a Bot」を選択します

以後は質問に淡々と答えていきます。

英語で答える必要があるので、人によっては時間がかかるかもしれません。

最後に確認画面が出るので、「Looks good!」をクリックします。

利用条約に目を通します。

この画面が出ればOKです。
登録したメールアドレスに確認用メールが届いているので、そちらを開いて登録します。

Twitter APIの初期設定

Twitterの開発者用画面にログインすると、アプリの名前を聞いてくるので、適当に答えます。

ここで、プログラムからツイートするための鍵が表示されますが、あとで再発行するので、無視して大丈夫です。
「Test an endpoint」をクリックします。

アプリの登録がおわったら、権限の設定を行います。
初期状態だとツイートの読み込みしかできません。
この権限の設定をしないと、プログラムからツイートできないため、後々エラーが発生します。

画面右上の「Developer Portal」を開きます。

画面左のタブの「Project & Apps」から先ほど名前を付けたアプリ名を選択します。
すると、アプリの設定画面が出るので、「App Permissions」の「Edit」をクリックします。

Read(読み込みのみ)になっているので、「Read + Write + Direct Message」に変更します。

次に、APIを利用するため、KeyとTokenを確認します。
「API Key & Secret」をRegenerateし、①API keyと②API key secretをメモしてください。
また、「Access Token & Secret」をGenerateし、③Access tokenとAccessと④token secretをメモしてください。
後にAWS Lamdaにこの4つの情報を入力します。

これでTwitter APIの設定は終わりです。

AWS Lambdaの構築

「Lambda>関数」から、関数の作成を行います。
Serverless Application Repository>パブリックアプリケーションを選択して、「iot」で検索し、iot-twitter-bridgeを選択します。

アプリケーションの設定で、先ほどTwitterAPIでメモした4つの情報を入力します。
用語が統一されていないのですが、CONSUMER_KEYがAPI keyです。

これでLambda関数が作成できました。

デフォルトの関数コードを確認しましょう。
json形式で、deviceIDとincomingTextがトリガーから入力され、その情報をツイートする仕組みみたいです。
とりあえず、関数はそのままにしてTwitterAPIと接続テストします。

テスト

テストイベントを作成します。
下記画像のようにhello-worrldテンプレートを使用し、twitterTestイベントを作成します。

一応、中身を貼り付けておきます。

{
  "deviceID": "6060",
  "incomingText": "twitter from aws"
}

テストします。
下記画像のようにSuccessが表示されたら成功です。

Twitter側も確認します。

おつかれさまでした。

ちなみに、同じ内容でテストするとエラーが帰ってきます。
同じ内容で連続投稿させないためのTwitterの仕様だそうです。

details: {u'errors': [{u'message': u'Status is a duplicate.', u'code': 187}]}

おわりに

退社自動通知機能の作成を目的とし、AWSからツイートするところまでできました。
あとはIotとLambdaを接続し、関数を少しいじくればできそうですね。

参考URL

いつも感謝しています。

twitterアプリの作成
https://yosiakatsuki.net/blog/create-twitter-application/