【php】twitterのREST APIで画像付きツイートをする
問題
twitterの REST APIの statuses/update_with_media で、画像つきツイートをしたい。
答え
OAuthするので、既存のライブラリを使うのが手軽でしょう。
statuses/update_with_mediaで画像付きツイートをするには、いくつか注意が必要。
- statuses/update_with_mediaは唯一、他のAPIと違って、upload.twitter.comを使う。画像なしの通常のツイートはapi.twitter.comの方を使うこと。
- multipartなPOSTをするので、OAuth認証周りも他のAPIとちょっと違う。
- POSTパラメータやクエリ文字列でのパラメータは、OAuthの署名文字列の算出に使用しない。OAuthのためのoauth_*のパラメータのみを使って算出する。
- 投稿できるファイル最大サイズは、help/configurationの”photo_size_limit”で取得できる。
- 投稿できるファイルの最大数は(現在1つだけだが)、help/configurationの”max_media_per_upload”で取得できる。
- 1日に投稿できるファイルの数がユーザー個別にあって、詳細はstatuses/update_with_mediaのレスポンスヘッダで通知される。
twitteroauthもよいのですが、画像付きツイートができなさそう。multipart/form-dataなPOSTができないようだ。
tmhOAuthは大丈夫。multipart/form-dataのPOSTに対応していて、画像付きツイートができる。
//ファイルひとつ読み込むだけで済むのはよいですね require '../tmhOAuth.php'; $tmhOAuth = new tmhOAuth(array( 'consumer_key' => 'YOUR_CONSUMER_KEY', 'consumer_secret' => 'YOUR_CONSUMER_SECRET', 'user_token' => 'AN_ACCESS_TOKEN', 'user_secret' => 'AN_ACCESS_TOKEN_SECRET', )); // ↓画像ファイル名をべた書きしているが、適宜書き換えたり、動的に変更したりできる // 例)アップロードファイル受け付けの場合 "@{$_FILES['image']['tmp_name']};type={$_FILES['image']['type']};filename={$_FILES['image']['name']}", $image = './sample.jpg'; $code = $tmhOAuth->request('POST', 'https://upload.twitter.com/1/statuses/update_with_media.json', array( 'media[]' => "@{$image}", //cURLに渡す形式でファイル名。もしくはファイルの中身を渡してもよい。 'status' => "画像付きテストツイート" ), true, // 認証する true // multipart/form-data で ); if ($code == 200) { print_r(json_decode($tmhOAuth->response['response'])); } else { print_r($tmhOAuth->response['response']); }
コメント