2016-07-18 5 views
0

このAPIを呼び出すときは、次の権限を持つ https://api.twitter.com/1.1/followers/list.json?amp%3Binclude_user_entities=false&amp%3Bscreen_name=twitterdev&amp%3Bskip_status=true&cursor=-1twitter APIを呼び出すときにコード32で「あなたを認証できませんでした」というエラーメッセージが表示されますか?

を:Twitterからの私のフォロワーのリストを取得するには

OAuth oauth_consumer_key="XXXXXXXXXXXXXXXXXXXXXXXXX", oauth_nonce="0ddddff20481ae3567739f4eefa49b22", oauth_signature="7DQKPmbqJAzRh%2FM0UTB2w82lGvY%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1468795885", oauth_token="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", oauth_version="1.0" 

、私は成功した私の信者のJSONオブジェクトを取得しますが、の値を交換する際

:私の実際のSCREEN_NAMEの値に twitterdevから SCREEN_NAME(トップAPIに渡されたパラメータが)、私はこのエラーを取得します210

}

どうすればこの問題を解決できますか?

String oauth_signature_method = "HMAC-SHA1"; 
    String oauth_consumer_key = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 
    String oauth_token= "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"; 

    String uuid_string = UUID.randomUUID().toString(); 
    uuid_string = uuid_string.replaceAll("-", ""); 
    String oauth_nonce = uuid_string; 

    Date now = Calendar.getInstance().getTime(); 
    String oauth_timestamp = (new Long(now.getTime()/1000)).toString(); 

    String parameter_string = "oauth_consumer_key=" + oauth_consumer_key + "&oauth_nonce=" + 
      oauth_nonce + "&oauth_signature_method=" + oauth_signature_method + 
      "&oauth_timestamp=" + oauth_timestamp + "&oauth_token=" + authToken + 
      "&oauth_version=1.0"; 

    String signature_base_string = " GET&https%3A%2F%2Fapi.twitter.com%2F1.1%2Ffollowers%2Flist.json&"+ 
      URLEncoder.encode("user_id=XXXXXXXXXX&", "UTF-8") + 
      URLEncoder.encode(parameter_string, "UTF-8"); 

    String oauth_signature = computeSignature(signature_base_string, "XXXXXXXXXXXXXXXXXXXXXXXXXXX" + "&"); 

    String auth_header_string = "OAuth oauth_consumer_key=\"" + oauth_consumer_key + 
      "\", oauth_nonce=\"" + oauth_nonce + 
      "\", oauth_signature=\""+URLEncoder.encode(oauth_signature, "UTF-8") + 
      "\", oauth_signature_method=\"HMAC-SHA1" + 
      "\", oauth_timestamp=\""+ oauth_timestamp + 
      "\", oauth_token=\""+oauth_token + 
      "\", oauth_version=\"1.0\""; 


private String computeSignature(String baseString, String keyString){ 

    SecretKey secretKey = null; 

    byte[] keyBytes = keyString.getBytes(); 
    secretKey = new SecretKeySpec(keyBytes, "HmacSHA1"); 

    Mac mac = null; 
    try { 
     mac = Mac.getInstance("HmacSHA1"); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 

    try { 
     mac.init(secretKey); 
    } catch (InvalidKeyException e) { 
     e.printStackTrace(); 
    } 

    byte[] text = baseString.getBytes(); 

    return new String(Base64.encodeBase64(mac.doFinal(text))).trim(); 
} 

答えて

1

あなたは新しい署名を再生成せず、リクエストクエリパラメータを変更することはできません。


次のコード

は私の要求のためのOAuth署名を生成します。具体的には、「パラメータの収集」 https://dev.twitter.com/oauth/overview/creating-signaturesを参照してください。

署名リクエストのためのstackoverflowにはたくさんの例があります。そこから始めてください。具体的には、Androidで使用しているフレームワークを検索してください。

+0

あなたの説明のために、OAuth署名を生成するための一連のステートメントが見つかりましたが、同じエラーが発生します。あなたは問題を見つけるのを助けるためにそれらの声明を見直すことができますか? –

+0

は、私はそれはあなたが=と&文字をコードしていることかもしれない、あなたを疑う URLEncoder.encode(「USER_ID = XXXXXXXXXX&」、「UTF-8」) が、私はこれを行うにはjoauthライブラリを使用するので、私はありません正確性を確認するのに最適な人です。例えばhttps://github.com/yschimke/oksocial/blob/master/src/main/java/com/baulsupp/oksocial/services/twitter/Signature.java –

関連する問題