Bing arama API'sinden veri almaya çalışıyorum ve var olan kitaplıklar eski üretilmemiş API'lere dayanıyor gibi görünüyorsa da, request
kitaplığını kullanarak kendim denedim Bunun için en yaygın kütüphane gibi görünüyor. Kodumnode.js "istek" modülü ile yanıt kodlaması
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)
benziyor Bing bazı JSON döndüren ve tepki vücut dizesi biçimi bozuktur şikayet JSON.parse
olmayan ASCII karakterleri büyük miktarda içeriyorsa onunla bazen ama çalışabilir. Bir ATOM içerik türüne geçmeyi denedim, ancak fark olmadı, xml geçersizdi. Yanıt gövdesinin request()
geri çağrısında kullanılabilir olarak incelenmesi, aslında hatalı kod gösterir.
Aynı isteği bir python koduyla denedim ve bu her zaman iyi çalışıyor gibi görünüyor. Referans için:
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())
I (ofset hızlandırarak) soruna neden tek bir sonuç tespit etmek (örneğin, sonuç sayısının sınırlandırılması) daha küçük yanıtlarıyla sorunu yeniden yapamaz ve am yapamaz. Benim izlenimim, yanıtların bir şekilde okunması, bir şekilde kod dönüştürülmesi ve kötü bir şekilde yeniden bir araya getirilmesidir. Bu, bazı çokbaytlı karakterlerin bölünmesi durumunda json/atom verilerinin geçersiz hale geldiği anlamına gelir, bu da daha büyük yanıtlarda gerçekleşir, ancak küçük olmayanlar için geçerlidir.
Düğüm için yeni olmakla, yapmam gereken bir şey olup olmadığından emin değilim (kodlamayı bir yerde ayarlama? Bing, UTF-8'i döndürür, bu nedenle gerekli görünmüyor).
Neler olup bittiği hakkında herhangi bir fikri olan var mı?
FWIW, OSX 10.8'deyim, node v0.8.20 macports üzerinden kuruldu, istek vpm.14.0 npm aracılığıyla kuruldu.
TBH ait json ayrıştırılması anlamında çok ama işe yaramazdım, yanlış bir şeyim olmalı. Her neyse, şimdi çalışıyor gibi görünüyor, bu yüzden birisi 'request' modülünü kullanmak için bir düzeltme sağlamazsa cevabınızı kabul ediyorum. Teşekkürler! – riffraff
JSON'un aslında bozuk olduğu gerçeğiyle daha fazla ilgisi olabilir. İçinde çok baytlı bir karakter dizisi varsa ve 'İçerik Uzunluğu'nu 'params.length' olarak iletirseniz, içeriğin dizedeki karakter sayısıyla aynı bayt uzunluğuna sahip olduğunu söylüyorsunuz. Bu, çok baytlı karakterler ile doğru değildir. "{" Name ":" feeé "}' yerine, api muhtemelen '{"name": "feeé" – amsross