Table of Contents
Who(はじめに)
こんにちは、FundastA Inc.の後藤です。
こういった記事を書くのは初めてなので温かく見守っていただけると幸いです。
What
タイトルの通りですが、指定したアカウントのツイートを取得して、例えばツイートに「Twitter」という単語が含まれていればLINEに通知。含まれていなければ何もしない。そんな自分専用のBOTを作ったお話です。
Why
とあるWEB小説の連載が更新されると、何時に新作が公開されるのかを著者さんがツイートされる(毎回同じ時間帯なのと、文面もほぼ同じ)ことを知り、Twitterをチェックせずとも連載の更新有無を知れると考えました。あとは単純にTwitterAPIを使ってみたかった。
How
著者さんがツイートされるであろう時間帯を狙ってlambdaをCRON実行し、毎日AM2:00に取得しています。
これはアーキ図(のつもり)です。
コードはlambdaにベタ書きしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
import re import tweepy import settings import line_notify as notify import dynamodb_function as dynamodb def lambda_handler(event, context): # 環境変数を設定 con_key = settings.con_key con_sec = settings.con_sec acc_tok = settings.acc_tok acc_sec = settings.acc_sec auth = tweepy.OAuthHandler(con_key, con_sec) auth.set_access_token(acc_tok, acc_sec) api = tweepy.API(auth) #タイムラインを取得し、1ツイートずつループ # 「更新しました」という文字列が含まれているかどうか判定し、Trueの場合のみツイートを表示する for status in api.user_timeline(id="@nezumiironyanko"): if re.search("更新しました", status.text): #ユーザ名表示 print('name:' + status.user.name) #内容表示 print(status.text) # DBにツイートIDを見に行く res_id=dynamodb.db_get_item(status.id) if res_id: print("登録済み") else: # TweetIDをDBへ登録 dynamodb.db_put_item(status.id, status.text) try: api.create_favorite(status.id) api.retweet(status.id) except: print("リツイート済み") # LINEに通知 notify.send_line_notify(status.text) else: pass |
28行目、api.user_timeline(id=”@nezumiironyanko”)
ここで取得したいツイートのTwitterアカウントIDを指定しています。
29行目以降
ツイートに「更新しました」という文字列が含まれていた時、status.id (全てのツイートに割り振られているID)をもとに
同じIDのツイートが登録されているかどうかをチェック。未登録であればレコードを登録して、LINEにツイート内容を通知。
ここでツイートIDをチェックする理由は、CRONで毎日自動実行しているので、同じツイートを取得してしまった時に再度LINEに通知することを防ぐためです。
ツイート取得に成功すると
このようにLINEに通知が来ます。(画像は「7月30日」を検索キーワードに指定しています)
あとがき
こちらのツールは3月頃から動いていますが、同じく3月頃から件のWEB小説の更新が止まっており、いまだ出番無しな状態です。。