システムエンジニアになる ツール

たったの3ステップ!pythonで作るtwitterbotの作り方を紹介します!

どうも、こちょすです。

今回は中の人が気になっちゃう!Bot(ボット)製作について書いていきます!

 

みなさんすでにご存知の方も多いと思いますが、
このブログはレオナさんとの共同ブログとして運営しています。

 

 


実はTwitterで「これおブログ専用の公式アカウント」が存在することを知っていますか?(笑)

 

基本的には各々のアカウントでつぶやいているのですが、

・公式アカウントを作成したからには公式でも呟きたい!

・でも2回ツイートするのはめんどくさい!

 

というレオナさんのご要望があったわけです。

ブログ記事を満を持して公開したら、ツイッターで告知したいですよね?
(だって見てもらいたいじゃないですか笑)

 

そこで僕は、情報を拡散していきたい!となったら、自動で個人アカウントのツイートをリツイートしてくれたらとても便利なのでは???と思いました。

というわけで、今回はpythonのライブラリ、Tweepyを使って、自動リツイートをしてくれるbotを作って行こうと思います。

 

 

やりたいことの整理

まずはやりたいことの整理から!

 

1 特定のキーワードを含むツイートを検索する
2 検索にヒットしたツイートをリツイートする

 

この2つが実装できればOKとしましょう!

 

Tweepyとは?

 

一言で言えば、

「pythonでtwitterを扱うライブラリ」

です。

 

 

これを使うことで、簡単にtwitterに対して処理を行うことができます。他にもtwitter関連のライブラリはありますが、今はtweepyがもっともポピュラーといえるでしょう。

 

 

【STEP0】 TwitterAPIへの登録

 

まず第一歩はTwitterAPIへの登録をしましょう!

 

APIとは?

APIってなに?聞いたことあるけどよくわからない、、、という方も多いと思うので、まずはそこから少し説明します!

 

色々イメージを探して見たのですが、これがわかりやすいかなと思い、引用させていただきました!(英語ですがびびらなくても大丈夫です!)

 

https://www.darkreading.com/application-security/why-you-need-to-think-about-api-security/a/d-id/1335861

 

普通はユーザの私たちは「Webサーバにリクエスト(GET)を投げる」と、HTMLファイルを返してくれます。

すると、なんかいい感じにレンダリング(整形)されて、
ページが表示されるわけですが、APIの場合にはRawデータが返されます。

 

Rawというのは「生の」という意味で、つまりデータだけが返されます!
データの形式は色々で、jsonだったり、csvだったりxmlだったりなので、使いたいAPIがどんな形式を返すのかは確認するようにしましょう!

 

 

というわけで、botの作成にとりかかりましょう!

やるべきSTEPは大きく3つ!

 

1 Twitter Developer アカウントの作成
2 API上でアプリ登録
3 pythonコーディング

 

たったのこれだけ!実はすごーく簡単なのです!

 

1 Twitter Developer アカウントの作成

 

まず自分のアプリケーションからTwitterを操作するために、Twitterに申請する必要があります。

普段自分が呟いているアカウントとは別のアカウント(アプリ開発者としてのアカウント)が必要なので、まだ登録していない人は登録しましょう!

 

まずTwitterのDevloperサイトに行きます。

 

 

この右上のApplyボタンを押します。

 

 

 

次に、この中央にある「Apply for a developer account」を押しましょう。

 

 

ボタンを押すと目的を聞かれるので、
今回は「Making a bot」を選んで右下の青ボタンNext」を押します。

 

※次のページでは自分の普段使っているアカウントが聞かれます。あっているか確認した上で、もし複数アカウント持っていて、変更したい場合には「Switch @username」から変更しましょう。

 

下の方には自分の住んでいる国と、自分の呼称(名前)を書くところがあるので埋めてください。
今回は「Japan/kochos」としています。

 

 

次のページでは、アンケートのようなものを書いて行きます。
英語で書く必要があるので注意が必要ですが、簡単なもので構いません。

(英語が苦手な人はグーグル翻訳でOK)

 

