Fix Cane's spider

Prior art: AllThePlaces' implementation:
35dc669bef/locations/spiders/raising_canes_us.py
35dc669bef/locations/storefinders/yext_answers.py

Requested-By: Eric Villnow
This commit is contained in:
Chandler Swift 2025-11-29 21:37:43 -06:00
parent 7e5cb5ff1d
commit 2f832fa731
Signed by: chandlerswift
GPG key ID: A851D929D52FB93F

View file

@ -4,34 +4,54 @@ import requests
import json import json
print("Searching for Raising Cane's locations") print("Searching for Raising Cane's locations")
response = requests.get('https://raisingcanes.com/page-data/sq/d/3976656178.json').json()
all_results = []
desired_results = 999999
while len(all_results) < desired_results:
res = requests.get("https://prod-cdn.us.yextapis.com/v2/accounts/me/search/vertical/query", params={
"experienceKey": "locator",
"api_key": "6c78315e15b82a7cccbbf3fad5db0958",
"v": "20220511",
"version": "PRODUCTION",
"locale": "en",
"verticalKey": "locations",
"filters": json.dumps({
"builtin.location": {
"$near": {
"lat": 0,
"lng": 0,
"radius": 100000000,
}
}
}),
"limit": 50,
"offset": len(all_results),
"source": "STANDARD",
})
desired_results = int(res.json()['response']['resultsCount'])
all_results.extend(res.json()['response']['results'])
print(f"Fetched {len(all_results)}/{desired_results} results…")
stores = [] stores = []
for s in response['data']['allPrismicStoreLocation']['nodes']: for s in all_results:
if s['uid'] == 'ara2': # Not sure what's up with this one: https://raisingcanes.com/locations/ara2/
continue
elif s['uid'] == 'c524': # Null island? https://raisingcanes.com/locations/c524/
s['data']['coordinates'] = {
"longitude": -111.9811399,
"latitude": 40.5447361,
}
stores.append({ stores.append({
"type": "Feature", "type": "Feature",
"geometry": { "geometry": {
"type": "Point", "type": "Point",
"coordinates": [float(s['data']['coordinates']['longitude']), float(s['data']['coordinates']['latitude'])], # yes, [lon, lat] since it's [x, y] "coordinates": [float(s['data']['yextDisplayCoordinate']['longitude']), float(s['data']['yextDisplayCoordinate']['latitude'])], # yes, [lon, lat] since it's [x, y]
}, },
"properties": { "properties": {
'name': s['data']['external_location_data']['displayName'], 'name': s['data']['name'],
'nickname': s['data']['external_location_data']['nickname'], 'nickname': s['data']['c_nickname'],
'address': s['data']['external_location_data']['address1'], 'address': s['data']['address']['line1'],
'city': s['data']['external_location_data']['city'], 'city': s['data']['address']['city'],
'state': s['data']['external_location_data']['state'], 'state': s['data']['address']['region'],
'zip': s['data']['external_location_data']['postal_code'], 'zip': s['data']['address']['postalCode'],
'website': f"https://raisingcanes.com/locations/{s['uid']}", 'website': s['data']['websiteUrl'],
'opened': s['data']['external_location_data']['birthdate'], 'opened': s['data']['c_openDate'],
'hours': s['data']['external_location_data']['hours'], 'hours': s['data']['hours'],
}, },
}) })