C++ Rest SDKでtwitter④

http://e-tipsmemo.hatenablog.com/entry/2018/07/14/000000e-tipsmemo.hatenablog.com
次は画像をアップロードする方法を示す。
昔は画像のアップロードとツイートを同時にできるENDPOINTがあったらしいが、今は使えないので
画像をアップロードしてからそれから得られるmedia_idを伴って、ツイートするという流れになる。

また、画像をアップロードするときの画像のデータ形式はバイナリでなければならない。


とりあえずアップロードする方法なので、画像を得るとか読み込む方法は無視して、
前提として、画像データ(jpg/png)のバイナリをvectorに入れたものを引数に取っているとする。


今までのsignature parameterの作り方とは違って、画像のバイナリデータをパラメータに入れない。


bodyに書き込むバイナリデータにはプログラム中の変数名で言うと、
[preData][image binary][postData]
という構成になっている。
preDataのフォーマットはコメントにあるとおりで、boundaryという文字列は適当に10文字以上ぐらいの長さであれば
本当にどんな文字列でもよくて、それを使用する。
postDataもboundaryを用いている。


あとは、headerにboundary文字列を示すものを入れておきつつ。
bodyに先ほど作ったデータを入れて、
httprequestを投げるだけ。


jsonの文字列がかえってくるので、C++ Rest SDKjson::valueクラスに突っ込むと、連想配列でアクセスできるので
ツイートするときに必要なmedia_idを得る。
帰ってくるjsonには型の違いから、media_id_string(ダブルクオーテーションでくくられている)とmedia_id(純粋に数値)があるので使いやすいほうを選べる。

また、
軽く実験したところ、他人のAccess Token Secretを利用してでアップロードされたmedia_idを利用して
つぶやくことはできない。(と思われる)

参考

blog.livedoor.jp

プログラミング言語C++ 第4版

プログラミング言語C++ 第4版