こんにちは(@t_kun_kamakiri)(^^)
前回の記事ではPythonでTwitterAPIを利用してツイート情報取得までを行いました。
先日TwitterAPIを利用してTwitterのbotを作成しました。
4枚の画像付きのTwitterAPIで投稿! pic.twitter.com/uOSXikScJg
— 製造業ライフハック (@D7rWgT9tpBVjm8T) January 14, 2021
botくんの運用方法としては「製造業ブロガー」の方々と共有でGoogleスプレッドシートに投稿内容をまとめPythonを使って定期的に自動でツイートしてもらうという仕組みを作りました。
本記事のシリーズではPythonでTwitterAPIを利用してGoogleスプレッドシートから自動投稿までの軌跡をまとめていきます。
PythonでTwitterAPIを利用
- ツイート情報の取得
- ツイート投稿
- 複数の画像を付きでツイート投稿←本記事の内容
- Googleスプレッドシートとの連携
- Googleスプレッドシートから画像付きの投稿
- 既存のTwitterAPIで他のアカウントでも投稿
- トレンドの取得と分析
さらに「Twitterの投稿内容のデータ分析」や「誰でも使える分析ツールの自作」までできればワクワクしてきませんかね(^^)
では、本記事の内容です。
PythonでTwitterAPIを使って
- ツイートの投稿
- 複数画像付きの投稿
ここではPythonを使います。
Python3.7.6(Anaconda)
僕はデイトラPythonコースで勉強することで短期間で色々なことができるようになりました。↓こちらで学んだ内容をアレンジして記事を書いています(^^)
Twitterの操作(TwitterAPIについて)
Twitter操作をPythonで行うにあたってTwitter操作用のPythonライブラリを調べていたらかなり多くのライブラリが用意されていることがわかりました。
Twitterアカウント作成やTwitterAPI申請は前回の記事でも書いていますのでご参考ください。
TwitterAPIの種類
あとDjangoもあります。
●twython-djangohttps://t.co/vIBngpvk1N
他にありますかな。
— カマキリ🐲@PythonとDjango勉強中 (@t_kun_kamakiri) January 14, 2021
TwitterAPIにはいくつか制限があるので確認しておきましょう。
こちらに早見表があります。以下ちょっとまとめると・・・
代表的な操作を簡単にまとめたのが次の表です。
回数は、15分の間で許可されている回数です。※制限がかかってしまった場合は15間待ってください。
操作 | 説明 | 回数 |
---|---|---|
ホームタイムライン | フォローしてるユーザーたちのツイートを読み込む。 | 15 |
ユーザータイムライン | 特定ユーザーのツイートを読み込む。 | 180 |
フォローリスト | フォローしてるユーザー一覧を読み込む。 | 15 |
フォロワーリスト | フォロワー一覧を読み込む。 | 15 |
いいね | いいねの一覧を読み込む。 | 15 |
トレンド | トレンドの一覧を読み込む。 | 15 |
検索 | ツイートをキーワード検索する。 | 180 |
回数については使用した感覚的にはあっているかなと思います。
要するにあまり派手に使わないようにってことです_(._.)_
さらにsearch/tweetsに関して検索できるのは1週間前のツイートまでです。
Pythonで複数画像付きの投稿(TwitterAPIを使用)
では、さっそくTwitterAPIを使っていくのですがここでの目標は以下となります。
では早速やっていきましょう。
ひとつひとつの動作がわかるようにjupyter labで行ったものを記載しておきます。
解説も載せておきますのでご参考ください。
全体のコードは最後に記載しています。
4枚の画像をGoogleドライブにアップ
投稿したい画像をあらかじめGoogleドライブにアップしておく必要があります。
画像をアップルすrことができれば「フォルダを選択」➡「共有」➡「リンクを取得の『変更』」から「リンクを知っている全員」を選択しておきます。

このように共有設定をすることでGoogleドライブから画像データを取得することができます。
.envファイルを用意
Pythonコードを書く前に準備が必要です。
Twitterにログインした状態で、Deeloperサイトへアクセスします。

