要するに、boundary を使った、multipart/form-data による投稿です。
Twitter の API 詳細ページ
( Resource URL : https://api.twitter.com/1.1/statuses/update_with_media.json )
上記ページで、サンプルの生データが書かれていますが、正確なものを以下に書きます。
POST /1.1/statuses/update_with_media.json HTTP/1.1
Host: api.twitter.com
Content-Length: 15532
Authorization: OAuth oauth_consumer_key="...", oauth_nonce="...", oauth_signature="...", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1347058301", oauth_token="...", oauth_version="1.0"
Content-Type: multipart/form-data;boundary=cce6735153bf14e47e999e68bb183e70a1fa7fc89722fc1efdf03a917340
--cce6735153bf14e47e999e68bb183e70a1fa7fc89722fc1efdf03a917340\r\n
Content-Disposition: form-data; name="status"\r\n
\r\n
UTF-8 での日本語\r\n
--cce6735153bf14e47e999e68bb183e70a1fa7fc89722fc1efdf03a917340\r\n
Content-Type: application/octet-stream\r\n
Content-Disposition: form-data; name="media[]"; filename="media.png"\r\n
\r\n
生の画像データ
\r\n--cce6735153bf14e47e999e68bb183e70a1fa7fc89722fc1efdf03a917340--\r\n
ヘッダ部分はたいていメソッド等が出力してくれますが、本体は自分で書く場合改行コードは \r\n です。
( \n でも動作するかもしれませんが、VS2010 で \r\n を使って動作確認しています )
画像データ部分はバイナリそのままで、バイナリデータの後ろにも、\r\n が必要です。また、画像データの前に一行空の行が必要です。( base64でエンコードされた画像は、現在サポートされていません。)
API 側の注意事項としては、認証用のデータは oauth_* のみで作成するようになっており、通常投稿で使用される『status』は使用されません。
ファイル名を格納する name 部分に media[] がセットされており、配列としての利用を想定しているようですが、実際は画像はひとつしかアップロードできません。
対応画像フォーマットはPNG、JPGとGIFです。アニメーションGIFはサポートされていません
古いエントリポイントである、『upload.twitter.com』はもう使えません。
日本語を投稿する場合、URLエンコードは必要ありません。UTF-8 で投稿します。
▼ 例
content = Encoding.GetEncoding("UTF-8").GetBytes(text + "\r\n");
sw.Write(content, 0, content.Length);
Twitter の場合、ファイル名( サンプルは、media.png ) は実際はなんでも良いような気がします。
関連する記事(実装)
VS2010(C#) Form : POST statuses/update_with_media で画像を伴った Twitter 投稿
posted by
at 2013-07-19 11:47
|
API
|

|