こんちには、Zero-Cheeseです。
【本記事のゴール】
- TwitterApiを簡単に利用できる、「Tweepy」を使用して、
- ツイートを検索したり、
- Twitterに、投稿する。(文字だけでなく、画像投稿も可)
- (V1.1、V2用 両方のコードを紹介しています。)
【本記事の対象者】
- Python入門者レベル以上の方
- Twitterを使っている方が、望ましいです。
Twitter APIの使用事例:
株やビットコインなど、自動取引の結果ツイートなどに、使用できると思います。
もし、ビットコインの自動取引システムを作りたいと思った方は、下記リンクへどうぞ。
Tweepyの特徴
Tweepyは、TwitterAPIを、簡単に使用するためのライブラリです。
以下、解説していきます。
Tweepyでできる事
主な機能は、以下の通りです。
- APIの認証
- ツイートの投稿
- 指定したユーザーの、詳細情報を入手
- ツイート検索
- フォロー
- 指定したユーザーのフォロワーを取得
より詳細を知りたい方は、公式Documentをご覧ください。
Twitter APIの特徴と、事前準備の紹介
Tweepyを使用するためには、TwitterAPIの利用権限を、「TwitterのDeveloper Portalサイト」で、設定する必要があります。
TwitterAPIは、2021年11月から、V1.1からV2に更新されました。
API V2を使用するためには、Tweepyは、V4.3.0以降が必要です。
Twitter API V2の特徴
V2では、以下の3つのアクセスレベルに分かれています。
- Essential
- Elevated(高度なアクセス)
- Academic Research
各アクセスレベルの特徴は、以下の通りです。
◆ Essentialの特徴
- サインアップ後、すぐに利用可能
- 無料
- 50万ツイート/月 の制限
- API V2のみアクセス可能
◆ Elevatedの特徴
- 申請が必要
- 無料
- 200万ツイート/月 の制限
- API V2に加え、V1,1にもアクセス可能
◆ Academic Researchの特徴
- 申請が必要
- 無料
- 学術的な使用に限られる
- 1000万ツイート/月 の制限
- フルアーカイブ検索 可能
TwitterAPIは、全てのアクセスレベルで、使用可能です。
ただし、コードの書き方に、注意点があります。
- Essentialレベル → V2に対応したコードのみ
- Elevatedレベル → V2 もしくは V1.1 に対応したコード (どちらでもOK)
検索すると、V1.1に対応したコードが、よく紹介されています。
Essentialレベルで、V1.1に対応したコードを走らせた場合、エラーが発生します。
Twitter API V2 公開以前から、V1.1を使用していた方は、自動的に上位のElevated
レベルに移行されています。
Twitter API V2
とTwitter API V1.1
両方、使用できます。
Twitter APIを利用するために
Twitterアカウントを持っている前提で、記載しています。
まだの方は、アカウント登録を済ませておいて下さい。
また、APIを使用するために、以下の条件が必要です。
- パブリックアカウントである事(プライベートアカウントはNG)
- メールアドレスを登録している事
- 電話番号を登録している事
TwitterAPI 利用するための手順
- Developer Portalサイトで プロジェクトを作成する
- Appを作成する
- User Authentication Settings(ユーザ認証設定)を編集
- 「Access KeyとAccess Key Secret」を取得
- 「Access TokenとAccess Token Secret」を取得
- 「Bearer Token」を取得(API 2.0 のみ)
以下、詳細に解説していきます。
①Developer Portalサイトで プロジェクトを作成する
Developer Platformのサイトで、ログインをします。
その後、「Developer Portal」 のリンクを押下します。
Dashboardが出現するので、画面中の、「+ Create project」ボタンを押下します。
Project作成画面が出現するので、下記を入力します。
- Project name (プロジェクト名:自由記入)
- Use case (使い方:選択肢になっています。)
- Project description(プロジェクトの詳細説明:自由記入)
②Appを作成する
Projectが作成したら、次はAppの作成です。
自動的に、下記画面に自動的に遷移するので、下記を入力します。
- App Environment(アプリ環境:選択肢 本記事ではProductionを選択)
- App name(アプリ名:自由記入 )
そうると、「API Key」と「API key Secret」、「Bearer Token」が表示されます。
ただし、こちらは再発行が必要です(後述)。
「API Key」等は、他人に知らせないようにして下さい。
(筆者は、再発行済みなので、上記キーは、無効になっています。)
③User Authentication Settings(ユーザ認証設定)を編集
下記の順番で、選択します。
下記画面が出現するので、必要な情報を入力します。
- OAuth2.0 を使用する場合、「ON」
- OAuth1.0 を使用する場合、「ON」(Elevatedレベル以上のみ)
- OAuth2.0がONの場合、Type of Appに「Automated App or Bot」に指定
- Request email from users (optional)は「ON/OFF」どちらでもOK
- App permissionsは「Read and Write」に指定
- Callback URI/Redirect URLは「自分のサイトURL」を入力。無い場合、「https://twitter.com」と入力
- Website URLも上記と同じ
- その他の入力項目は、任意
次の画面で、Oauth2.0用の「Client ID」と「Client Secret」が表示されます。(本記事では、使用しません。)
④「Access KeyとAccess Key Secret」を取得
下記手順で、再発行して下さい。
先ほど実施した、ユーザ認証設定で、App permissionsは「Read and Write」に変更する処理をしました。
その際、本作業が必要になります。
コピーして控えて下さい。
その後、「Yes, I saved them」ボタンを押下して、完了です。
⑤「Access TokenとAccess Token Secret」を取得
下記手順で、取得します。
ポップアップウインドウが出現して、表示されます。
コピーして控えて下さい。
その後、「Yes, I saved them」ボタンを押下して、完了です。
⑥「Bearer Token」を取得(API 2.0 のみ)
下記手順にて、取得します。
ポップアップウインドウが出現して、表示されます。
コピーして控えて下さい。
その後、「Yes, I saved them」ボタンを押下して、完了です。
APIキー等の情報を忘れた場合も、同じ処理で再発行できます。
Tweepy インストール方法(環境構築)
pipを使用して、インストール可能です。
pip install tweepy
pipの詳細を知りたい方は、以下のリンクをご参照下さい。
ツイートの取得方法
ツイートを検索して、取得する方法を記します。
Tweepy V1.1のコード
ツイートを検索するにあたり、下記条件が設定できます。
(よく使用するものを、ピックアップしてみました。)
- 検索ワード
- 検索対象の言語指定(日本語 → ‘ja’、英語 → ‘en’)
- 取得件数
- 最新のツイートから検索 or 人気のあるツイートから検索 or 左記をmixしたものを検索
具体的な使い方は、下記コードをご確認ください。(注釈を入れました。)
import tweepy
# 認証
api_key = '取得したapi_key'
api_key_secret = '取得したapi_key_secret'
access_token = '取得したaccess_token'
access_token_secret = '取得したapi_token_secret'
auth = tweepy.OAuth1UserHandler(
api_key, api_key_secret, access_token, access_token_secret
)
api = tweepy.API(auth)
# 検索してツイートを取得(イテレータで返ります。)
tweets = tweepy.Cursor(api.search_tweets,
q='Python', # 検索ワード
tweet_mode='extended', # 省略されたリンクを全て取得
include_entities=True, # # 省略されたツイートを全て取得
result_type='recent', # 最新のツイートを検索
lang='ja' # 検索対象の言語
).items(20) # 取得件数
# 代表的な取得情報を記載。
for tweet in tweets:
print(tweet.created_at) # ツイートした日時
print(tweet.full_text) # ツイート本文
print(tweet.retweet_count) # リツイート数
print(tweet.favorite_count) # いいね数
19行目 引数 「result_type」に関して:
- 最新のツイート検索する: ‘recent’
- 人気のあるツイート検索する:’popular’
- 上記2つをmixしたものを検索する:’mixed’
で指定できます。
Tweepy V2のコード
V1.1との変化点は、以下の通りです。
- V1.1 → tweepy.API( ) を使用
- V2 → tweepy.Client( ) を使用
import tweepy
# 認証
api_key = '取得したapi_key'
api_key_secret = '取得したapi_key_secret'
access_token = '取得したaccess_token'
access_token_secret = '取得したapi_token_secret'
bearer_token = '取得したbearer_token'
client = tweepy.Client(
consumer_key=api_key,
consumer_secret=api_key_secret,
access_token=access_token,
access_token_secret=access_token_secret,
bearer_token=bearer_token
)
# 最新のツイートを取得
tweets = client.search_recent_tweets(query='Python', # 検索ワード
max_results=20 # 取得件数
)
if tweets is not None:
for tweet in tweets[0]:
print(tweet)
ツイートの投稿方法
Tweepy V1.1のコード
文字のみを投稿する
import tweepy
# 認証
api_key = '取得したapi_key'
api_key_secret = '取得したapi_key_secret'
access_token = '取得したaccess_token'
access_token_secret = '取得したapi_token_secret'
auth = tweepy.OAuth1UserHandler(
api_key, api_key_secret, access_token, access_token_secret
)
api = tweepy.API(auth)
# 投稿
api.update_status(status="ツイートしたい内容")
文字に加え、画像も投稿する
ローカルに保存している画像ファイルを、送信するケースになります。
先ほどのコード最終行を、以下のように変更します。
# test.pngファイルを送信する場合
api.update_status_with_media(filename='./test.png', status='ツイートしたい内容')
Tweepyの最新バージョンでは、 api.update_with_media( ) が使用できません。
Tweepy V2のコード
V1.1との変化点は、以下の通りです。
- V1.1 → tweepy.API( ) を使用
- V2 → tweepy.Client( ) を使用
文字のみを投稿する
import tweepy
# 認証
api_key = '取得したapi_key'
api_key_secret = '取得したapi_key_secret'
access_token = '取得したaccess_token'
access_token_secret = '取得したapi_token_secret'
client = tweepy.Client(
consumer_key=api_key,
consumer_secret=api_key_secret,
access_token=access_token,
access_token_secret=access_token_secret
)
# 投稿
client.create_tweet(text="v2版_ツイートしたい内容")
文字に加え、画像も投稿する
2022年6月現在、V2ではできないとの事です。
詳細はこちら (← Twitter Developer Platformへのリンク)
可能になれば、更新します。
参考
冒頭で紹介していた、Lineでの投稿方法にご興味がある方は、こちらまでどうぞ。
それではまた、お会いしましょう!