Lambdaを使って、今日の天気を定期ツイートするためにTwitterAPIを使うことにしました。
しかし、TwitterAPIが1ヶ月ほど前にバージョンアップしており、ネット上のソースコードをコピペしても上手くいきませんでした・・
数少ない情報を元になんとかツイートまでいけたのでメモ!
環境
デプロイ環境
AWS Lambda
Python 3.9
ローカル環境
MAC
Python 3.9.6
開発準備
以下の順序で進めます。
①Twitter APIアカウント登録
②Twitter API認証設定
③python3インストール
④tweepyインストール
Twitter APIアカウント登録
まず、PCで自分のTwitterアカウントにログインしときます。
(注)電話番号の登録をしていない場合は必ずしてください!
その後、Twitter Developerサイトで利用登録します。
登録画面の以下を入力してNext。
以下のポリシーに同意しSubmit。
電話番号が登録されていないと「There was a problem completing your request」のエラーが発生。
成功すると以下の画面に飛び、メールが送信されるのでメール認証をすると登録完了です!
Twitter API認証設定
アカウント登録が完了すると、アプリ設定が始まります。
アプリ名を入力し、GetKeysでAPI認証情報が表示されます(後でどうせ変えるのでコピーはどっちでもOK)
「Skip to dashboard」でダッシュボードを表示すると一番下に認証設定メニューがあるので「Set up」を選択します。
以下のように設定します。
デフォルトでは読み込みしかできないので、書き込みもできる設定に変更します。
以下は入力しないと保存できないので、何かしら入力しておきます。(私はTwitterアカウントのURLを入れときました)
入力完了したらセーブして完了です!
python3インストール
簡単なのでbrew
でインストールします。
※brewが入っていない場合はbrewをインストールしてください
$ brew install python3
$ python3 --version
Python 3.9.6
$ pip3 --version
pip 21.3.1
tweepyインストール
最後にpythonでツイートするためのライブラリtweepyのインストールです。
今回はLambda上で実行したいため、モジュール化するためにフォルダを指定してインストールします。
$ pip3 install tweepy -t (保存したいディレクトリパス名)
ソースコード
以下ソースコード。
import sys
# tweepyをインストールしたディレクトリ相対パスを指定する
sys.path.append('python_package')
# coding: UTF-8
import json
import tweepy
def lambda_handler(event, context):
# 設定ファイル読み込み
config = json.load(open('config.json', 'r'))
# Twitterオブジェクト設定
client = tweepy.Client(config['twitter']['bearerToken'], config['twitter']['consumerKey'],
config['twitter']['consumerSecret'], config['twitter']['accessToken'], config['twitter']['accessTokenSecret'])
# ツイート
client.create_tweet(text="Lambdaからテストツイート")
設定情報は外部ファイルから読み込むようにしている。
先程のTwitter APIダッシュボードからキーを生成し、config.jsonに設定する。
{
"twitter": {
"consumerKey": "上記で生成したConsumerKey",
"consumerSecret": "上記で生成したConsumerSecret",
"bearerToken": "上記で生成したBearerToken",
"accessToken": "上記で生成したAccessToken",
"accessTokenSecret": "上記で生成したAccessTokenSecret"
}
}
Lambdaデプロイ
Lambdaへのデプロイは、ソースコード&ライブラリをまとめてzipファイルにし、それを作成したLambda関数へアップロードする。
関数作成
まずLambdaで関数を作成する。
関数名とランタイムのみ設定し、他はデフォルトのまま。
アップロード
lambda_function.py,config.json,tweepyライブライディレクトリが含まれたフォルダをzipファイルにする。
zip -r (Lambda関数名).zip (ディレクトリパス)
関数メニュー→コードタブ→アップロード元→.zipファイルを選択。
ここで先程作成したzipファイルを選択し、保存する。
実行
テストタブから実行していきます!
成功!
Twitterの方でもツイートが確認できました。
終わりに
ほんとツイートできるまでが長かったです^^;
今日のお天気をツイートするところまで引き続き頑張ります!
→ ※追記 今日のお天気ツイート完成
参考
https://torutsume.net/openweathermap/
https://qiita.com/penguinprogrammer/items/b220be0c203eaaad015a
https://blog.denet.co.jp/lambda-python-zip/
https://www.delftstack.com/ja/howto/python/python-install-pip3-mac/
https://research-labo.com/howto-twitterapi-getkeys/#toc5