2014-01-25 61 views
2

我想用grooveshark啓動一個簡單的會話,並使用sendPostReq函數調用startSession api。我繼續從grooveshark獲得以下回復。Grooveshark api總是返回「Method not found」消息

{"errors":[{"code":2,"message":"Method not found."}]} 

我們用的Grooveshark API的工作方式是我們擁有的有效載荷(grooveSharkjson在我的情況),我們生產使用密鑰的一個MD5哈希和張貼JSON這個網址https://api.grooveshark.com/ws3.php?sig= {MD5哈希-of-有效載荷}。這是正確的程序嗎?

的sendPostReq功能及其製造MD5哈希碼也存在以下

public static void sendPostReq() throws Exception{ 

    String grooveSharkjson = "{'method':'startSession','header':{'wsKey':'wskey'}}"; 

    String key = "secret"; // Your api key. 
    String sig = SecurityHelper.getHmacMD5(grooveSharkjson, key); 

    URL url = new URL("https://api.grooveshark.com/ws3.php?sig=" + sig); 
    URLConnection connection = url.openConnection(); 
    connection.setDoInput(true); 
    connection.setDoOutput(true); 

    connection.connect(); 

    OutputStream os = connection.getOutputStream(); 
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(os)); 
    pw.write(grooveSharkjson); 
    pw.close(); 

    InputStream is = connection.getInputStream(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
    String line = null; 
    StringBuffer sb = new StringBuffer(); 
    while ((line = reader.readLine()) != null) { 
     sb.append(line); 
    } 
    is.close(); 
    String response = sb.toString(); 
    System.out.println(response); 

} 

public static String getHmacMD5(String payload, String secret) { 
    String sEncodedString = null; 
    try { 
     SecretKeySpec key = new SecretKeySpec((secret).getBytes("UTF-8"), "HmacMD5"); 
     Mac mac = Mac.getInstance("HmacMD5"); 
     mac.init(key); 

     byte[] bytes = mac.doFinal(payload.getBytes("UTF-8")); 

     StringBuffer hash = new StringBuffer(); 

     for (int i=0; i<bytes.length; i++) { 
      String hex = Integer.toHexString(0xFF & bytes[i]); 
      if (hex.length() == 1) { 
       hash.append('0'); 
      } 
       hash.append(hex); 
      } 
      sEncodedString = hash.toString(); 
     } 
     catch (UnsupportedEncodingException e) {} 
     catch(InvalidKeyException e){} 
     catch (NoSuchAlgorithmException e) {} 

     return sEncodedString ; 
} 

我相信我生產的散列是正確的,因爲我與他們已經爲我們提供了樣本密鑰和密碼驗證它與在其網站上 http://developers.grooveshark.com/tuts/public_api

回答

2

我知道我張貼的問題,約20分鐘回來,但我只是找到了解決辦法。 json字符串出現問題,尤其是我產生它的方式。這是如何應生成

String grooveSharkjson = "{\"method\":\"startSession\",\"header\":{\"wsKey\":\"wsKey\"},\"parameters\":[]}"; 

我沒想到的解決方案是那麼明顯,但是這是從那裏我得到了如何解決我的問題的想法 - 我測試了我的鑰匙,並祕密對他們的沙盒( http://developers.grooveshark.com/docs/public_api/v3/sandbox.php)並且雙重檢查了hmac md5簽名。

+0

您是否設法讓它工作?我嘗試使用您的代碼,並得到「您的Web服務密鑰無法訪問調用的方法」錯誤。 :/ –

+0

哦,沒關係,我想通了,你沒有在你的grooveSharkjson中指定第二個\「wsKey \」應該是我的鑰匙和字符串鍵我應該寫我的祕密。菜鳥的錯誤。不管怎麼說,還是要謝謝你! –

+0

您是否包含任何jar文件。對我來說,它給SecurityHelper錯誤。我是新來的Java。你可以幫我@ user1386101 –

相關問題