LoginSignup
1
1

More than 1 year has passed since last update.

Twitter 画像付き自動投稿つくってみた【AWS Lambda】

Last updated at Posted at 2022-11-25

あらまし

素数の日(=yy/mm/dd のdd 部が素数)1にその素数にちなんだ画像を自動ツイートする機能をAWS Lambda で作成しました。

殆ど以下の記事に記載されている通りに実装したので、関数作成前のTwitter API利用開始までの手順を備忘録としてメモ。

Twitter Developer Portal に登録

Twitter API を利用するために、以下のDeveloper Portal にアカウントを登録します。

image.png

APIを利用するTwitter アカウントで、事前に電話番号を登録しておかないといけなかった。こちらは登録していなかった場合のエラーメッセージ。

image.png

There was a problem completing your request
User must have a verified phone number on file prior to submitting application.

電話番号の登録はTwitter のアカウント設定から実施。

その後Developer Potal に戻り、登録継続。
こちらでアプリ名を入力。

image.png

事前に調べたところもっと大変そうだったのですが、この時点でAPI キー等が取得できました。
※後ほどアクセス権限をアップグレードするElevated Access のリクエストにて、英作文する必要がありました。後述。

キーをSystem Manager のパラメータストアに登録

image.png

image.png

ユーザ毎のアクセストークンをTwitterDeveloper Dashboard から生成しておいて、こちらも同様に登録。

image.png

初めに生成したらRead Only の権限だったので、Read and Write に設定して再生成。

image.png

設定はUser authentication Settings から。

image.png

Lambda 関数の作成

Role はBasic Lambda Permissions で登録。

image.png

このRole はSystem Manager のパラメータストアを参照できるよう、権限を編集する必要があります。
こちらの記事を参考にしました。

Lambda 関数の中身は冒頭で張り付けた記事を参考にしています。再掲。

Developer Portal でAPI権限の拡張をリクエスト

Lambda 関数のテスト実行後、次のエラーが出る。

You currently have Essential access which includes access to Twitter API v2 endpoints only.

image.png

テスト実行結果としてはSuccess と出ているので、ちょっと紛らわしい。

このエラーはAPIの利用権限が足りていないのが原因。
Twitter Developer の以下へアクセスし、Apply for Elevated のリクエストを送る。

ここで英文での利用用途の説明が必要。以下に回答を張り付けておきます。

  • Q. How will you use the Twitter API or Twitter Data?

I'm going to create TweetBot for a personal use. I will use AWS Lambda for deploying, and this will be triggered on a specific day by AWS CloudWatch. The purpose is to post an image related to some specific day, not for any businesses.

  • Q. Will your App use Tweet, Retweet, Like, Follow, or Direct Message functionality?

I will use only a post method to post a Tweet with an image. I would not use Retweet, Like, Follow or Direct Message methods.

その他の質問事項はスイッチをオフにして無回答。

image.png

サブミット後、即承認される。

再度Lambda のテストを実行すると、、、

image.png

無事ツイートできていた。

EventBridge (Cloudwatch Event) でLambda の実行トリガーを設定

毎月、素数の日の06時09分に発火するよう設定。
ただしEventBridge のCron 式はUTCなので9時間前の21時9分、日付も一日前で設定。ちょっとややこしい。

image.png

追記:料金について

一か月運用してみたところ、無料利用枠に収まっていました。
コストに関わってくるリソースはEvent Bridge とLambda ですが、この通り。

image.png

まとめ

そんなわけで拙Twitter アカウントでは素数の日に素敵素数と言い間違えた画像が自動投稿されるようになっています。

image.png

ちなみにこれらは元々LINEスタンプとして作成したもの。販売中です。

自動投稿の対象でない、31より大きな素数もあります。

image.png

  1. yyyymmdd の8桁が素数の場合を「素数の日」と呼ぶ流派もあるようです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1