2014-01-25 2 views
2

grooveshark로 간단한 세션을 시작하려고하는데 sendPostReq 함수를 사용하여 startSession API를 호출합니다. 나는 grooveshark에서 다음과 같은 응답을 계속합니다.Grooveshark api는 항상 "Method not found"메시지를 반환합니다.

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

우리가 Grooveshark에 API를 작동 방법은 우리가 페이로드 (내 경우에는 grooveSharkjson)를 가지고, 우리는 비밀 키를 사용하여 해당의 MD5 해시를 생산하고 URL을 https://api.grooveshark.com/ws3.php?sig= {MD5 해시 해당 JSON을 게시 페이로드}. 이것이 올바른 절차입니까? 나는 그들이 우리를 제공 한 샘플 키와 비밀 그것을 확인한로

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 ; 
} 

아래에 존재 with with their website 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

제대로 작동하도록 관리 했습니까? 귀하의 코드를 사용하려고하면 "귀하의 웹 서비스 키에 호출 된 메소드에 대한 액세스 권한이 없습니다"오류가 발생합니다. :/ –

+0

오우는 알아 냈어. 신경 쓰지 마라. 당신의 grooveSharkjson에서 두 번째 \ "wsKey \"가 내 키가되어야하고 String 키가 내 비밀을 써야한다. 신기한 실수. 어쨌든 고마워! –

+0

jar 파일을 포함 시켰습니까? 나를 위해 그것은 SecurityHelper에 오류를주고 있습니다. 나는 자바를 처음 사용합니다. 당신이 나를 도울 수 있습니까 @ user1386101 –

관련 문제