-
Notifications
You must be signed in to change notification settings - Fork 0
/
yelp.py
58 lines (52 loc) · 1.69 KB
/
yelp.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/python2.7
import gpxpy.parser
import json
import sys
import urllib
import urllib2
import oauth2
import itertools
from config import CONSUMER_KEY, CONSUMER_SECRET, TOKEN, TOKEN_SECRET
class Yelp:
def __init__(self, consumer_key, consumer_secret, token, token_secret, gpxstring):
self.consumer_key=consumer_key
self.consumer_secret=consumer_secret
self.token=token
self.token_secret=token_secret
self.gpx=gpxpy.parser.GPXParser(gpxstring).parse()
def query(self, lat, lon):
url_params={
'category_filter': 'food',
'radius_filter': 2000, # 2 km on either side of route
'll': '{0},{1}'.format(lat, lon)
}
encoded_params=urllib.urlencode(url_params)
url='http://api.yelp.com/v2/search/?' + encoded_params
consumer=oauth2.Consumer(self.consumer_key, self.consumer_secret)
oauth_request=oauth2.Request('GET', url, {})
oauth_request.update(
{
'oauth_nonce': oauth2.generate_nonce(),
'oauth_timestamp': oauth2.generate_timestamp(),
'oauth_token': self.token,
'oauth_consumer_key': self.consumer_key
}
)
token=oauth2.Token(self.token, self.token_secret)
oauth_request.sign_request(oauth2.SignatureMethod_HMAC_SHA1(), consumer, token)
signed_url=oauth_request.to_url()
connection=urllib2.urlopen(signed_url, None)
try:
response=json.loads(connection.read())
finally:
connection.close()
return response
def query_all_cleaned(self):
places=[]
for track in self.gpx.tracks:
for segment in track.segments:
for place in self.query(lat=segment.points[0].latitude, lon=segment.points[0].longitude)['businesses']:
places.append(place)
#for k, g in itertools.groupby(places, lambda x: x['id']):
# places=g.next()
return places