LINEBot

Twitterで自動ふぁぼ!PythonでTwitterBOTをつくる。

PythonでTwitterAPIを使って色々遊んでみたので記録。
今回は、
・ツイートの投稿
・特定のユーザーのツイート取得
・指定したキーワードを含むツイートの自動いいね
の3つのプログラムを作った。

もくじ

  1. TwitterAPIの使い方
  2. TwitterAPIの制限
  3. ツイートの投稿
  4. 特定のユーザーのツイート取得
  5. 指定したキーワードを含むツイートの自動いいね
  6. まとめ
  7. 参考

TwitterAPIの使い方

例によってAPIの登録方法に関しては、わかりやすくまとめてくれてる記事があるので割愛!

参考記事はこちら。
PythonでTwitter API を利用していろいろ遊んでみる

公式はこちら。
残念ながらLINEMessagingAPIほどドキュメントはわかりやすくなかった。
Twitter Developer Platform

どうやらTwitterAPIはOAuth1.0で認証を行っているらしい。
GoogleAPIは2.0だったので、ちょっと古いのかな?

OAuth認証に関しては理解が浅いので詳細は割愛。
このサイトでかなり詳細に解説してくれてるので、今度じっくり読む予定・・・。
・・・ほんとに読むよ!

OAuth1.0の署名(Signature)を作成する方法

ほらね、動くもの作る前に基礎理論理解しようとすると挫折するしね。
ざっくり、URLやら何やらをまとめて暗号化して送信することで、他人に乗っ取られたりさせないための仕組み?程度の理解で先に進む!

TwitterAPIの制限

さぁTwitterAPIで遊ぼう!
と、その前に。

どうやらTwitterAPIには、アクションごとに回数制限があるようなのでそれを先に確認しておく。
こちらの早見表が便利。
レート制限: 早見表

まぁでも個人で遊ぶ分にはあんまり関係なさそう。

ツイートの投稿

まずはツイート投稿のコードから。
これは正直PythonでTwitter API を利用していろいろ遊んでみるの丸コピなので、もしかしたらあんまりよろしくないかも。
この後のコードとの比較としてどうしても載せたかった。

こっちは、TwitterAPIとの接続にrequests_oauthlibを用いてる。
これより、次のコードで使ってるTweepyの方がずっと使いやすくて便利なのでおすすめ。

コードの解説は割愛。詳細は参考サイトに。

  from flask import Flask, request, abort, render_template,redirect
  from requests_oauthlib import OAuth1Session
  import requests

  app = Flask(__name__)

  CK = 'Consumer Key'
  CS = 'Consumer Secret'
  AT = 'Access Token'
  AS = 'Accesss Token Secer'

  # ツイート投稿用のURL
  url = "https://api.twitter.com/1.1/statuses/update.json"

  @app.route('/')
  def main():
      # ツイート本文
      params = {"status": "このツイートはPythonとtwitterAPIを用いてツイートしてます。"}

      # OAuth認証で POST method で投稿
      twitter = OAuth1Session(CK, CS, AT, AS)
      req = twitter.post(url, params = params)

      # レスポンスを確認
      if req.status_code == 200:
          print ("OK")
      else:
          print ("Error: %d" % req.status_code)

  if __name__ == '__main__':
      main()

特定のユーザーのツイート取得

こっちのコードはTweePyで実装。
Tweepyは、PythonでTwitterを扱うためのモジュール。
とっても使いやすくてわかりやすいドキュメントに感動した。

公式ドキュメントはこちら。
Tweepy Documentation

  from flask import Flask, request, abort, render_template,redirect
  import tweepy

  app = Flask(__name__)

  CK = 'Consumer Key'
  CS = 'Consumer Secret'
  AT = 'Access Token'
  AS = 'Accesss Token Secer'

  @app.route('/')
  def main():
      auth = tweepy.OAuthHandler(CK, CS)
      auth.set_access_token(AT, AS)
      api = tweepy.API(auth)
      tweets = api.user_timeline(id='ID',count=10)
      for tweet in tweets:
          print(tweet.text)

  if __name__ == '__main__':
      main()

上のコードは、IDで指定したユーザーの投稿を取得して表示する。
これで有益なツイートしてくれる人の投稿だけテキストファイルにしたり、BOTで転送したりできるね!
このコードのままだとメンションもすべて拾ってしまうので何か対策は必要だろうけど。

指定したキーワードを含むツイートの自動いいね

最後は、今回作った中で一番役に立ってるプログラム。
指定したキーワードを含むツイートを自動でふぁぼってくれる便利プログラム。

今はチャットボットに組み込んで、LINEからキーワード入力を行っている。
なんと、昨日これを作ってから一日でフォロワーが30人くらい増えた。
驚き。
有益なのでなんとか配れる形にしたいんだけど、規約とか大丈夫なんかな?

もしいけるならElectronかLINEBotでみんなが使えるようにして配布する予定。

  from flask import Flask, request, abort, render_template,redirect
  import tweepy
  from time import sleep

  app = Flask(__name__)

  CK = 'Consumer Key'
  CS = 'Consumer Secret'
  AT = 'Access Token'
  AS = 'Accesss Token Secer'

  @app.route('/')
  def main():
      auth = tweepy.OAuthHandler(CK, CS)
      auth.set_access_token(AT, AS)
      api = tweepy.API(auth)
      i = 1
      tweets = api.search(q='Progate',count=100)
      for tweet in tweets:
          tweet_id = tweet.id
          try:
              api.create_favorite(tweet_id)
          except:
              next
          sleep(0.3)

      return"ok"

  if __name__ == '__main__':
      main()

まとめ

とりあえず今回は3つのプログラムを作って遊んでみた。
TwitterAPIの勉強始めてから数時間で色々作れた。

相変わらずPythonは何でも簡単に作れるなぁ。
プログラミングとても楽しい。

とはいえ、もっと基礎理論とかも学んでいきたい。
開発に逃げるなー、って感じだ。
そろそろ次のステップを意識しよう。

参考

・WEB
PythonでTwitter API を利用していろいろ遊んでみる

Twitter Developer Platform

OAuth1.0の署名(Signature)を作成する方法

Tweepy Documentation

POSTED COMMENT

  1. krmn より:

    自動ふぁぼ機能使いたいです
    公開は出来そうですか?

    • Kashiwaba Yuki より:

      返信遅くなりました!
      機能自体はできてるので公開可能です!
      記事化したらまたこちらに返信しますね!

    • Kashiwaba Yuki より:

      お待たせしました…!
      こちらでWEBアプリとして公開してますので、よければ使ってください。
      日本一シンプルなTwitterBOT

COMMENT

メールアドレスが公開されることはありません。