2010-12-14 36 views
12

Je cherchais une API pour récupérer automatiquement des informations Google Insights pour une partie d'un autre algorithme, mais je n'ai rien trouvé. Le premier résultat sur Google fournit un site avec un plugin python qui est maintenant obsolète.Y a-t-il une API Google Insights?

Une telle API existe-t-elle, ou quelqu'un a-t-il écrit un plugin, peut-être pour python?

Répondre

7

Pour autant que je peux dire, il n'y a pas d'API disponible pour l'instant, ni est-il une mise en œuvre de travail d'un procédé d'extraction de données de Google Insights. Cependant, j'ai trouvé une solution à mon problème (un peu plus spécifique), qui pourrait vraiment être résolu en sachant combien de fois certains termes sont recherchés. Cela peut être fait en s'interfaçant avec le protocole Google Suggest pour les barres de recherche webbrowser. Quand vous lui donnez un mot, il renvoie une liste d'expressions suggérées ainsi que le nombre de fois que chaque phase a été fouillée (je ne suis pas sûr de l'unité de temps, vraisemblablement l'année dernière).

Voici un code python pour ce faire, un peu adapté à partir du code par odewahn1 à O'reilly Answers et de travailler sur Python 2.6 et inférieur:

from sgmllib import SGMLParser 
import urllib2 
import urllib 

# Define the class that will parse the suggestion XML 
class PullSuggestions(SGMLParser): 

    def reset(self): 
     SGMLParser.reset(self) 
     self.suggestions = [] 
     self.queries = [] 

    def start_suggestion(self, attrs): 
     for a in attrs: 
     if a[0] == 'data': self.suggestions.append(a[1]) 

    def start_num_queries(self, attrs): 
     for a in attrs: 
     if a[0] == 'int': self.queries.append(a[1]) 

# ENTER THE BASE QUERY HERE 

base_query = "" #This is the base query 

base_query += "%s" 
alphabet = "abcdefghijklmnopqrstuvwxyz" 
for letter in alphabet: 
    q = base_query % letter; 
    query = urllib.urlencode({'q' : q}) 
    url = "http://google.com/complete/search?output=toolbar&%s" % query 

    res = urllib2.urlopen(url) 
    parser = PullSuggestions() 
    parser.feed(res.read()) 
    parser.close() 

    for i in range(0,len(parser.suggestions)): 
     print "%s\t%s" % (parser.suggestions[i], parser.queries[i]) 

Ce au moins résout le problème en partie, mais il est malheureusement encore difficile d'obtenir de manière fiable le nombre de recherches pour un mot ou une expression spécifique et impossible d'obtenir l'historique de recherche de différentes phrases.

+1

Il semble qu'ils se sont débarrassés de l'attribut int. Si je suis arrivé à "http://google.com/complete/search?output=toolbar&q=hello%20world", il ne dispose plus que de l'attribut de données. –

+0

Je me demandais s'il n'y a pas encore d'API officielle disponible actuellement (2014). J'ai cherché pendant un moment mais je n'ai encore rien trouvé. –

0

Je n'ai trouvé aucune documentation fournie par Google, mais Brad Jasper semble avoir trouvé une méthode pour interroger Insights pour information. Note: Je ne sais pas si ça marche encore ... Bonne chance!

Use Python to Access Google Insights API

+0

Oui, ce serait celui auquel j'ai fait référence dans ma question. Malheureusement, ça ne marche plus. –

2

Je viens de commencer à chercher et trouvé un bon moyen de le récupérer en utilisant python dans le script suivant .Basically il passe citation spécialisée à google base de données financières historiques .

def get_index(gindex, startdate=20040101): 
    """ 
    API wrapper for Google Domestic Trends data. 
     https://www.google.com/finance/domestic_trends 

    Available Indices: 

     'ADVERT', 'AIRTVL', 'AUTOBY', 'AUTOFI', 'AUTO', 'BIZIND', 'BNKRPT', 
     'COMLND', 'COMPUT', 'CONSTR', 'CRCARD', 'DURBLE', 'EDUCAT', 'INVEST', 
     'FINPLN', 'FURNTR', 'INSUR', 'JOBS', 'LUXURY', 'MOBILE', 'MTGE', 
     'RLEST', 'RENTAL', 'SHOP', 'TRAVEL', 'UNEMPL' 

    """ 
    base_url = 'http://www.google.com/finance/historical?q=GOOGLEINDEX_US:' 
    full_url = '%s%s&output=csv&startdate=%s' % (base_url, gindex, startdate) 
    dframe = read_csv(urlopen(full_url), index_col=0) 
    dframe.index = DatetimeIndex(dframe.index) 
    dframe = dframe.sort_index(0) 
    for col in dframe.columns: 
     if len(dframe[col].unique()) == 1: 
      dframe.pop(col) 
    if len(dframe.columns) == 1 and dframe.columns[0] == 'Close': 
     dframe.columns = [gindex] 
    return dframe[gindex]