bing-search
A Ruby client for the Bing Search API.

Getting Started
Installation
gem install bing-search
Signup
Sign up for the Bing Search API or the Web-Only Bing Search API at the Microsoft Azure Marketplace. Then retrieve your Account Key from the My Account section of the marketplace and provide it as shown below.
Documentation
This README provides an overview of bing-search. Full documentation is available at rubydoc.info.
Basics
To use bing-search, first supply your Account Key:
BingSearch.account_key = 'hzy9+Y6...'
Then, use {BingSearch.web} to search for web pages:
results = BingSearch.web('Dirac')
Or, use the other {BingSearch} class methods to search for images, news, video, related searches, and spelling suggestions:
BingSearch.spelling('Feinman').first.suggestion
The type of result depends on the kind of search:
BingSearch.web('Gell-Mann').class
BingSearch.image('Pauli').class
BingSearch.video('von Neumann').class
And each result type has its own attributes:
web = BingSearch.web('Gell-Mann').first
web.summary
image = BingSearch.image('Pauli').first
image.media_type
video = BingSearch.video('von Neumann').first
video.duration
See the documentation of the result types for a full list of the attributes.
Options
The search methods take options that control the number of results returned;
BingSearch.web('Dyson', limit: 5).count
the size, orientation, and contents of images;
BingSearch.image 'Tesla', filters: [:large, :wide, :photo, :face]
whether to {BingSearch::HIGHLIGHT_DELIMITER highlight} query terms in the results;
BingSearch.news('Hawking', highlighting: true).first.title
and many other aspects of the search. Note that "enumeration" options—those whose values are module-level constants—may be provided as underscored symbols:
BingSearch.news 'Higgs', category: BingSearch::NewsCategory::ScienceAndTechnology
BingSearch.news 'Higgs', category: :science_and_technology
See {BingSearch::Client} for exhaustive documentation of the options.
Composite Searches
To retrieve multiple result types at once, use {BingSearch.composite}:
result = BingSearch.composite('Majorana', [:web, :image, :news])
The result is a {BingSearch::CompositeSearchResult} ...
result.class
... containing an array for each result type:
result.web.first.class
result.image.first.class
result.news.first.class
All of the single-type search options are supported in composite searches, though the names may have prefixes to specify the type they pertain to:
BingSearch.composite 'Fermi', [:image, :video], image_filters: [:small], video_filters: [:short]
Composite searches also give you access to more data about the search including the total number of results in the Bing index and whether Bing corrected apparent errors in the query text:
result = BingSearch.composite('Feyman', [:web, :image, :news])
result.web_total
result.altered_query
Web-Only API
To use the less expensive web-only API, set {BingSearch.web_only}:
BingSearch.web_only = true
BingSearch.news 'Newton'
BingSearch.web 'Newton'
BingSearch::Client
{BingSearch::Client} is the class underlying the {BingSearch} class methods. You can use it on its own to run multiple searches over a single TCP connection:
BingSearch::Client.open do |client|
client.web 'Lee'
client.web 'Wu'
client.web 'Yang'
end
Or to override global settings:
client = BingSearch::Client.new(account_key: 'hzy9+Y6...', web_only: true)
Tests
To run the tests:
- Sign up for both the standard and web-only APIs
- Set the environment variable BING_SEARCH_ACCOUNT_KEY to your Account Key
rake
Contributing
Please submit issues and pull requests to jonahb/bing-search on GitHub.