0

我的代码基本上根据来自 TMDB(API ver.3,新 API)的给定关键字检索搜索结果列表。

public String getPersonSearchResult(String keywords){
        String query = URLEncoder.encode(keywords);
        String TMDB_API_URL = "http://api.themoviedb.org/3/search/person?";
        String TMDB_LIMIT_LIST = "&page=1";
        String TMDB_QUERY = "&query=" + query;

        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response;
        String responseString = null;

        try
        {
            // ATTEMPT HTTP REQUEST
            String fullUrl = TMDB_API_URL + TMDB_API_KEY + TMDB_QUERY + TMDB_LIMIT_LIST;
            Log.w(APP_TAG, "TRYING [" + fullUrl + "]");

            response = httpclient.execute(new HttpGet(fullUrl));
            StatusLine statusLine = response.getStatusLine();

            if (statusLine.getStatusCode() == HttpStatus.SC_OK)
            {
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                response.getEntity().writeTo(out);
                out.close();
                responseString = out.toString();
            }else{
                // FAILED REQUEST - CLOSE THE CONNECTION
                response.getEntity().getContent().close();
                throw new IOException(statusLine.getReasonPhrase());
            }
        }catch(Exception e){
            Log.w(APP_TAG, e.getLocalizedMessage());
            Log.w(APP_TAG, "FAILED TO RETRIEVE JSON DATA");
        }

        return responseString;
    }

问题是我总是得到 406 状态码(不可接受)。当我尝试自己运行 URL 时

http://api.themoviedb.org/3/search/person?api_key=<MY_API_KEY_HERE>&query=jennifer&page=1

它正确显示 JSON 结果。

我不确定为什么会这样。类似的功能用于从其他来源检索 JSON 值,并且效果很好。

这是他们关于搜索的 API 文档:http: //docs.themoviedb.apiary.io/#search

谁能指出我正确的方向?任何帮助表示赞赏。

4

4 回答 4

0

尝试这个

    String ret = null; try {
        response = httpClient.execute(httpGet);
    } catch (Exception e) {
        e.printStackTrace();
    }

    try {
        ret = EntityUtils.toString(response.getEntity());
    } catch (IOException e) {
        Log.e("HttpRequest", "" + e.getMessage());
    } catch (Exception e) {
        e.printStackTrace();
    }

    return ret;
于 2013-09-13T06:56:26.340 回答
0

一种方法
尝试使用builder.scheme

    URIBuilder builder = new URIBuilder();
    builder.setScheme("http").setHost("api.themoviedb.org").setPath("/3/search/person")
        .setParameter("api_key", YOURAPIKEY)
        .setParameter("page", 1)
        .setParameter("query", query)
    URI uri = builder.build();
    HttpGet httpget = new HttpGet(uri);

.....
   response = httpclient.execute(new HttpGet(httpget ));
于 2013-09-13T06:03:06.880 回答
0

我想通了,通过添加这个:

HttpGet getObj = new HttpGet(fullUrl);
getObj.addHeader("Accept", "application/json");

也许这是 API 的特定要求。虽然不确定...

于 2013-09-13T06:08:18.270 回答
0

我认为这与您的代码无关。您的代码很完美。唯一的问题可能与 API 请求方法有关。也许他们需要在请求中请求一些特定的标头。尝试使用像“(“Accept”,“application/json”)”这样的请求标头它可能会起作用..

于 2013-09-13T06:18:32.357 回答