Slide 1

Slide 1 text

【Shingen.py #4 LT】 Python で TwitterBot を作ってみたかった 2019. 4. 6 しみず ゆうき 1

Slide 2

Slide 2 text

おまえ誰よ? しみず ゆうき ● Android / iOS プログラマ ● 甲府生まれ 甲府育ち ※ 現在は東京に出稼ぎ中(3年目) 2

Slide 3

Slide 3 text

今日は 信玄公祭り!!! 3

Slide 4

Slide 4 text

信玄公祭りといえば、甲州軍団出陣 4

Slide 5

Slide 5 text

他にも色々イベントやってる 5 ■平成31年4月5日(金)~7日(日)【主な催し(予定)】 お祭りおもてなし衆 賑わい城下町 湖衣姫コンテスト 信玄公を想う茶会 信玄グルメ横丁 琴・尺八奉納演奏 ひし丸スタンプラリー 輝きの祭典「大宝飾展」 スーパー風林火山パフォーマンスコンテスト 東京オリンピック・パラリンピック PRブース 出陣の宴 戦勝祈願式 陣屋の開設 太鼓の演奏 「風・林・火・山」総踊り 軍団集結 川中島ミニ決戦 出陣を彩るパレード 信玄公サイクルロードレース 出陣式 甲州軍団出陣 帰陣式 剣道大野試合 空手演舞会 こうふ開府 500年記念ステージ 甲斐◇風林火山 子ども武者行列 甲府囃子演奏 和太鼓演奏会  KAIFUマルシェ2019 太白桜祭り 甲州寺子屋 (信玄公祭りスケジュール https://www.yamanashi-kankou.jp/shingen/schedule.html より)

Slide 6

Slide 6 text

Bot で教えてあげたい 6 今は平和通りで「信玄公サイクルロードレース」 をやってるよ 今、何やってる? Twitter Bot

Slide 7

Slide 7 text

作ってみる! 7 ※ 以降のページは、LT内デモの内容を、発表後に資料としてまとめたものです

Slide 8

Slide 8 text

信玄公祭りスケジュールを json 化 8

Slide 9

Slide 9 text

開催中の催しのみ抽出し、並べ替え from datetime import datetime now = datetime.now() list = [] for event in events: dt_from = datetime.strptime(event['from'], '%Y/%m/%d %H:%M') dt_to = datetime.strptime(event['to'], '%Y/%m/%d %H:%M') event['time'] = dt_to - dt_from if dt_from < now and dt_to > now: list.append(event) # 開催時間が短い順にソート(メインの催しと勝手に定義) events = sorted(list, key=lambda x: x['time']) 9

Slide 10

Slide 10 text

ツイートさせる内容を作成 status_text = f'今は{events[0]["place"]}で「{events[0]["name"]}」をやってるよ' print(status_text) 10 今は舞鶴城公園自由広場特設ステージで「出陣式」をやってるよ

Slide 11

Slide 11 text

Twitter API を利用するための下準備 11 # ヒミツ consumer_key = '**********************' consumer_secret = '*****************************************' access_token_key = '**************************************************' access_token_secret = '*********************************************' $ pip install python-twitter ● 今回は python-twitter パッケージを利用する ● Twitter 開発者ポータルからトークン等取得しておく

Slide 12

Slide 12 text

python-twitter パッケージの利用方法 import twitter # twitter.Api インスタンスを作成 api = twitter.Api(consumer_key=consumer_key, consumer_secret=consumer_secret, access_token_key=access_token_key, access_token_secret=access_token_secret) # 特定のユーザのタイムラインを取得 statuses = api.GetUserTimeline(screen_name=user) # ユーザの友達を取得 users = api.GetFriends() 12

Slide 13

Slide 13 text

ツイートしよう! # ツイート api.PostUpdate(status_text) 13

Slide 14

Slide 14 text

Bot にするために... ● Bot 用の Twitter アカウントを作成する ● Bot 宛のツイートを検索・取得し、 送信者に対してメッセージを返信する 14

Slide 15

Slide 15 text

何が問題だったのか? 15

Slide 16

Slide 16 text

Twitter アプリ申請のハードルが高くなってた 16 アプリケーションの内 容を説明する (英語・300字以上) レビューされる

Slide 17

Slide 17 text

うーん、面倒! (昔は簡単だったのに ...) 17