LastFM auth.getMobileSession不起作用

时间:2017-07-09 17:01:20

标签: android rest api post last.fm

我一直在尝试在我的Android应用中构建LastFM scrobbler。为此,我需要先获取用户的会话密钥,我正在使用 auth.getMobileSession

LastFm getMobileSession

LastFM Rest Services

但我总是得到错误:

Invalid parameters - Your request is missing a required parameter

我甚至在Postman中尝试使用POST调用,发送所有参数,但同样的问题。我错过了什么吗?enter image description here

3 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,终于找到了解决方案。

我使用okhttp3库发送请求,因此您需要将此依赖项添加到build.gradle:

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

答案 1 :(得分: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()来获取请求的编码参数,但它也会生成一个在这种情况下无用的问号。

答案 2 :(得分:0)

好像您要使用LastFM API一样,您无需关心getMobileSession()等的指令。

无需创建任何会话,只需使用API​​_KEY发送请求即可正常工作。