[スポンサーリンク]
Python3でTwitterAPI使用する準備
Python3でTwitterAPI使用する準備として、下記を行いました
①APIキーとトークンの取得
②ライブラリのインストール
[スポンサーリンク]
メディアをアップロード POST media/upload API
TwitterAPIで画像付きツイートを投稿するには、メディアのアップロードとツイートの2ステップで実現します
①POST media/upload APIを使用して、メディアをアップロード
②POST statuses/update APIを使用して、アップロードしたメディアを指定してツイート
POST statuses/update APIの利用方法
POST statuses/update APIの利用方法は下記の記事で記録しています
5MB以上のメディアをアップロードする場合には
尚、今回は画像の様な、5MB以下のメディアファイルをツイートする場合を前提としています
動画等の大きなサイズをアップロードしてツイートする場合は、下記のAPIを使用して、分割してのアップロードが必要です
POST media/upload (APPEND)、POST media/upload (INIT)、POST media/upload (FINALIZE)
パラメータ
POST media/upload APIのパラメータは以下です
各項目について、メモを残しておきます
記載内容一切保証出来ません
項目名 | 要否 | 個人的メモ |
media | required | アップロードするメディアをバイナリ形式で指定※media_dataとどちらかを指定 |
media_category | optional | アップロードするメディアの形式を指定 |
media_data | required | アップロードするメディアをbase64形式で指定※mediaとどちらかを指定 |
additional_owners | optional | アップロードしたメディアを利用出来るアカウントを指定 |
POST media/upload API サンプルコード
サンプルとして、このサイトのアイコン画像をツイートしてみます
mediaにアップロード対象のファイルをバイナリ形式で指定します
正常にアップロード出来た場合、UploadMediaResponseでHTTPレスポンスコード200が返ってきます
UploadMediaResultは、APIの公式リファレンスにある通り、アップロードしたメディアに関する情報が返ってきます
アップロードが正常に終了した場合、media_idsを指定してツイートすることで画像付きツイートが出来ます
・open関数を利用し、バイナリモード(rb)でファイルを読み込み
1 |
'media' : open(UploadTargetFilePath, 'rb') |
・POST media/upload APIのURLを設定
※ドメインがupload.twitter.com
1 |
UploadMediaApiUrl = 'https://upload.twitter.com/1.1/media/upload.json' |
・OAuth認証でTwitterとセッション接続
1 |
UploadMediaApiSession = OAuth1Session(ConsumerAPIKey, ConsumerAPIsecretkey, AccsessToken, AceestokenSecret) |
・Sessionクラスのpostを使って、POST media/upload APIのレスポンスを取得
※files(≠params)で渡す
1 |
UploadMediaResponse = UploadMediaApiSession.post(UploadMediaApiUrl, files = UploadMediaParameters) |
・media_idsにPOST media/upload APIでアップロードしたメディアIDを指定
1 |
,'media_ids' : UploadMediaResult['media_id_string'] |
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 61 62 |
# coding: utf_8 # ライブラリインポート import json from requests_oauthlib import OAuth1Session # APIキー&トークン設定 ConsumerAPIKey = 【ConsumerKey】 ConsumerAPIsecretkey = 【ConsumerSecretKey】 AccsessToken = 【AccessToken】 AceestokenSecret = 【AccessTokenSecret】 # メディアアップロードパラメータ設定 UploadTargetFilePath = '【アップロード対象の画像パス】' UploadMediaParameters = { 'media' : open(UploadTargetFilePath, 'rb') ,'media_category' : 'tweet_image' ,'media_data' : '' # dditional_ownersを指定する場合カンマ,区切りで指定 #,'additional_owners' : '' } UploadMediaApiSession = OAuth1Session(ConsumerAPIKey, ConsumerAPIsecretkey, AccsessToken, AceestokenSecret) UploadMediaApiUrl = 'https://upload.twitter.com/1.1/media/upload.json' # メディアアップロード実行 UploadMediaResponse = UploadMediaApiSession.post(UploadMediaApiUrl, files = UploadMediaParameters) print(UploadMediaResponse) if UploadMediaResponse.status_code == 200: UploadMediaResult = json.loads(UploadMediaResponse.text) print(UploadMediaResult) # ツイートパラメータ設定 POSTstatusesupdateParameters = { 'status' : "Pythonで画像付きツイート" ,'in_reply_to_status_id' : '' ,'auto_populate_reply_metadata' : '' ,'exclude_reply_user_ids' : '' #attachment_urlは有効なURLを指定しない場合、例外が発生(HTTP400) #,'attachment_url' : '' ,'media_ids' : UploadMediaResult['media_id_string'] ,'possibly_sensitive' : '' ,'lat' : '' ,'long' : '' ,'place_id' : '' ,'display_coordinates' : '' ,'trim_user' : '' ,'enable_dmcommands' : '' ,'fail_dmcommands' : '' ,'card_uri' : '' } POSTstatusesupdateApiSession = OAuth1Session(ConsumerAPIKey, ConsumerAPIsecretkey, AccsessToken, AceestokenSecret) POSTstatusesupdateApiUrl = 'https://api.twitter.com/1.1/statuses/update.json' # ツイート実行 POSTstatusesupdateResponse = POSTstatusesupdateApiSession.post(POSTstatusesupdateApiUrl, params = POSTstatusesupdateParameters) print(POSTstatusesupdateResponse) if POSTstatusesupdateResponse.status_code == 200: POSTstatusesupdateResult = json.loads(POSTstatusesupdateResponse.text) print(POSTstatusesupdateResult) |
[スポンサーリンク]
コメント