Pregunta

Estoy tratando de recopilar la información de restaurantes en yelp.Tengo el nombre del restaurante, y estoy usando yelpapi.

He escrito en los siguientes:

from yelpapi import YelpAPI
yelp_api = YelpAPI(<key>, <secret>, <token>, <token secret>)
search_results = yelp_api.search_query(name = 'Neptune Oyster', location='Boston, MA'),

Pero terminó con una lista de 20 empresas, ninguna de las cuales está la de la derecha.¿Cómo debo especificar el nombre del restaurante en mi API de consulta?

También, ¿cómo hago para sacar todas las revisiones para un determinado restaurante?

Gracias!

¿Fue útil?

Solución

Es este el restaurante que estás buscando:

http://www.yelp.com/biz/neptune-oyster-boston?

Todo después de la última '/' es el restaurante del yelp-id.

Una vez que usted tiene la yelp-id debe utilizar el negocio de la api para obtener comentarios

Aquí está la documentación de la api de negocios

http://www.yelp.com/developers/documentation/v2/business

Su solicitud para obtener los comentarios sería como este:

http://api.yelp.com/v2/business/neptune-oyster-boston

y, específicamente para el python yelpapi, la solicitud puede ser construido como

yelp_api.business_api('neptune-oyster-boston')

Sólo me dio un fragmento de la revisión, para la revisión completa, creo que podría raspar el sitio web.Buscar en BeautifulSoup y Scrapy.

Finalmente, para responder a su primera pregunta, trate de reemplazar name con term en su parámetro de búsqueda.Usted puede encontrar una lista de otros válido parámetros de búsqueda en esta página:

http://www.yelp.com/developers/documentation/v2/search_api

Con la siguiente consulta,la api me dio el derecho de los negocios.

yelp_api.search_query(term='neptune oysters', location='boston', limit=1)

Buena suerte y feliz raspado!

Otros consejos

La API de fusión más reciente de Yelp (V3) ha dado lugar a algunos cambios en la forma en que se usa la API y la información devuelta.Lo más corto es que V2 podría obtener comentarios con una sola llamada.v3 requiere dos llamadas.A continuación se muestra cómo pude hacerlo para trabajar.Su kilometraje puede variar.

#Finding reviews for a particular restaurant
import http.client
import json
import urllib

headers = {
'authorization': "Bearer <access_token>",
'cache-control': "no-cache",
'postman-token': "<token>"
}
#need the following parameters (type dict) to perform business search. 
params = {'name':'Neptune oyster', 'address1':'63 Salem St.', 'city':'Boston', 'state':'MA', 'country':'US'}

param_string = urllib.parse.urlencode(params)
conn = http.client.HTTPSConnection("api.yelp.com")
conn.request("GET", "/v3/businesses/matches/best?"+param_string, headers=headers)

res = conn.getresponse()
data = res.read()
data = json.loads(data.decode("utf-8"))

b_id = data['businesses'][0]['id']

r_url = "/v3/businesses/" + b_id + "/reviews"    #review request URL creation based on business ID
conn.request("GET",r_url,headers=headers)
rev_res = conn.getresponse()     #response and read functions needed else error(?)
rev_data = rev_res.read()
yelp_reviews = json.loads(rev_data.decode("utf-8"))

print(json.dumps(yelp_reviews, indent=3, separators=(',', ': ')))

Specifying the restaurant name using term instead of name seems to work.

from yelpapi import YelpAPI
yelp_api = YelpAPI(key, secret, token, token_secret)
search_results = yelp_api.search_query(term='Neptune Oyster', location='Boston, MA')

>>> for business in search_results['businesses']:
...     print business['name']
... 
Neptune Oyster
Island Creek Oyster Bar
B & G Oysters
Rabia's
Union Oyster House
Pauli's
James Hook & Co
Row 34
Atlantic Fish Company
Mare
The Oceanaire Seafood Room
Alive & Kicking Lobsters
The Daily Catch
Yankee Lobster Fish Market
The Barking Crab
Boston Chowda Co.
Legal Sea Foods
Salty Dog Seafood Grille & Bar
Legal Sea Foods
Legal Sea Foods

According to the documentation, you are limited to 1 excerpt of a review. You can get that using a business query with the id of the business that you got from the search query:

>>> search_results = yelp_api.search_query(limit=1, term='Neptune Oyster', location='Boston, MA')
>>> if search_results['businesses'][0]['name'] == 'Neptune Oyster':
...     business_id = search_results['businesses'][0]['id']
...     business_results = yelp_api.business_query(id=business_id)
...     for review in business_results['reviews']:
...         print review['excerpt']
... 
Price/Food
- Waited almost two hours for this place! I talked to some people that were waiting in line and they were all raving that Neptune is the BEST...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top