Example #1
0
    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
Example #2
0
    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