2017-07-09 10 views
2

私はAndroidアプリでLastFM scrobblerを構築しようとしています。そのために私は最初にユーザーのセッションキーを取得する必要があります。そのために私はauth.getMobileSessionを使用しています。LastFM auth.getMobileSession not working

LastFM Rest Services

LastFm getMobileSessionしかし、私は常にエラーを取得するには:

Invalid parameters - Your request is missing a required parameter

私も、すべてのパラメータを送信し、POST呼び出しを使用してポストマンでそれを試してみましたが、同じ問題。何か不足していますか? enter image description here

+0

解決方法を見つけましたか?私は同じ問題を抱えている。 – Knolraap

+1

すべて試しました@Knolraap – Sucho

+0

@Knolraapは解決策を見つけました。 – lastresort

答えて

0

私は同じ問題を抱え、最終的に解決策を見つけました。

私はあなたのbuild.gradleにこの依存関係を追加する必要があるので、リクエストを送信するために、ライブラリokhttp3使用しました:

compile 'com.squareup.okhttp3:okhttp:3.9.0' 

そして、ここでは私の作業コード私もいた

String api_key = // your api key 
    String api_sig = // your api sig 
    String username = // username you want to log in 
    String password = // user password 

    String apiSignature = "api_key" + api_key + "methodauth.getMobileSessionpassword" + password + "username" + username + api_sig; 

    StringBuilder hexString = new StringBuilder(); 

    try { 
     MessageDigest md5Encrypter = MessageDigest.getInstance("MD5"); 
     // Create MD5 Hash 
     MessageDigest digest = java.security.MessageDigest 
       .getInstance("MD5"); 
     digest.update(apiSignature.getBytes("UTF-8")); 
     byte messageDigest[] = digest.digest(); 

     // Create Hex String 
     for (byte aMessageDigest : messageDigest) { 
      String h = Integer.toHexString(0xFF & aMessageDigest); 
      while (h.length() < 2) 
       h = "0" + h; 
      hexString.append(h); 
     } 

     String urlParameter = "method=auth.getMobileSession&api_key=" + api_key + "&password=" + password + "&username=" + username + "&api_sig=" + hexString; 
     Request request = new Request.Builder() 
       .url("https://ws.audioscrobbler.com/2.0/?" + urlParameter).post(RequestBody.create(null, new byte[0])).build(); 

     client.newCall(request).enqueue(new Callback() { 
      @Override 
      public void onFailure(Call call, IOException e) { 
       e.printStackTrace(); 
      } 

      @Override 
      public void onResponse(Call call, Response response) throws IOException { 
       try (ResponseBody responseBody = response.body()) { 
        String test = responseBody.string(); // your .xml with the session id, see https://www.last.fm/api/show/auth.getSession 
        if (!response.isSuccessful()) 
         throw new IOException("Unexpected code " + response); 
       } 
      } 
     }); 
    } catch (Exception ex) { 
     System.out.println(ex.toString()); 
    } 
0

ですこの問題に苦しんで、私はついにその原因を見つけました。 HTTPのPOSTリクエストで

この質問で説明したようにパラメータは、要求の本体に送信され

How are parameters sent in an HTTP POST request?

私がリクエストボディに入れていたことだった。

?api_key=xxxxxxxxxx&method=Auth.getMobileSession&password=xxxxxxxxxx&username=HyperQuantum&api_sig=xxxxxxxxxx 

ドゥエラーが表示されますか?

最初の疑問符はそこにあるはずがありません。私はそれを削除することを確認した後、問題は修正されました。

私はQtを使用しており、QUrl.toEncoded()を使用してリクエストのエンコードされたパラメータを取得していますが、この場合は役立たない疑問符も生成されます。