With the infrastructure in place for the suggestions feature, it’s easy to add new kinds of suggestions – especially if someone else has already done most of the work. For example, given an address, we should be able to look up the names of businesses at that address, and suggest them as venue names.
Yahoo! and Google both do this automatically if you search for something they recognize as an address. But Google doesn’t seem to provide an API. Yahoo! Local does, and the YM4R gem already provides a nice Ruby wrapper for it. So:
def make_suggestions_based_on_address businesses = Ym4r::YahooMaps::BuildingBlock::LocalSearch::get( :location => address.block, :radius => 0.001, :results => 20, :query => '*' ) businesses.each do |business| add_suggestion(:name, business.title) add_suggestion(:url, business.business_url) unless business.business_url.blank? end end
You might wonder about the
radius parameter. Technically, Yahoo! doesn’t provide the service I want; I want “tell me what’s at this address”, it has “tell me what’s near this address”. With a radius of 0, it returns up to 10 results. After a little experimentation, it looks to me like 0.01 is a tight enough radius to get me all the businesses at an address – or at least the top 10 – and none of the ones next door.
This is actually one of two ways I’m subverting the API here. It’s intended for search, not simple lookup, which is why it’s a little awkward to get a simple address. It’s also why Yahoo! provides multiple URLs for each business. The
BusinessUrl is the actual URL for the business’s web site. There’s also a
BusinessClickUrl, which “contains extra information that helps [them] to optimize [their] search services. Yahoo! requests that you display the
BusinessUrl, but link to the
BusinessClickUrl, so they can track usage.
The latest code actually uses both URLs, but I’m going to stop here for now.