Pythonスキルの習得

【Python】Tweepyを使用して、Twitterからツイート取得、自動投稿(画像付き) – V1.1、V2 両方対応 –

【Python】Tweepyを使用して、Twitterからツイート取得、自動投稿(画像付き) - V1.1、V2 両方対応 -

こんちには、Zero-Cheeseです。

【本記事のゴール】

  • TwitterApiを簡単に利用できる、「Tweepy」を使用して、
  • ツイートを検索したり、
  • Twitterに、投稿する。(文字だけでなく、画像投稿も可)
  • (V1.1、V2用 両方のコードを紹介しています。)

【本記事の対象者】

  • Python入門者レベル以上の方
  • Twitterを使っている方が、望ましいです。

Twitter APIの使用事例:

株やビットコインなど、自動取引の結果ツイートなどに、使用できると思います。

もし、ビットコインの自動取引システムを作りたいと思った方は、下記リンクへどうぞ。

bitFlyerのAPIを使用して、Pythonにより自動取引システムを作る
bitFlyerのAPIを使用して、Pythonにより自動取引システムを作るbitFlyerのAPIを使用して、Pythonにより自動取引システムを作り方を、わかりやすく紹介した記事です。...

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の特徴

TwitterAPIは、全てのアクセスレベルで、使用可能です。

ただし、コードの書き方に、注意点があります。

  • Essentialレベル → V2に対応したコードのみ
  • Elevatedレベル → V2 もしくは V1.1 に対応したコード (どちらでもOK)

検索すると、V1.1に対応したコードが、よく紹介されています。

Essentialレベルで、V1.1に対応したコードを走らせた場合、エラーが発生します。

Twitter API V2 公開以前から、V1.1を使用していた方は、自動的に上位のElevatedレベルに移行されています。

Twitter API V2Twitter API V1.1 両方使用できます

Twitter APIを利用するために

Twitterアカウントを持っている前提で、記載しています。

まだの方は、アカウント登録を済ませておいて下さい。

また、APIを使用するために、以下の条件が必要です。

  • パブリックアカウントである事(プライベートアカウントはNG)
  • メールアドレスを登録している事
  • 電話番号を登録している事

TwitterAPI 利用するための手順

  1. Developer Portalサイトで プロジェクトを作成する
  2. Appを作成する
  3. User Authentication Settings(ユーザ認証設定)を編集
  4. 「Access KeyとAccess Key Secret」を取得
  5. 「Access TokenとAccess Token Secret」を取得
  6. 「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の詳細を知りたい方は、以下のリンクをご参照下さい。

【Python】pipの使い型入門 - コマンドライン、Anaconda、PyCharmからの操作方法を解説 -
【Python】pipの使い方入門 - コマンドライン、Anaconda、PyCharmからの操作方法を解説 -Python入門者を対象に、pipの使い型を解説した記事です。 コマンドライン、Anaconda、PyCharmからの操作方法を、わかりやすく解説しました。 ...

ツイートの取得方法

ツイートを検索して、取得する方法を記します。

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)

client.search_recent_tweets( )は、上記使用方法以外に

  • 開始日時
  • 終了日時

なども、検索条件として指定できます。

詳細は、公式ドキュメントをご覧ください。

ツイートの投稿方法

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での投稿方法にご興味がある方は、こちらまでどうぞ。

【 Python 】Line Notify の使い方解説 - メッセージ、画像を送る方法 -
【 Python 】Line Notify の使い方解説 - メッセージ、画像を送る方法 -LineのAPIである、Line Notifyを使用して、メッセージ、画像を送る方法を紹介しました。サイトへの登録方法から、Pythonを使ったコードまで、初心者の方を対象に紹介しています。...

それではまた、お会いしましょう!