前回は1枚だけの投稿方法を書きました。
複数の画像を投稿する方法も開発者向けに公開されました。
方法については、いろいろな所で解説されていますが、その個人的備忘録みたいな感じでまとめておきます。
コードはC#です。
画像データはバイナリまたはBase64形式に対応しています。
実際のコードは以下の通り。この場合はバイナリでアップロードしています。
この中のmedia_idを記憶しておきます。
最大で4枚の画像をアップロードしたら、あとは普通のツイートをするように
これだけで、簡単に複数画像の投稿ができます。
一枚だけの時は、今まで通りでも、今回の方法でもどちらでもできます。
複数の画像を投稿する方法も開発者向けに公開されました。
方法については、いろいろな所で解説されていますが、その個人的備忘録みたいな感じでまとめておきます。
コードはC#です。
投稿方法
方法は公式のドキュメントに書いてあるので、詳しくはそちらを参照してください。
ここではザックリとした事と、実際に通るコードを書いておきます。
まず画像は
https://upload.twitter.com/1.1/media/upload.jsonに1枚ずつアップロードします。
画像データはバイナリまたはBase64形式に対応しています。
実際のコードは以下の通り。この場合はバイナリでアップロードしています。
1: //oAuth認証文字列取得
2: string xml = Account.oAuthMediaRequest(oAuthTwitter.Method.POST, "https://upload.twitter.com/1.1/media/upload.json", "");
3: //送信するファイルのパス
4: string filePath = "C:\\test.jpg";
5: //文字コード
6: Encoding enc = Encoding.UTF8;
7: //WebRequestの作成
8: HttpWebRequest req = WebRequest.Create("https://upload.twitter.com/1.1/media/upload.json") as HttpWebRequest;
9: req.Host = "upload.twitter.com";
10: req.Headers.Add("Authorization", xml);
11: req.ServicePoint.Expect100Continue = false;
12: req.Method = oAuthTwitter.Method.POST.ToString();
13: //区切り文字列
14: string boundary = "tekitounamoji";
15: //ContentTypeを設定
16: req.ContentType = "multipart/form-data; boundary=" + boundary;
17: //POST送信するデータを作成
18: string postData = "";
19: postData = "--" + boundary + "\r\n" +
20: "Content-Disposition: form-data; name=\"media\"; filename=\"test\"\r\n" +
21: "Content-Type: image/jpeg\r\n" +
22: "Content-Transfer-Encoding: binary\r\n\r\n";
23: //バイト型配列に変換
24: byte[] startData = enc.GetBytes(postData);
25: postData = "\r\n--" + boundary + "--";
26: byte[] endData = enc.GetBytes(postData);
27: //送信するファイルを開く
28: FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
29: //POST送信するデータの長さを指定
30: req.ContentLength = startData.Length + endData.Length + fs.Length;
31: //データをPOST送信するためのStreamを取得
32: Stream reqStream = req.GetRequestStream();
33: //送信するデータを書き込む
34: reqStream.Write(startData, 0, startData.Length);
35: //ファイルの内容を送信
36: byte[] readData = new byte[0x1000];
37: int readSize = 0;
38: while (true)
39: {
40: readSize = fs.Read(readData, 0, readData.Length);
41: if (readSize == 0)
42: break;
43: reqStream.Write(readData, 0, readSize);
44: }
45: fs.Close();
46: reqStream.Write(endData, 0, endData.Length);
47: reqStream.Close();
48: //サーバーからの応答を受信するためのWebResponseを取得
49: HttpWebResponse res = (HttpWebResponse)req.GetResponse();
50: Stream resStream = res.GetResponseStream();
51: StreamReader sr = new StreamReader(resStream, enc);
52: string txt = sr.ReadToEnd();
53: //閉じる
54: sr.Close();
55: return txt;
アップロードに成功すると以下のような応答が帰ってきます。
{
"media_id": 553639437322563584,
"media_id_string":
"553639437322563584"
,
"size"
: 998865,
"image": {
"w"
: 2234,
"h": 1873,
"image_type":
"image/jpeg"
}
}
最大で4枚の画像をアップロードしたら、あとは普通のツイートをするように
https://api.twitter.com/1.1/statuses/update.jsonにメッセージをポストします。この時に先ほどのmedia_idを付加しておくと関連づけされて、画像付きツイートになります。
status=ツイートする内容&media_ids=000000000,11111111111,2222222222,333333333というように。複数の時はカンマで区切って指定します。
これだけで、簡単に複数画像の投稿ができます。
一枚だけの時は、今まで通りでも、今回の方法でもどちらでもできます。
おわり
【参考文献】