2010-12-14 22 views
12

He estado buscando una API para recuperar automáticamente la información de Google Insights como parte de otro algoritmo, pero no he podido encontrar nada. El primer resultado en Google ofrece un sitio con un complemento de Python que ahora está desactualizado.¿Hay una API de Google Insights?

¿Existe tal API, o alguien ha escrito un complemento, tal vez para python?

Respuesta

7

Por lo que yo puedo decir, no hay una API disponible hasta el momento, y tampoco hay una implementación funcional de un método para la extracción de datos de Google Insights. Sin embargo, he encontrado una solución a mi problema (un poco más específico), que realmente podría resolverse simplemente sabiendo cuántas veces se buscan ciertos términos.

Esto se puede hacer interactuando con el protocolo Google Suggest para las barras de búsqueda del navegador web. Cuando le das una palabra, devuelve una lista de frases sugeridas, así como la cantidad de veces que se ha buscado en cada fase (no estoy seguro de la unidad de tiempo, presumiblemente en el último año).

Aquí hay un código Python para hacer esto, adaptado ligeramente de código por odewahn1 en O'reilly Answers y trabajando en Python 2.6 y menor:

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]) 

Esta al menos resuelve el problema en parte, pero por desgracia, sigue siendo Es difícil obtener de manera confiable el número de búsquedas de una palabra o frase específica e imposible obtener el historial de búsqueda de diferentes frases.

+1

Parece que se deshicieron del atributo int. Si llegué a "http://google.com/complete/search?output=toolbar&q=hello%20world", ahora solo tiene el atributo de datos. –

+0

Me preguntaba si todavía no hay ninguna API oficial relacionada disponible actualmente (2014). Busqué por un tiempo pero no encontré nada todavía. –

0

No pude encontrar ninguna documentación provista por Google, pero Brad Jasper parece haber encontrado algún método para consultar información. Nota: No estoy seguro de si todavía funciona ... ¡Buena suerte!

Use Python to Access Google Insights API

+0

Sí, ese sería el que mencioné en mi pregunta. Desafortunadamente, ya no funciona. –

2

acabo de empezar a buscar y encontré una buena manera de recuperarla usando pitón en el siguiente script .Basically que está pasando cita especializada a la base de datos de google financiera histórica .

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]