isaac9A
isaac9A

Reputation: 903

node.js http and bing search api

I am trying to use the Bing Search API to return a JSON string. I first tried using the following url as per Azure's explore website (https://datamarket.azure.com/dataset/explore/5BA839F1-12CE-4CCE-BF57-A49D98D29A44):

'https://api.datamarket.azure.com/Bing/Search/v1/Composite?Sources=%27web%27&Query=%27NGI%20SPA%27&Market=%27en-US%27'

After, I found a SO thread Using the new Bing API (nodejs) which suggested I use a url of the form:

https://user:<YourDefaultAccountKey>@api.datamarket.azure.com/Bing/SearchWeb/Web?Query=%27leo%20fender%27&Market=%27en-US%27&$top=50&$format=JSON

Both of these return status 401 (Authentication Failure):

STATUS: 401
HEADERS: {"content-type":"application/json; charset=utf-8","server":"Microsoft-IIS/8.0","jsonerror":"true","x-powered-by":"ASP.NET","access-control-allow-origin":"*","access-control-allow-credentials":"false","access-control-allow-headers":"Authorization, DataServiceVersion, MaxDataServiceVersion","access-control-expose-headers":"DataServiceVersion, MaxDataServiceVersion","access-control-allow-methods":"GET, POST, OPTIONS","access-control-max-age":"604800","date":"Wed, 02 Jul 2014 17:23:29 GMT","content-length":"91"}
BODY: {"Message":"There was an error processing the request.","StackTrace":"","ExceptionType":""}

I have also tried other various combinations of URLs to no avail. My code is below:

var url = require('url');
var http = require('http');

var serviceRootURL =  'https://api.datamarket.azure.com/Bing/Search/v1/Composite?Sources=%27web%27&Query=%27NGI%20SPA%27&Market=%27en-US%27'
var params = 'hi';

var dataURL = url.parse(serviceRootURL);

var post_options = {  
    hostname: dataURL.hostname,
    port: dataURL.port || 80,
    path: dataURL.path,
    method: 'GET',  
    headers: {  
        'Content-Type': 'application/json; charset=utf-8',  
        'Content-Length': params.length  
    }  
};

var req = http.request(post_options, function(res) {
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));
    res.setEncoding('utf8');
    res.on('data', function (chunk) {

        console.log('BODY: ' + chunk);

    });

});

req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end();

Any idea why I am getting an authentication failure?

Upvotes: 2

Views: 1878

Answers (3)

hasan
hasan

Reputation: 29

you can use jsearch module. install ;

npm install jsearch

usage;

js.bing('queryStringYouWant',10,function(response){
    console.log(response) // for Bing results 
})

Upvotes: 0

Mr. Goferito
Mr. Goferito

Reputation: 7001

You can use this module that encapsulates the requests, so you can use it like:

var Bing = require('node-bing-api')({ accKey: "your-account-key" });

Bing.web("leo fender", function(error, res, body){
    console.log(body);
  },
  {
    top: 50,
    market: 'en-US'
  });

It works with the Azure version. You only have to replace your account key.

Upvotes: 1

isaac9A
isaac9A

Reputation: 903

Got it working with request...weird

var request = require('request');
var _ = require('underscore');

var searchURL = 'https://user:<TIPE YOUR KEE HEER>@api.datamarket.azure.com/Bing/SearchWeb/v1/Web?Query=%27xbox%27&$top=10&$format=JSON';
var http = request( searchURL, function(err, resp, body)
{
    if ( err )
    {
        throw err;
    }
    var a = JSON.parse(body);
    console.log(a.d.results);
});

Upvotes: 0

Related Questions