VBAからツイッターAPIを利用して画像投稿をしようと思った時につまづいたのでメモです。
ツイッターAPIでVBAから認証をして、画像付きのツイートをしようとすると
①画像をアップロード
②アップロードした画像のIDを取得
③取得したIDと文章を投稿する
という手順になります。
以前は一度で処理ができる方法があったのですが、現在はAPI1.1で上記の方法がとられます。
そこでアップロードをした後にIDを使ってツイートしようと思うと認証が上手くいかない。
エラーコードは
“errors”:[{“code”:32,”message”:”Could not authenticate you.”}]
で認証が上手くいっていないというものでした。
結果から言うと
Dim objRest As WinHttp.WinHttpRequest Set objRest = New WinHttp.WinHttpRequest objRest.Open cnsAPIMethodP, cnsURLMedia, False objRest.setRequestHeader "Authorization", 『下記のヘッダー』 objRest.setRequestHeader "Content-Type", "multipart/form-data;boundary=" ----dfgadfgafd " objRest2.send "status=" & strStatus & "&media_ids=" & media_ids
という風に認証をWinHttp.WinHttpRequestを使って送る場合に
oauth認証のヘッダーを
HT_tmpbase = "oauth_consumer_key=" & cnsOauthConsumerKey HT_tmpbase = HT_tmpbase & "&" & "oauth_nonce=" & strNonce HT_tmpbase = HT_tmpbase & "&" & "oauth_signature_method=" & cnsMethod HT_tmpbase = HT_tmpbase & "&" & "oauth_timestamp=" & strTimestamp HT_tmpbase = HT_tmpbase & "&" & "oauth_token=" & cnsOauthToken HT_tmpbase = HT_tmpbase & "&" & "oauth_version=" & cnsOauthVersion HT_tmpbase = HT_tmpbase & "&" & "status=" & strStatus HT_tmpbase = HT_tmpbase & "&" & "media_ids=" & media_ids
としていたのですがここが問題で、ヘッダーのパラメーターはアルファベット順にしなければいけないということでした
↓
HT_tmpbase = "media_ids=" & media_ids HT_tmpbase = HT_tmpbase & "&" & "oauth_consumer_key=" & cnsOauthConsumerKey HT_tmpbase = HT_tmpbase & "&" & "oauth_nonce=" & strNonce HT_tmpbase = HT_tmpbase & "&" & "oauth_signature_method=" & cnsMethod HT_tmpbase = HT_tmpbase & "&" & "oauth_timestamp=" & strTimestamp HT_tmpbase = HT_tmpbase & "&" & "oauth_token=" & cnsOauthToken HT_tmpbase = HT_tmpbase & "&" & "oauth_version=" & cnsOauthVersion HT_tmpbase = HT_tmpbase & "&" & "status=" & strStatus
media_idsを先頭に持ってきて投稿したところできるようになりました。
media_idsを入れてエラーがでる場合は参考までに。
コメント