#1. はじめに
画像の複数投稿をしたかったのですがちょっとはまったところがあったので投稿します。
python 3系列で動かすことを想定しています
#2. 画像の投稿とその引数
1枚の画像の投稿はほかにも記事が多く、簡単に実装ができます。
参考: Python で画像付きツイート
こちらに記述されているソースコードを流用しましょう。
#3. 複数枚投稿
複数枚投稿にはmedia/uploadをその分使います。
(media/upload -> media_idの取得) * 枚数 -> statuses/update
media_idですが複数枚投稿にはカンマ区切りの文字列を挿入しましょう。
上記のソースコードをお借りして次のように書き換えました。
media.py
def tweet_with_image(oauth_sess, tweet_text, path_list_images):
url_media = "https://upload.twitter.com/1.1/media/upload.json"
url_text = "https://api.twitter.com/1.1/statuses/update.json"
media_ids = ""
# 画像の枚数分ループ
for path in path_list_images:
files = {"media" : open(path, 'rb')}
req_media = oauth_sess.post(url_media, files = files)
# レスポンスを確認
if req_media.status_code != 200:
print ("画像アップデート失敗: {}".format(req_media.text))
return -1
media_id = json.loads(req_media.text)['media_id']
media_id_string = json.loads(req_media.text)['media_id_string']
print ("Media ID: {} ".format(media_id))
# メディアIDの文字列をカンマ","で結合
if media_ids == "":
media_ids += media_id_string
else:
media_ids = media_ids + "," + media_id_string
print ("media_ids: ", media_ids)
params = {'status': tweet_text, "media_ids": [media_ids]}
req_text = oauth_sess.post(url_text, params = params)
# 再びレスポンスを確認
if req_text.status_code != 200:
print ("テキストアップデート失敗: {}".format(req_text.text))
return -1
print ("tweet uploaded\n")
return 1