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

![7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/92374627-649a-8552-cc47-60401ed6bce6.png)

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

![8.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/9d3a8586-5746-f4f6-f8df-39607c1e11a6.png)

以後は質問に淡々と答えていきます。
![9.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/2d8b8d41-6024-8c45-a7fe-41cec6edb890.png)


英語で答える必要があるので、人によっては時間がかかるかもしれません。
![a.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/b1c6e33d-2e1a-0228-ae72-e83702cad88e.png)

最後に確認画面が出るので、「Looks good!」をクリックします。
![b.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/bca90d5a-d027-6cd1-6d49-95fe04cdffa4.png)

利用条約に目を通します。
![c.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/2c05048b-b14d-f551-587c-46bcd08d52a4.png)

この画面が出ればOKです。
登録したメールアドレスに確認用メールが届いているので、そちらを開いて登録します。
![d.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/42884110-57b0-14bc-7d65-720c50b0e5f6.png)

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

![e.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/ed05993e-fe91-3704-3bb9-4b950c15e015.png)

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

![f.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/ba5bd560-fa44-3f04-08b3-3816d69b0f47.png)


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

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

![F2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/32ef3291-fce8-f3ec-edcb-439768211058.png)


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


![h.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/ab4e2420-7525-1093-5af9-1177c4ec4b36.png)

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

![q.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/ddcfc68f-e74b-dbe0-3d6d-fe99d9db9615.png)

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

![g.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/16daf38d-15f1-fc0d-c1bc-46f49c05232d.png)

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

#AWS Lambdaの構築
「Lambda＞関数」から、関数の作成を行います。
Serverless Application Repository＞パブリックアプリケーションを選択して、「iot」で検索し、iot-twitter-bridgeを選択します。
![6.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/a895669e-5924-a5b9-5dda-f090648522a4.png)

アプリケーションの設定で、先ほどTwitterAPIでメモした４つの情報を入力します。
用語が統一されていないのですが、CONSUMER_KEYがAPI keyです。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/3ac914ab-c99f-b991-a5e1-26bfe20eaef7.png)


これでLambda関数が作成できました。
![k.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/c5434316-5940-1fd8-5b79-b2c86af943be.png)

デフォルトの関数コードを確認しましょう。
json形式で、deviceIDとincomingTextがトリガーから入力され、その情報をツイートする仕組みみたいです。
とりあえず、関数はそのままにしてTwitterAPIと接続テストします。
![n.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/e16d24cd-4c3b-a98f-be32-cc29f5dba794.png)

#テスト
テストイベントを作成します。
下記画像のようにhello-worrldテンプレートを使用し、twitterTestイベントを作成します。
![r.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/509658a7-2c7c-ac9c-1c7a-a44db8112684.png)

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

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

テストします。
下記画像のようにSuccessが表示されたら成功です。
![t.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/72147b40-1be1-f556-7121-de32e683bc38.png)

Twitter側も確認します。
![u.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287677/e5240e5f-4846-dfbd-eaac-58f01e9791fb.png)
おつかれさまでした。

ちなみに、同じ内容でテストするとエラーが帰ってきます。
同じ内容で連続投稿させないための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/