Я пытался перепроектировать их API, но вам, возможно, придется настроить его под свои нужды (и, возможно, оптимизировать под свои нужды):
Нам нужно будет получить authentication bearer
, чтобы использовать их API. Чтобы получить токен, нам сначала понадобятся библиотеки client_id
:
, которые я использую
import requests
from bs4 import BeautifulSoup
import re
import json
get client_id
session = requests.Session()
static = 'https://www.grubhub.com/eat/static-content-unauth?contentOnly=1'
soup = BeautifulSoup(session.get(static).text, 'html.parser')
client = re.findall("beta_[a-zA-Z0-9]+", soup.find('script', {'type': 'text/javascript'}).text)
# print(client)
получить носитель аутентификации
# define and add a proper header
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36',
'authorization': 'Bearer',
'content-type': 'application/json;charset=UTF-8'
}
session.headers.update(headers)
# straight from networking tools. Device ID appears to accept any 10-digit value
data = '{"brand":"GRUBHUB","client_id":"' + client[0] + '","device_id":1234567890,"scope":"anonymous"}'
resp = session.post('https://api-gtm.grubhub.com/auth', data=data)
# refresh = json.loads(resp.text)['session_handle']['refresh_token']
access = json.loads(resp.text)['session_handle']['access_token']
# update header with new token
session.headers.update({'authorization': 'Bearer ' + access})
сделайте ваш запрос
Вот часть, которая отличается от вашего запроса: их API использует стороннюю службу для получения долготы и широты для почтового индекса (например, -73.99916077, 40.75368499) для вашего почтового индекса в Нью-Йорке). Может быть даже вариант изменить это: location=POINT(-73.99916077%2040.75368499)
похоже, что он принимает и другие варианты.
grub = session.get('https://api-gtm.grubhub.com/restaurants/search/search_listing?orderMethod=delivery&locationMode=DELIVERY&facetSet=umamiV2&pageSize=20&hideHateos=true&searchMetrics=true&location=POINT(-73.99916077%2040.75368499)&facet=promos%3Atrue&facet=open_now%3Atrue&variationId=promosSponsoredRandom&sortSetId=umamiv3&countOmittingTimes=true')