Bing 검색 API에서 데이터를 가져 오려고하고 있으며 기존 라이브러리가 오래되어 단종 된 API를 기반으로 한 것 같기 때문에 request
라이브러리를 사용하여 직접 해보 았지만, 이를위한 가장 보편적 인 라이브러리 인 것으로 보입니다. 내 코드가node.js "request"모듈을 사용한 응답 인코딩
var SKEY = "myKey...." ,
ServiceRootURL = 'https://api.datamarket.azure.com/Bing/Search/v1/Composite';
function getBingData(query, top, skip, cb) {
var params = {
Sources: "'web'",
Query: "'"+query+"'",
'$format': "JSON",
'$top': top, '$skip': skip
},
req = request.get(ServiceRootURL).auth(SKEY, SKEY, false).qs(params);
request(req, cb)
}
getBingData("bookline.hu", 50, 0, someCallbackWhichParsesTheBody)
처럼 보이는 빙 일부 JSON을 반환하고 응답 본문이 문자열이 잘못되었습니다 불평 JSON.parse
비 ASCII 문자를 대량으로 포함되어있는 경우 나는 때로는 하지만 작업 할 수 있습니다. ATOM 콘텐츠 유형으로 전환하려고 시도했지만 차이가 없었습니다. xml이 유효하지 않습니다. request()
콜백에서 사용할 수있는 응답 본문을 검사하면 실제로 잘못된 코드가 표시됩니다.
그래서 나는 파이썬 코드로 같은 요청을 시도했다. 그리고 그것은 항상 잘 작동하는 것처럼 보인다. 참고 :
r = requests.get(
'https://api.datamarket.azure.com/Bing/Search/v1/Composite?Sources=%27web%27&Query=%27sexy%20cosplay%20girls%27&$format=json',
auth=HTTPBasicAuth(SKEY,SKEY))
stuffWithResponse(r.json())
나는 (오프셋 강화로) 문제를 일으키는 하나의 결과를 확인하기 위해 (예를 들어, 결과의 수를 제한하는) 작은 응답으로 문제를 재현 할 수없는 및 드릴 수 없습니다. 제 느낌은 응답이 청크로 읽히고 어떻게 든 코드 변환되고 나쁜 방식으로 재 조립된다는 것입니다. 즉, 일부 멀티 바이트 문자가 분리되면 json/atom 데이터가 무효화됩니다. 이는 큰 응답에서는 발생하지만 작은 응답에서는 발생하지 않습니다. 뭔가 내가 일을해야하다 (어딘가 인코딩을 설정? 빙은 UTF-8 반환, 그래서이 필요 보이지 않는) 경우 노드에 새가되는
, 나는 확실하지 않다.
누구나 무슨 일이 일어나고 있는지 알 수 있습니까?
FWIW, OSX 10.8이고, 노드는 macports를 통해 설치된 v0.8.20이고 요청은 npm을 통해 v2.14.0이 설치됩니다.
TBH의 JSON 구문 분석을 가능하게도를 하지만 제대로 작동하지 않을 수 있습니다. 뭔가 잘못 됐음에 틀림 없습니다. 어쨌든 이제는 제대로 작동하는 것처럼 보이므로 다른 누군가가'request' 모듈을 사용하기위한 수정을 제공하지 않으면 여러분의 대답을 받아 들일 것입니다. 감사! – riffraff
사실 JSON이 실제로 잘못되었다는 사실과 관련이있을 수 있습니다. 멀티 바이트 문자가있는 문자열이 있고'Content-Length'를'params.length'로 전달하면 내용의 길이가 문자열의 문자 수와 같다고 말하는 것입니다. 이것은 멀티 바이트 문자에는 해당되지 않습니다. '{ "name": "feee"}'대신에 API가 아마도'{ "name": "feee"' – amsross