TwitterAPIでimageが上手く扱えない
Twitter APIで、account/update_profile_imageを使えば、アイコンが変更できる筈なのですが、今のところ不成功。
BASIC認証については、こちらを参考にさせていただいて上手くいったのですが、OAuthが今のところ上手くいっていません。
Googleのここを見る限りなんとかなりそうな雰囲気なのですが・・・
自分のメモ用に上記を日本語訳しておくと
1. POST メソッドを利用する
2. OAuth signature baseのパラメータ使用(まあOAuth使おうとしているので当然ながら)
- Request method(.i.e POST in this case)
- Encoded API Url(.i.e "http://twitter.com/account/
update_profile_background_image.format" in this case)
- OAuth consumer key
- OAuth nonce
- OAuth Signature method
- OAuth timesatmp
- OAuth token
- OAuth version3. OAuthパラメータとOAuth signatureはリクエストのヘダー部に配置する。
※これが他のメソッドを利用する場合と違うところ
参考 OAuth Core 1.0a Authorization Header4. その他必要なパラメータ類
ContentType = "multipart/form-data; boundary="+boundary
boundaryの例 = "----------------------------645033dcf9bb"
ContentLength = [request bodyの長さ(バイナリデータとしてのイメージ・データ分も含めて)]
5. Request Bodyの構成
仮に最終的なものを requestBody として
3 partに分けて:
初期状態 requestBody = ""
Part 1:
"--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=
\"{2}\"\r\nContent-Type: {3}\r\n\r\n"{0} = boundary( ContentType headerで指定したものと同じもの)
{1} = "image"(アップロードしたいデータ種類を指定するフォームパラメータ この場合 "image")
{2} = [アップロードするファイル名 ex. AAAA.jpg ]
{3} = "image/[イメージデータの拡張子]", ex. "image/jpeg".Now your requestBody = Part 1
Part 2:
ロードしようとているイメージデータのByte Stream が Part 2.
ex. $filedata = file_get_contents("AAA.jpg");Now your requestBody = Part 1+Part 2.
Part 3:
"\r\n"+"--" + boundary(先に生成したのと同じもの) + "--"
最終的な requestBody = Part 1+Part 2+Part 3.
※ちなみに こちらのやり方も試してみたのですが、そもそも上手くリクエストが発行できないみたいです。
これで行けるなら楽勝だったのですが残念。