- コンシューマーキー (API key)
- コンシューマーシークレーット(API secret key)
- アクセストークン(Access token)
- アクセストークンシークレット(Access token secret)
をメモしておきます。
Pythonのコード内で認識させる必要があるのですが、コード内に直接べた書きするとセキュリティ的に良くないので、「.env」ファイルから読み込むようにします。
jupyter labで動作確認
必要なライブラリは事前にターミナルでインストールしておきましょう。
AnacondaのPythonを使っている場合はpipコマンドで外部ライブラリをインストールするとファイルがぐちゃぐちゃになって壊れてしまう可能性があるため「conda insall ライブラリ名」とGoogle検索してインストール方法を調べてください。
今回必要、Anacondaでインストールされていないライブラリは以下なのでインストールしておきます。
また、モジュールのimportでエラーがでたら上記のように適宜インストールをしてください_(._.)_
動作確認は下記のようにjupyter labで行っています。
一緒にコードを書いて理解をしましょう。コードが理解できたら最後に全体のコードをまとめる流れです。
ここではrequests-oauthlibを使っています。
<403>とエラーが出てくる場合は投稿のための権限に引っかかっている可能性があります。↓こちらの記事をご参考ください。
全体のコード
こちらが全体のコードとなります。
以下のコードでツイート投稿内容が画像付きで投稿できます。
事前に画4枚の画像のidはGoogleドライブから取得しておいてください。

コード内の↓こちらにidを設定しています。
1 2 3 4 5 | # 4枚の画像idを準備 image_id_1 = '1S_tFzBhbAa7xgBINKm4K2RQoLdIfscmz' image_id_2 = '1DqtFZDSvDoIKXbr4jgpUtT-j3g9Cu7PI' image_id_3 = '1M-JzIW6ceAXDm6zZsjUXHsldYFpLo9o_' image_id_4 = '102Fk77Xp__TiYNHVG9i433RF3WSZiAJq' |
では、全体のコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | import os import json from requests_oauthlib import OAuth1Session from dotenv import find_dotenv, load_dotenv import requests env_file = find_dotenv() # .envファイルを探して読み込む load_dotenv(env_file) # 各種ツイッターのキーをセット CONSUMER_KEY, CONSUMER_SECRET, ACCESS_KEY, ACCESS_KEY_SECRET CONSUMER_KEY = os.environ.get('CONSUMER_KEY') CONSUMER_SECRET = os.environ.get('CONSUMER_SECRET') ACCESS_KEY = os.environ.get('ACCESS_KEY') ACCESS_KEY_SECRET = os.environ.get('ACCESS_KEY_SECRET') # OAuth1Sessionの認証処理 twitter = OAuth1Session(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_KEY, ACCESS_KEY_SECRET) #エンドポイント url_text = 'https://api.twitter.com/1.1/statuses/update.json' url_media = "https://upload.twitter.com/1.1/media/upload.json" # 4枚の画像idを準備 image_id_1 = '1S_tFzBhbAa7xgBINKm4K2RQoLdIfscmz' image_id_2 = '1DqtFZDSvDoIKXbr4jgpUtT-j3g9Cu7PI' image_id_3 = '1M-JzIW6ceAXDm6zZsjUXHsldYFpLo9o_' image_id_4 = '102Fk77Xp__TiYNHVG9i433RF3WSZiAJq' # idをリストにする image_list = [image_id_1, image_id_2,image_id_3, image_id_4] # 画像id取得の関数 def media_id_func(image): image_id = image image_url = 'https://drive.google.com/uc?id=' + image_id response = requests.get(image_url) image = response.content files = {"media" : image} req_media = twitter.post(url_media, files = files) media_id = json.loads(req_media.text)['media_id_string'] # idを追加してリストにする。 return media_id # 画像id用の空リストを用意 media_id_list = [] for image in image_list: media_id = media_id_func(image) media_id_list.append(media_id) # 'media_ids': '1348990930917879809,1348990956142354433,1348990963411083265,1348990971556478978'}の形にする media_ids = ','.join(media_id_list) # ツイート(複数画像をアップロードする場合は["test1.jpg,test2.jpg"])みたいな感じ media_ids = media_ids params = {'status': '4枚の画像付きのTwitterAPIで投稿!','media_ids': media_ids} req=twitter.post(url_text, params = params) req |
【結果】

このように4枚の画像が投稿されればOKです(^^)/
まとめ
PythonでTwitterAPIを利用して複数画像付き投稿をしてみました。
Pythonの理解にはこちらの参考書で勉強しています。
[…] 【PythonでTwitterAPIを利用】複数の画像付きでツイート投稿する。 […]