diff --git a/README.md b/README.md index b5fe1ba..94f18c6 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,34 @@ Bing.composite("xbox", function(error, res, body){ }); ``` +#### News Search: +```js +Bing.news("xbox", function(error, res, body){ + console.log(body); + }, + { + top: 10, // Number of results (max 50) + skip: 3, // Skip first 3 results + newssortby: "Date" //Choices are Date, Relevance + newscategory: "rt_Business" //Choices are rt_Business,rt_Entertainment,rt_Health,rt_Politics,rt_Sports,rt_US,rt_World,rt_ScienceAndTechnology + }); +``` + +#### Video Search: +```js +Bing.videp("xbox", function(error, res, body){ + console.log(body); + }, + { + top: 10, // Number of results (max 50) + skip: 3, // Skip first 3 result + videofilters: { + duration: 'short', + resolution: 'high' + } + }); +``` + #### Images Search: ```js Bing.images("Ninja Turtles", function(error, res, body){ diff --git a/lib/bing.js b/lib/bing.js index 7a7332a..a2ac9bb 100644 --- a/lib/bing.js +++ b/lib/bing.js @@ -64,11 +64,16 @@ var Bing = function( options ) { + "&$skip=" + opts.skip + (opts.sources ? "&Sources=%27" + opts.sources + "%27" : '') + (opts.newssortby ? "&NewsSortBy=%27" + opts.newssortby + "%27" : '') + + (opts.newscategory ? "&NewsCategory=%27" + opts.newscategory + "%27" : '') + + (opts.newslocationoverride ? "&NewsLocationOverride=%27" + opts.newslocationoverride + "%27" : '') + (opts.market ? "&Market=%27" + opts.market + "%27" : '') + (opts.adult ? "&Adult=%27" + opts.adult + "%27" : '') + (opts.imagefilters ? '&' + qs.stringify({ "ImageFilters": "'" + opts.imagefilters + "'" }) - : ''); + : '') + + (opts.videofilters + ? '&' + qs.stringify({ "VideoFilters": "'" + opts.videofilters + "'" }) + : ''); request({ uri: reqUri, @@ -148,9 +153,54 @@ Bing.prototype.composite = function(query, callback, options) { this.searchVertical(query, "Composite", callback, options); }; -// Alias Bing.search to Bing.web -// Note: Keep this for compatibility with older versions -Bing.prototype.search = Bing.prototype.composite; +/** + * Performs a Bing search in the News vertical. + * + * @param {String} query Query term to search for. + * + * @param {requestCallback} callback Callback called with (potentially + * json-parsed) response. + * + * @param {Object} options Options to command, allows overriding + * of rootUri, accKey (Bing API key), + * userAgent, reqTimeout, top, skip, + * @function + */ +Bing.prototype.news = function(query, callback, options) { + this.searchVertical(query, "News", callback, options); +}; + +/** + * Performs a Bing search in the Video vertical. + * + * @param {String} query Query term to search for. + * + * @param {requestCallback} callback Callback called with (potentially + * json-parsed) response. + * + * @param {Object} options Options to command, allows overriding + * of rootUri, accKey (Bing API key), + * userAgent, reqTimeout, top, skip, + * @function + */ +Bing.prototype.video = function(query, callback, options) { + if (options + && options.videofilters + && typeof options.videofilters === 'object') { + var filterQuery = ''; + var filters = Object.keys(options.videofilters); + filters.map(function(key, i) { + filterQuery += capitalizeFirstLetter(key) + ':'; + filterQuery += capitalizeFirstLetter(options.videofilters[key]); + if (i < filters.length - 1) + filterQuery += '+'; + }); + options.videofilters = filterQuery; + } + this.searchVertical(query, "Video", callback, options); +}; + + /** * Performs a Bing search in the Images vertical.