2012-10-12 1 views
1
나는 자바와 유리 염기 쿼리의 결과 읽으려고

그러나자바 유리 염기 쿼리

URL url = null; 
String inputLine; 

try{ 
    url = new URL("https://www.googleapis.com/freebase/v1/mqlread?query={\"id\":\"/en/madonna\", \"name\": null, \"type\":\"/base/popstra/celebrity\",\"/base/popstra/celebrity/friendship\": [{\"participant\": [] }] }"); 

} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} 
BufferedReader in; 
try { 
    URLConnection con = url.openConnection(); 
    con.setReadTimeout(1000); //1 second 
    in = new BufferedReader(new InputStreamReader(con.getInputStream())); 
    while ((inputLine = in.readLine()) != null) { 
    System.out.println(inputLine); 
} 
in.close(); 

} catch (IOException e) { 
    e.printStackTrace(); 
} 

를 내가지고있어 다음과 같은 오류 :

java.io.IOException: Server returned HTTP response code: 400 for URL:  https://www.googleapis.com/freebase/v1/mqlread?query={ "id":"/en/madonna", "name": null, "type": "/base/popstra/celebrity","/base/popstra/celebrity/friendship": [{ "participant": [] }] } 

at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) 
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source) 
at FreebaseCelebrities.main(FreebaseCelebrities.java:66) 

이미 완료했습니다 이 (다른 요청과 함께) 전에 작동 했으므로 여기에 어떤 문제가 있습니까?

+0

400은 나쁜 요청을 의미합니다. – PbxMan

답변

1

if've got it !!!

API는 구문 분석 emply 공간이 제대로이 사용되지 않습니다 URL을 생성 할 때

url = new URL("https://www.googleapis.com/freebase/v1/mqlread?query={\"id\":\"/en/madonna\", \"name\": null, \"type\":\"/base/popstra/celebrity\",\"/base/popstra/celebrity/friendship\": [{\"participant\": [] }] }".replace(" ", "")); 
+0

Nice !! 그 +1에 대한 +1 – jozefg

+0

왜 URLEncode 공백을 허용하고 문자열 값 (내가 이것을 시도했습니다) 안에 잠재적으로 올바른 공간을 파괴하지 않습니다 –

+0

당신은 맞지만 URLEncode와 아파치 encodeQuery와 함께, URL이 기형입니다 이 API는 일부 장소에서 공백을 허용하지 않습니다. – PbxMan

1

이 코드를보십시오 :

try { 
    String query = "{\"id\":\"/en/madonna\", \"name\": null, \"type\":\"/base/popstra/celebrity\",\"/base/popstra/celebrity/friendship\": [{\"participant\": [] }] }"; 
    url = new URL("https://www.googleapis.com/freebase/v1/mqlread?query="+URLEncoder.encode(query, "UTF-8")); 
} catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 
} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} 

당신은 당신의 쿼리 문자열 매개 변수를 인코딩 URL에 필요합니다.

+0

여러분, 고맙습니다. 잘 작동합니다. 그러나 많은 질문을 연속적으로 수행 할 때 몇 가지 오류가 있습니다. 정상입니까? – Scipion

+0

짧은 기간 (Google에서 부과 한 요율 한도) 또는 많은 정보가 포함 된 대규모 쿼리 (최대 HTTP GET 크기)를 통해 몇 가지를 의미합니까? –

+0

짧은 기간에 몇 개. (마돈나의 친구를 얻으려고하고 마돈나의 친구의 친구를 사귈 때 ...). – Scipion