def parse_wordnik_json(site, query, results, url): """ Wordnik's search API returns results in JSON format. This function simply loads the JSON into memory and creates an equivalent representation that is OpenSearch compliant. Parameters: * site (str): search engine name * query (str): query search terms (n.b. not a OpenSearch Query object) * results (dict): results from service * url (str): the url for the results that were retrieved to use as the OpenSearch link for the response Returns: * puppy.model.OpenSearch.Response """ response = Response() response.version = 'json' response.feed.setdefault('title', "{0}: {1}".format(site, query)) response.feed.setdefault('link', url) response.feed.setdefault('description', "Search results for '{0}' at {1}".format(query, site)) response.namespaces.setdefault("opensearch", "http://a9.com/-/spec/opensearch/1.1/") try: response.feed.setdefault("opensearch_itemsperpage", self.resultsPerPage) response.feed.setdefault("opensearch_startindex", 0) except KeyError: response.feed.setdefault("opensearch_itemsperpage", 0) response.feed.setdefault("opensearch_startindex", 0) if (self.source == 'Suggestions') and ('suggestions' in results): response.entries = parseSuggestionsJson(results, query, url) response.feed.setdefault("opensearch_totalresults", int(len(results['suggestions']))) elif (self.source == 'Examples') and ('examples' in results): response.entries = parseExamplesJson(results, url) response.feed.setdefault("opensearch_totalresults", int(len(results['examples']))) elif (self.source == 'Definitions'): response.entries = parseDefinitionsJson(results, url) response.feed.setdefault("opensearch_totalresults", int(len(results))) else: response.feed.setdefault("opensearch_totalresults", 0) return response
def parse_last_fm_json(site, url, query, results, pos): """ LastFM's search API returns results in JSON format. This function simply loads the JSON into memory and creates an equivalent representation that is OpenSearch compliant. Parameters: * site (str): search engine name * url (str): the url for the results that were retrieved to use as the OpenSearch link for the response * query (str): query search terms (n.b. not a OpenSearch Query object) * results (dict): results from service Returns: * puppy.model.OpenSearch.Response """ response = Response() response.version = 'json' response.feed.setdefault('title', "{0}: {1}".format(site, query)) response.feed.setdefault('link', url) response.feed.setdefault('description', "Search results for '{0}' at {1}".format(query, site)) response.namespaces.setdefault("opensearch", "http://a9.com/-/spec/opensearch/1.1/") try: response.feed.setdefault("opensearch_totalresults", results['opensearch_totalresults']) response.feed.setdefault("opensearch_itemsperpage", results['opensearch_itemsperpage']) response.feed.setdefault("opensearch_startindex", pos) except KeyError: response.feed.setdefault("opensearch_totalresults", 0) response.feed.setdefault("opensearch_itemsperpage", 0) response.feed.setdefault("opensearch_startindex", 0) if (self.source == 'track') and ('track' in results['trackmatches']): response.entries = parseLastFmResultsJson(results, 'trackmatches', 'track', url) elif (self.source == 'album') and ('album' in results['albummatches']): response.entries = parseLastFmResultsJson(results, 'albummatches', 'album', url) elif (self.source == 'artist') and ('artist' in results['artistmatches']): response.entries = parseLastFmResultsJson(results, 'artistmatches', 'artist', url) return response