LoginSignup
19
21

More than 5 years have passed since last update.

[Lambda][Python] LambdaからTwitterに投稿しよう!

Posted at

天気が悪いですね。吉田です。
僕はAWSサービスでは Lambda が特に好きです。使いこなしているかは置いておいて
最近LambdaでPythonが使えるようになったせいでしょうか。

LambdaネタはやたらPythonで聞きます!

Node.jsってなんかかっこいい!って思ってた僕は時代遅れなのでしょうか!?(狼狽)

そんな不安を覚えたためPython歴4時間程度の僕がPythonで頑張ってみました。


0.目的

awsSNSをトリガーとしてLambdaを発火しSNSのメッセージをTwitterに投稿します。

イメージはこんな感じ

プレゼンテーション1.jpg

今回はサンプルのSNSメッセージを使って 「Hello from SNS!」と自分のアカウントに投稿するまでをやってみます。

前提条件

  • Twitterのアカウントを持っている
  • Twitterのアカウントに電話番号登録が済んでいる
  • Pythonが導入されていてpipコマンドも使える

1.Twitter投稿準備

Twitterを操作するための準備をします

上記URLにアクセスするとTwitterのdeveloperサイトに飛びます。

Twitterのアプリ登録とか昔やったな・・・って方はここ

Twitter画面1.jpg

Twitter_Developers2.jpg

TwitterのアカウントにSign Inしていない場合は右上のSign Inをクリックしサインインしてください。

Twitter_Application_Management.jpg

Create_an_application___Twitter_Application_Management.jpg

書き終わったら下の方にスクロールし、注意に目を通せるなら目を通してAgreeする。

sample2yukiyoshid___Twitter_Application_Management.jpg

2sample2yukiyoshid___Twitter_Application_Management.jpg

003.jpg

004.jpg
上記4つのキーが確認できればTwitterでの準備は完了です。

2.Lambda Functionの作成準備

Twitterの準備ができたので早速書いていきます。

使用環境:Mac

先ずは作業ディレクトリを作成し、その中に使用する外部モジュールをインストールします。
今回はホームの直下に作成しました。
ディレクトリを作成したらスクリプトを記述するファイルを作成しておきます。

mkdir lambda_function`
cd lambda_function
vi function.py

次にlambdaで使用する外部モジュールのインストールをします。
今回は「Requests-OAuthlib」というモジュールを使うのでこれをインストールします。

pip install requests_oauthlib -t ./
先ほど作成したディレクトリ内でコマンドを叩いてください
-t オプションのあとにカレントディレクトリを指定することでインストールできます。

3.fnction.py

今回書いたスクリプトがこちら

function.py

from requests_oauthlib import OAuth1Session

# Consumer Key          : CK
# Consumer Secret       : CS
# Access Token          : AT
# Accesss Token Secert  : AS

CK = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
CS = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
AT = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
AS = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

URL = 'https://api.twitter.com/1.1/statuses/update.json'


def handler(event, context):
    msg = event['Records'][0]['Sns']['Message']
    params = {"status": msg }

    twitter = OAuth1Session(CK, CS, AT, AS)
    req = twitter.post(URL, params = params)

    if req.status_code == 200:
        return msg
    else:   
        return req.status_code


このスクリプトのおかげでPython童貞がPython歴4時間に昇格しました。
いやー、やっぱ動かないね!これだけでも(汗
URLは投稿用の特殊なURLらしいです。

4.作成した環境をZip化してAWSへ

では今回作成した環境をzip化してAWSへ持って行きます
注意としては 作ったディレクトリの中身を圧縮しないとモジュールが見つからないと怒られます
これで1時間ほどハマりました・・・

cd lambda_function
zip -r myfunc.zip ./

圧縮するzipファイル名は適当で大丈夫です。

AWS_マネジメントコンソール.jpg

AWS_Lambda.jpg

AWS_Lambda02.jpg

AWS_Lambda03.jpg

ポイントはハンドラーの名前です。function.handlerになる理由は書いてあるとおりです。

あとはCreate Functionをすれば完成です。

4.Test

テストソースをSNSに指定します。すると・・・
AWS_Lambda-kekka.jpg

ちゃんとログが出ています。
Twitterを確認すると・・・

ミッスッター_ヨーダ__Yuki_BB3_さん___Twitter.jpg

できていますね!

このアプリですが、テストメッセージで全く同じものを送信しようとすると403エラーが帰ってきて投稿できませんでした。仕様かしら?


やったーーーーーー!!!!
できたぞ!

例えばこれをBOTOを使ってAWS環境で自分が立ててるEC2の数なんかをTweetすると消し忘れとかも防げそうですよね?

何に使うかは別としてPythonで動くものができてよかったよかった。

参考

Python で Twitter API にアクセス

Twitterアプリケーションの作成(Consumer key、Consumer secret、Access token、Access token secretの確認方法)

19
21
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
19
21