ここまで終わると、以下のような画面に遷移するので、左下のチェックを入れて提出しましょう。

 

注意点:
Server error - application not submitted User must have verified email on file prior to submitting application
のようなエラーがでる場合があります。これはTwitterのアカウントにメールアドレスが登録されていない場合に出るので、メールアドレスを別ブラウザで設定上で、サイドボタンを押してみてください!

 

 

 

 

これで以下のような画面が出れば申請は完了です!

メールが来るので、メールを確認して、有効化したら完了です。

 

 

 

2 API上でアプリ登録

 

次はAPLの登録です。

1の登録がうまくいくと、トップページから、自分のアカウントで「Apps」が見れるようになります。これを押しましょう。

 

 

遷移先の画面の右上にあるCreate Appsを押します。

ポイント:
Website URLとCallback URLというところに何を登録すればいいの??という方もいると思いますが、ここは自分のtwitterアカウントのトップページのURLでも登録しておけばOKです。

 

 

登録が完了すると、以下のようにAPIkeyが発行されます。

 

 

アクセストークンのところにあるGenerateを押します。するとトークンが発行されます。

注意:
ここで発行されるトークンはメモをしておきましょう!
もしも忘れてしまったとしてもregenerateで再発行すればOKです。

これでこの手順は完了です。

 

 

3 pythonコーディング

 

では次はようやくPythonコードを書いていきましょう!

 

3-1 tweepyのインストール

 

今回はtweepyというライブラリを使うので、pipでインストールしましょう。

pip install tweepy

 

3-2 APIの設定

 

先ほど取得したAPIのキーを使って、tweepyオブジェクトを生成します。

 command
import tweepy
print('this is koleoblog twitter bot!')
CONSUMER_KEY = 'XXXXXYiFiTXPTXUVl0efXXXXX'
CONSUMER_SECRET = 'XXXXXWKLErbF3O9bmU4xj3CG3mZ9kbSRqdCBCDgj3hLyzXXXXX'
ACCESS_KEY = 'XXXXX09209594048514-PmotsMH5u929Vv5OmIukl5xA0XXXXX'
ACCESS_SECRET = 'XXXXXTXKM5S0gdN9M1WfZ8dI2P9H5RbsJRStWtDGXXXXX'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth, wait_on_rate_limit=True)

 

最後のapiのところで指定している「wait_on_rate_limit=True」は、大量データを処理するときに、APIの利用制限に引っかかった時に、必要時間だけ待機してくれる」という設定になります。

 

今回使うtwitterAPI15分につき15回という制限があります。
そのため、この制限にかかってしまった場合に備えて指定しています。

 

3−3 ロジックのコーディング

 

では今回やりたいことをコーディングしていきましょう!
改めて、今回やりたいことは以下の2点でした。

 

1 特定のキーワードを含むツイートを検索する
2 検索にヒットしたツイートをリツイートする(またはLikeする)

 

実はとっても簡単なんです!
こんな感じ!↓ ↓ (今回はLikeするように実装しています)


 command
keyword = 'javascript'
tweet_count = 3
for tweet in tweepy.Cursor(api.search, keyword).items(tweet_count):
try:
print('Tweet liked')
tweet.favorite()
time.sleep(10)
except tweepy.TweepError as e:
print(e.reason)
except StopIteration:
break

 

検索したいワードを変数に入れ、それをtweepyAPIのsearch関数に渡してあげるだけ!

 

あとはforで回して、見つかったツイートをお気に入り(tweet.favorite())をしています。

リツイートがしたい場合には、tweet.retweet()とすればOKです!

 

また、今回はキーワード検索をしていますが、ある特定のユーザのツイートをお気に入りやリツイートしたい場合には

keywordの部分にユーザID(@無し)で指定し、api.searchの代わりにuser_timelineを使えばOKです!

 

 

あとはターミナルから、以下のコマンドを打てば自動的に動いてくれます。

 command
python twitter_bot.py

 

グラマラスパッツ

-システムエンジニアになる, ツール

Copyright© これブロ , 2020 All Rights Reserved.