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

それを行う1つの方法
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 に答える