こんばんは!
今日は「Twitterのツイートって、自動化できないかな?」ということでTwitterのAPIをちょっと触ってみた結果をご紹介します!
TwitterAPIキーの取得
まずは、TwitterAPIを使うための準備をしていきます!TwitterのAPIを使ってツイートをしたり、タイムラインの情報を取得したりするためには、自分のアプリケーションを認証するConsumer KeyとConsumer Secret、Access TokenとAccess Token Secretの4つが必要です。まずはこれらを用意していきましょう。
こちらから、Twitterアプリケーションの管理画面にアクセスします。
遷移した先で「Create New App」というボタンをクリックし、アプリケーションの作成を進めていきます。
次に、①Name(アプリケーションの名前)、②Description(アプリケーションの内容説明)、③Website(自分の任意のサイトURL)を入力し、④のDeveloper Agreementに同意すればチェックをして、⑤Create your Twitter applicationをクリックします。③のWebsiteは特にサイトがない場合はTwitterの自分のアカウントURLでも一時的に入れておきましょう。
アプリケーションが作成できたら、下の画像の画面に遷移します。ここで、①Keys And Access TokensをクリックしてAPI Keyのページに移動します。
下の画像のようなページに遷移するので、①Create my access tokenをクリックして、アクセストークンを取得します。
無事アクセストークンを取得することができたら、下の画像のように①Consumer Key、②Consumer Secret、③Access Token、④Access Token Secretをそれぞれメモしておきます。これらの情報は他人に知られると悪用されうるものなので、知られないように注意しましょう。
これで、Twitter APIを使うためのAPIキーの取得ができました。次に、実際にこのキーを使ってAPIアクセスをしていきましょう。
TwitterAPIを使ってツイートする
Pythonの実行環境構築、Pycharmのインストールが終わっていない方は、こちらを参考にPythonを実行できる環境を用意しておいてください!
PyCharmを開いて、terminal(ファイルが操作できればいいので、terminalでもAtomでもいいです)で任意のディレクトリに移動します。また、「$ . activate」コマンドを打って、python実行環境をActivateしておきます。
まずは、ファイルにAPIキーを直書きせずにAPIキーを取得することができるように、.envファイルに先ほどメモしておいたAPIキーを記載しておきます。以下のコマンドを打って、.envファイルを作成します。(.envファイルには認証情報を記載するので、Github上にアップしてしまうなど間違って公開しないように注意しましょう。)
$ touch .env
.envファイルを開いて、それぞれ「CONSUMER_KEY」「CONSUMER_SECRET」「ACCESS_TOKEN」「ACCESS_TOKEN_SECRET」を以下のように記載します(xxxの箇所に自身の情報を入れてください)。
CONSUMER_KEY=xxx CONSUMER_SECRET=xxx ACCESS_TOKEN=xxx ACCESS_TOKEN_SECRET=xxx
次に、.envに書いた変数をファイルから参照するためのツールであるforegoと、TwitterAPIを使うためのライブラリであるtweepyをインストールして使える状態にします。
$ brew install forego
$ pip install tweepy
それでは、TwitterAPIを使ってつぶやきを行うための処理をtweet.pyファイルに記載していきます。
$ touch tweet.py
作ったtweet.pyファイルを開いて、以下のようなコードを書きます。このファイルを実行することで、tweet_textに記載した「まだPythonで自動つぶやきできるようにしてないの?」というつぶやきが自分のアカウントからつぶやかれます。
import tweepy import os CONSUMER_KEY = os.environ['CONSUMER_KEY'] CONSUMER_SECRET = os.environ['CONSUMER_SECRET'] ACCESS_TOKEN = os.environ['ACCESS_TOKEN'] ACCESS_TOKEN_SECRET = os.environ['ACCESS_TOKEN_SECRET'] auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET) tweet_text = "まだPythonで自動つぶやきできるようにしてないの?" api = tweepy.API(auth) api.update_status(tweet_text)
それでは、以下のコマンドでこのファイルを実行してみましょう。
$ forego run python tweet.py
ちゃんとつぶやけていますね!これでTwitterAPIを使って超簡単につぶやきをすることができることが確認できました。
ちなみに、ここでAPIキーのコピペにミスっていると、「"{"errors":[{"message":"Could not authenticate you","code":32}]}"」というエラー文が表示されてエラーになります。正しくコピペできているかどうか確認しましょう。僕もコピペミスってて一瞬はまりました。
スクリーンショットを撮影してつぶやき
次に、ちょっと応用してCoingeckoという仮想通貨の価格が一覧で見れるダッシュボード画面をスクリーンショット撮影して、スクリーンショットと文章をつぶやくという処理を実装します!
まだSeleniumがインストールできていない方は、こちらからインストールして使える状態にしておいてください。
まずは、Coingeckoにログインするために、登録しているメアドとパスワードを.envファイルに追記しておきます。
CONSUMER_KEY=XXX CONSUMER_SECRET=XXX ACCESS_TOKEN=XXX ACCESS_TOKEN_SECRET=XXX EMAIL_ADDRESS=XXX PASSWORD=XXX
そして、「tweet_with_screenshot.py」というファイルを作成し、そのファイルに以下のような記述をしていきます。
from selenium import webdriver import time import tweepy import os # Coingeckoにログインするためのメアド、パスワードを取得して、ログインします。 EMAIL_ADDRESS = os.environ['EMAIL_ADDRESS'] PASSWORD = os.environ['PASSWORD'] driver = webdriver.PhantomJS() driver.get('https://www.coingecko.com/account/sign_in') input_element_email = driver.find_element_by_id('user_email') input_element_password = driver.find_element_by_id('user_password') send_button = driver.find_element_by_name('commit') input_element_email.send_keys(EMAIL_ADDRESS) input_element_password.send_keys(PASSWORD) send_button.click() # ページ読込み時間を加味して5秒待ち、スクリーンショットを保存して、コンソールに「スクリーンショットを保存しました!」と表示します time.sleep(5) driver.save_screenshot('screenShot.png') print('スクリーンショットを保存しました!') # TwitterAPIの認証データを取得して、指定された画像とテキストをつぶやく CONSUMER_KEY = os.environ['CONSUMER_KEY'] CONSUMER_SECRET = os.environ['CONSUMER_SECRET'] ACCESS_TOKEN = os.environ['ACCESS_TOKEN'] ACCESS_TOKEN_SECRET = os.environ['ACCESS_TOKEN_SECRET'] auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) api = tweepy.API(auth) tweet_text = "各種通貨の値動きなう" tweet_image = "./screenShot.png" api.update_with_media(filename=tweet_image, status=tweet_text)
あとは、これまで通りファイルを実行するだけ。
$ forego run python tweet_with_screenshot.py
少し待ってTwitterにアクセスして、結果を確認してみると、撮影されたスクリーンショットと共につぶやきができていることが分かります!
今回はCoingeckoにアクセスしてスクリーンショットを撮影するという処理にしましたが、ブラウザ上の操作はSeleniumを活用すればほぼプログラム上で再現できるので、SeleniumとTwitterAPIを活用すればTwitter上の作業をどんどん自動化できそうですね。
まとめ
TwitterAPIを使って簡単なつぶやき処理を実装して実行してみましたが、他にもTwitterAPIでできることはめちゃくちゃあります!
もっとTwitterAPI使いこなしてTwitterの自動運用できるようになりたいものですね。
目指すはこの状態↓
会社の先輩で、5年前くらいにTwitterアカウント300個くらいスクリプトで自動生成してアフィリエイトで月70万稼いでた話聞いて衝撃。。。
— 仮想サーファー@さぼりエンジニア (@virtual_techX) 2018年2月9日
今はバンされやすくなってるからできないのかな
Pythonをしっかり学びたい方向け
最後に、Pythonをしっかり学びたいという方向けにおすすめの学習ツールを紹介しておきます。
スッキリわかるPython入門 スッキリわかるシリーズ
そもそもPythonの書き方が分からないという方はこちら、安いし分かりやすいのでオススメです。
プログラミング言語 Python 3 入門
このコースで学べること
- Pythonの基礎(データ、制御フロー、関数、データ構造、モジュール、例外(エラー)、クラス、入力と出力、標準ライブラリ)
- ターミナルを使用したPythonの実行
- PyCharmを使用したPython ファイルの作成・デバッグ実行
Pythonの基礎の基礎が丁寧に開設されていて、Python初心者の方でもPythonへの理解が深まりやすいUdemyのコースです。
Pythonの仕組みを基礎からしっかりと理解しておきたい方にオススメです。
【プログラミング言語 Python 3 入門】をUdemyで見てみる
Pythonで作業の自動化・効率化
Pythonでのプログラミング学習中の方向けに、Noteでより詳細なプログラミングチュートリアルを配信しているので、そちらもチェックしてみてください( ・v・)/
では!