javaでTwitterのOAuth認証を用いたつぶやきのポストを実現したいと考えています。アクセストークンとアクセストークンシークレットは取得できたのですがそれを用いてつぶやきをポストすることができません。OAuthのライブラリを使えばポストすることは出来たのですができればライブラリを使わずに実現したいと思っています。おそらくポストのやりかたがおかしいと思うのですが何が悪いのかわかりません。javaはあまり得意ではないためお見せするのも恥ずかしいソースですがおかしなところを指摘していただけるとありがたいです。ポストの部分を載せます。
String url="http://twitter.com/statuses/update.xml";
URL urlObj=new URL(url);
HttpURLConnecton urlCon=(HttpURLConnection)urlObj.openConnection();urlCon.setRequestMethod("POST");
urlCon.setDoOutput(true);
urlCon.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
urlCon.setRequestProperty("Authorization",header);
//変数headerには以下のような文字列が入っています
//OAuth oauth_nonce="****", oauth_signature_method="HMAC-SHA1", oauth_timestamp="****", oauth_consumer_key="****", oauth_token="****", oauth_signature="****", oauth_version="1.0"
String body="status=test";
PrintWriter pw=new PrintWriter(urlCon.getOutputStream());
pw.print(body);
pw.flush();
pw.close();
//ここでエラー
BufferedReader inStr=new BufferedReader(new InputStreamReader(urlCon.getInputStream()));
No.2ベストアンサー
- 回答日時:
401ってことは確かに認証の問題ですね。
とりあえず,signature base stringは正しいですか。
OAuthの情報はRFC 5849に沿って,
・Consumer Key : dpf43f3p2l4k3l03
・Consumer Secret : kd94hf93k423kf44
・Access Token : nnch734d00sl2jdk
・Access Token Secret : pfkkdhi9sl3r4s00
・Timestamp : 137131202
・Nonce : chapoH
を利用してHMAC-SHA1の署名を作成するとして,
http://api.twitter.com/1/statuses/update.xml
に
status=test
をPOSTする場合,
・signature base string
・signature
はそれぞれどうなりますか。
こちらで試したところでは,
[oauth_versionを含める場合]
・signature base string
POST&http%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.xml&oauth_co
nsumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3DchapoH%26oauth_signature
_method%3DHMAC-SHA1%26oauth_timestamp%3D137131202%26oauth_token%3Dnnch
734d00sl2jdk%26oauth_version%3D1.0%26status%3Dtest
・signature
E0g7lPZHabrs4Ic7ZDoS/EWCLsA=
[oauth_versionを含めない場合]
・signature base string
POST&http%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.xml&oauth_co
nsumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3DchapoH%26oauth_signature
_method%3DHMAC-SHA1%26oauth_timestamp%3D137131202%26oauth_token%3Dnnch
734d00sl2jdk%26status%3Dtest
・signature
XQoeK8S6ch3MMQZHO1XaDGVh4/M=
となりました。signature base stringの改行は,便宜的なものなので削除してください。
もちろん,Consumer Key等はtwitterから提供されたものではないので送信はできませんが,
updateが実際に行えるコードの署名ルーチンに流して生成しているのでおそらく間違っていないと思います。
わざわざ試していただいてありがとうございます。私が作っていたSignature Base Stringの各要素の順番が間違っていたようで、示していただいた順番で試みた結果認証エラーが無くなり無事投稿することができました。本当にありがとうございました。
No.1
- 回答日時:
エラーの詳細はなんでしょうか。
例外を送出したのであれば,その例外の情報を書いてください。
# 例外情報はバグを潰すための宝の山です。
で,urlCon.connect()が無いようですが。
ちなみに,twitter APIのendpointは現在,
http://api.twitter.com/1/
になっています。
SITE: POST statuses/update | dev.twitter.com
http://dev.twitter.com/doc/post/statuses/update
この回答への補足
回答ありがとうございます。以下が送出されたエラーです。
java.io.IOException: Server returned HTTP response code: 401 for URL: http://api.twitter.com/1/statuses/update.xml
認証に失敗しているのようで、ポストする内容やヘッダなどに問題があるのかと思っています。教えていただいたサイトも確認しているのですがどこに問題があるのか分かりませんでした。
教えていただいたurlCon.connect()も試してみましたが特にかわりありませんでした。
URLはどちらでも利用出来るようでしたので前述のものを使っていました。ご指摘いただいたURLでも同じ結果になりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
【JAVA】与えられた金額を貨幣...
-
連続する「\\」をひとつの「\\...
-
0除算の例外処理ができない!!...
-
file操作時のエラー
-
VB.Net Object型 空かどうか
-
Javaにて負の符号付整数を表現...
-
基本的にはないと言われました
-
String型の日付(2005/11/25)の...
-
VB.NETで16進数が正しいかどう...
-
nullで、return出来るのはどん...
-
Timestamp型への変換について(J...
-
サーブレットからJSPの呼び出し...
-
Excelでのエラー
-
C#の捕捉されない例外処理の対...
-
サーブレットとJSPの連携
-
WebClient()以外でネットにアク...
-
エクセルVBAで、条件に一致する...
-
変数名の付け方
-
private static という変数の修飾
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「タイプ初期化子が例外をスロ...
-
VB.NETで16進数が正しいかどう...
-
VB.Net Object型 空かどうか
-
Timestamp型への変換について(J...
-
C#の捕捉されない例外処理の対...
-
時間の取得
-
VBA Evaluate関数 型が一致しま...
-
C# UriFormatExceptionの回避
-
連続する「\\」をひとつの「\\...
-
文字列からダブルクオートの削除
-
String型の日付(2005/11/25)の...
-
タトゥーや墨を入れる人の共通点
-
VBA 400エラー 1004エラー
-
nullで、return出来るのはどん...
-
VC++におけるCStringの変換
-
例外ってIf文の中に入れますか...
-
【JAVA】与えられた金額を貨幣...
-
全角スペースのチェックについて
-
ファイルダイアログを開いた時...
-
WebClient()以外でネットにアク...
おすすめ情報