def keyword_search(keyword, heavy=HEAVY, keyword_search=nil,
browse_id=nil, zipcode=nil, area_id=nil,
geo=nil, sort=nil, index=nil)
url = "/onca/xml3?t=%s&MarketplaceSearch=keyword&f=xml&type=%s" +
"&dev-t=%s&keyword=%s"
type = heavy ? 'heavy' : 'lite'
keyword = url_encode(keyword)
unless keyword_search.nil?
if Marketplace.keyword_searches.include? keyword_search
url += "&keyword-search=%s" % keyword_search
else
raise KeywordSearchError,
"'keyword_search' must be one of %s" %
keyword_searches.join(', ')
end
end
unless browse_id.nil?
url += "&browse-id=%s" % browse_id
end
unless zipcode.nil?
if zipcode !~ /^\d{5}$/
raise ZipcodeError, "'zipcode' must be 5 digits"
end
url += "&zipcode=%s" % zipcode
end
unless area_id.nil? && geo.nil?
if geo.nil?
raise GeoError,
"'geo' must be specified in combination with 'area_id'"
elsif area_id.nil?
raise AreaIdError,
"'area_id' must be specified in combination with 'geo'"
elsif area_id !~ /^4000\d\d\d$/
raise AreaIdError, "area code not well formed"
elsif ! Marketplace.geos.include? geo
raise GeoError, "'geo' must be one of %s" % geos.join(', ')
end
url += "&area-id=%s&geo=%s" % [area_id, geo]
end
unless sort.nil?
if Marketplace.sorts.include? sort
url += "&sort=%s" % sort
else
raise SortError,
"'sort' must be one of %s" % sorts.join(', ')
end
end
unless index.nil?
if Marketplace.indices.include? index
url += "&index=%s" % index
else
raise IndexError,
"'index' must be one of %s" % indices.join(', ')
end
end
search(url % [@id, type, @token, keyword])
end