def onroute(request): try: DB_STR = request.registry.settings['sqlalchemy.url'] dbCon = DBCon(DB_STR) request_params = request.params lat1 = request_params['lat1'] lng1 = request_params['lng1'] lat2 = request_params['lat2'] lng2 = request_params['lng2'] time = request_params.get('time') date = request_params['date'] latLngs = [[lat1, lng1]] #here findviaroutes url = request.registry.settings[ 'justdial.url'] + "/directions/viaroute?z=17&output=json&loc=%s,%s&loc=%s,%s&instructions=true" % ( lat1, lng1, lat2, lng2) print url data = requests.get(url) data = data.json() if data and 'via_points' in data and data['via_points']: latLngs.extend(data['via_points']) latLngs.append([lat2, lng2]) print latLngs allAvailabeRestaurants = [] for latLng in latLngs: index = 0 while True and index < JD_COUNT: lat = latLng[0] lng = latLng[1] #http://hack2014.justdial.com/search/json/justdialapicat/restaurants/kebab/bangalore/13043647/77620617/2km/20/0 url = request.registry.settings[ 'justdial.url'] + "/search/json/justdialapicat/restaurants/food/bangalore/%s/%s/%s/20/%d" % ( _formatTo6Digits(lat), _formatTo6Digits(lng), DISTANCE, index) print url data = requests.get(url) jdRestaurants = data.json() jdRestaurants = jdRestaurants['results'] jdRestaurantDocIds = [] print jdRestaurants for restaurant in jdRestaurants: jdRestaurantDocIds.append(str(restaurant['docId'])) if jdRestaurantDocIds: print jdRestaurantDocIds jdRestaurantDocIdsStr = "'" + "','".join( jdRestaurantDocIds) + "'" qry = "select * from restaurants r join deals d on r.id = d.restaurant_id where d.date = '%s' and (%s between d.start_time and d.end_time) and r.jd_doc_id in (%s)" % ( date, time, jdRestaurantDocIdsStr) print qry availableRestaurants = dbCon.fetch_all(qry) print availableRestaurants availableRestaurants = [ _formatRestaurant(restaurant, lat, lng) for restaurant in availableRestaurants ] allAvailabeRestaurants.extend(availableRestaurants) index += 1 if availableRestaurants: return { 'status': 'success', 'data': { 'deals': allAvailabeRestaurants } } return {'status': 'error', 'data': {'msg': "no restaurants exists"}} except: traceback.print_exc() return {'status': 'error', 'data': {'msg': "server side error"}}
def nearby(request): try: DB_STR = request.registry.settings['sqlalchemy.url'] dbCon = DBCon(DB_STR) request_params = request.params lat = request_params['lat'] lng = request_params['lng'] time = request_params['time'] date = request_params['date'] index = 0 #Since just dial gives only 20 items in a single call #TODO call it in thread allAvailabeRestaurants = [] while True and index < JD_COUNT: #http://hack2014.justdial.com/search/json/justdialapicat/restaurants/kebab/bangalore/13043647/77620617/2km/20/0 url = request.registry.settings[ 'justdial.url'] + "/search/json/justdialapicat/restaurants/food/bangalore/%s/%s/%s/20/%d" % ( _formatTo6Digits(lat), _formatTo6Digits(lng), DISTANCE, index) print url data = requests.get(url) jdRestaurants = data.json() jdRestaurants = jdRestaurants['results'] jdRestaurantDocIds = [] print jdRestaurants for restaurant in jdRestaurants: jdRestaurantDocIds.append(str(restaurant['docId'])) if jdRestaurantDocIds: print jdRestaurantDocIds jdRestaurantDocIdsStr = "'" + "','".join( jdRestaurantDocIds) + "'" qry = "select * from restaurants r join deals d on r.id = d.restaurant_id where d.date = '%s' and (%s between d.start_time and d.end_time) and r.jd_doc_id in (%s) group by r.id order by d.end_time desc" % ( date, time, jdRestaurantDocIdsStr) print qry availableRestaurants = dbCon.fetch_all(qry) print availableRestaurants availableRestaurants = [ _formatRestaurant(restaurant, lat, lng) for restaurant in availableRestaurants ] allAvailabeRestaurants.extend(availableRestaurants) index += 1 if len(allAvailabeRestaurants) < 10: ourBoundingBox = boundingBox(lat, lng, 3) qry = "select * from restaurants r join deals d on r.id = d.restaurant_id where d.date = '%s' and (%s between d.start_time and d.end_time) and (r.latitude between %s and %s) and (r.longitude between %s and %s) group by r.id order by d.end_time desc" % ( date, time, ourBoundingBox[0], ourBoundingBox[2], ourBoundingBox[1], ourBoundingBox[3]) print qry availableRestaurants = dbCon.fetch_all(qry) print availableRestaurants availableRestaurants = [ _formatRestaurant(restaurant, lat, lng) for restaurant in availableRestaurants ] allAvailabeRestaurants.extend(availableRestaurants) #if deal is availabe for the matching date time return it if allAvailabeRestaurants: sortedAllAvailabeRestaurants = sorted(allAvailabeRestaurants, key=lambda k: (-int(k['end_time']))) returnVal = [] pickedRestaurantIds = [] for sortedAllAvailabeRestaurant in sortedAllAvailabeRestaurants: if sortedAllAvailabeRestaurant[ 'restaurant_id'] not in pickedRestaurantIds: returnVal.append(sortedAllAvailabeRestaurant) pickedRestaurantIds.append( sortedAllAvailabeRestaurant['restaurant_id']) return {'status': 'success', 'data': {'deals': returnVal}} return {'status': 'error', 'data': {'msg': "no restaurants exists"}} except: import traceback traceback.print_exc() return {'status': 'error', 'data': {'msg': "server side error"}}
def _searchOnJustDial(dbCon, request, phone, owner_id, name, lat, lng, address, cost_for_2, email, pic_url): qry = "select * from restaurants where phone = %s" % (phone) print qry ourMatchingRestaurant = dbCon.fetch_one(qry) #get the closest matching owner_id = int(owner_id) if ourMatchingRestaurant and str( ourMatchingRestaurant['owner_id']) == str(owner_id): return { 'status': 'success', 'data': { 'restaurant_id': ourMatchingRestaurant['id'] } } elif ourMatchingRestaurant: return {'status': 'error', 'data': {'msg': "Invalid owner"}} #http://hack2014.justdial.com/search/json/mobilegetname/919343529202/3 url = request.registry.settings[ 'justdial.url'] + "/search/json/mobilegetname/%d/1" % (long(phone)) print url data = requests.get(url) jdRestaurant = data.json() jdRestaurant = jdRestaurant['data'] if jdRestaurant and len(jdRestaurant) > 0: jdRestaurant = jdRestaurant[0] print jdRestaurant qry = "insert into restaurants values (null, %s, '%s', %s,%s, null,'%s', '%s','%s','%s', '%s', '%s', %d)" % ( jdRestaurant['id'], name, lat, lng, address, cost_for_2, email, phone, pic_url, jdRestaurant['jdid'], owner_id) print qry restaurant_id = dbCon.insert(qry) return {'status': 'success', 'data': {'restaurant_id': restaurant_id}} #hit 5 times # index = 0 maxScore = 0 maxMatchedRestaurant = None while True and index < JD_COUNT: #http://hack2014.justdial.com/search/json/justdialapicat/restaurants/kebab/bangalore/13043647/77620617/2km/20/0 url = request.registry.settings[ 'justdial.url'] + "/search/json/justdialapicat/restaurants/%s/bangalore/%s/%s/2km/20/%d" % ( name, _formatTo6Digits(lat), _formatTo6Digits(lng), index) print url data = requests.get(url) jdRestaurants = data.json() jdRestaurants = jdRestaurants['results'] jdRestaurantDocIds = [] print jdRestaurants for restaurant in jdRestaurants: print '----' print restaurant score = getSimilarity(name, restaurant['name']) if score > THRESHOLD_SCORE and score > maxScore: maxScore = score maxMatchedRestaurant = restaurant jdRestaurantDocIds.append(str(restaurant['docId'])) print jdRestaurantDocIds jdRestaurantDocIdsStr = "'" + "','".join(jdRestaurantDocIds) + "'" qry = 'select * from restaurants where owner_id = %d and jd_doc_id in (%s) ' % ( int(owner_id), jdRestaurantDocIdsStr) print qry jdRestaurant = dbCon.fetch_one(qry) if jdRestaurant: return { 'status': 'success', 'data': { 'restaurant_id': jdRestaurant['id'] } } index += 1 if maxMatchedRestaurant: print maxMatchedRestaurant qry = "insert into restaurants values (null, null, '%s', %s,%s, null,'%s', '%s','%s','%s', '%s', '%s', %d)" % ( name, lat, lng, address, cost_for_2, email, phone, pic_url, maxMatchedRestaurant['docId'], int(owner_id)) print qry restaurant_id = dbCon.insert(qry) return {'status': 'success', 'data': {'restaurant_id': restaurant_id}} return { 'status': 'error', 'data': { 'msg': "Not able to find restaurant on just dial" } }
def onroute(request): try: DB_STR = request.registry.settings['sqlalchemy.url'] dbCon = DBCon(DB_STR) request_params = request.params lat1 = request_params['lat1'] lng1 = request_params['lng1'] lat2 = request_params['lat2'] lng2 = request_params['lng2'] time = request_params.get('time') date = request_params['date'] latLngs = [[lat1, lng1]] #here findviaroutes url = request.registry.settings['justdial.url'] + "/directions/viaroute?z=17&output=json&loc=%s,%s&loc=%s,%s&instructions=true" %(lat1, lng1, lat2, lng2) print url data = requests.get(url) data = data.json() if data and 'via_points' in data and data['via_points']: latLngs.extend(data['via_points']) latLngs.append([lat2, lng2]) print latLngs allAvailabeRestaurants = [] for latLng in latLngs: index = 0 while True and index < JD_COUNT: lat = latLng[0] lng = latLng[1] #http://hack2014.justdial.com/search/json/justdialapicat/restaurants/kebab/bangalore/13043647/77620617/2km/20/0 url = request.registry.settings['justdial.url'] + "/search/json/justdialapicat/restaurants/food/bangalore/%s/%s/%s/20/%d" %(_formatTo6Digits(lat), _formatTo6Digits(lng), DISTANCE, index) print url data = requests.get(url) jdRestaurants = data.json() jdRestaurants = jdRestaurants['results'] jdRestaurantDocIds = [] print jdRestaurants for restaurant in jdRestaurants: jdRestaurantDocIds.append(str(restaurant['docId'])) if jdRestaurantDocIds: print jdRestaurantDocIds jdRestaurantDocIdsStr = "'" + "','".join(jdRestaurantDocIds) + "'" qry = "select * from restaurants r join deals d on r.id = d.restaurant_id where d.date = '%s' and (%s between d.start_time and d.end_time) and r.jd_doc_id in (%s)" %(date, time, jdRestaurantDocIdsStr) print qry availableRestaurants = dbCon.fetch_all(qry) print availableRestaurants availableRestaurants = [_formatRestaurant(restaurant, lat, lng) for restaurant in availableRestaurants] allAvailabeRestaurants.extend(availableRestaurants) index += 1 if availableRestaurants: return { 'status': 'success', 'data': { 'deals': allAvailabeRestaurants } } return { 'status': 'error', 'data': { 'msg': "no restaurants exists" } } except: traceback.print_exc() return { 'status': 'error', 'data': { 'msg': "server side error" } }
def nearby(request): try: DB_STR = request.registry.settings['sqlalchemy.url'] dbCon = DBCon(DB_STR) request_params = request.params lat = request_params['lat'] lng = request_params['lng'] time = request_params['time'] date = request_params['date'] index = 0 #Since just dial gives only 20 items in a single call #TODO call it in thread allAvailabeRestaurants = [] while True and index < JD_COUNT: #http://hack2014.justdial.com/search/json/justdialapicat/restaurants/kebab/bangalore/13043647/77620617/2km/20/0 url = request.registry.settings['justdial.url'] + "/search/json/justdialapicat/restaurants/food/bangalore/%s/%s/%s/20/%d" %(_formatTo6Digits(lat), _formatTo6Digits(lng), DISTANCE, index) print url data = requests.get(url) jdRestaurants = data.json() jdRestaurants = jdRestaurants['results'] jdRestaurantDocIds = [] print jdRestaurants for restaurant in jdRestaurants: jdRestaurantDocIds.append(str(restaurant['docId'])) if jdRestaurantDocIds: print jdRestaurantDocIds jdRestaurantDocIdsStr = "'" + "','".join(jdRestaurantDocIds) + "'" qry = "select * from restaurants r join deals d on r.id = d.restaurant_id where d.date = '%s' and (%s between d.start_time and d.end_time) and r.jd_doc_id in (%s) group by r.id order by d.end_time desc" %(date, time, jdRestaurantDocIdsStr); print qry availableRestaurants = dbCon.fetch_all(qry) print availableRestaurants availableRestaurants = [_formatRestaurant(restaurant, lat, lng) for restaurant in availableRestaurants] allAvailabeRestaurants.extend(availableRestaurants) index += 1 if len(allAvailabeRestaurants) < 10: ourBoundingBox = boundingBox(lat, lng, 3) qry = "select * from restaurants r join deals d on r.id = d.restaurant_id where d.date = '%s' and (%s between d.start_time and d.end_time) and (r.latitude between %s and %s) and (r.longitude between %s and %s) group by r.id order by d.end_time desc" %(date, time, ourBoundingBox[0], ourBoundingBox[2], ourBoundingBox[1], ourBoundingBox[3]); print qry availableRestaurants = dbCon.fetch_all(qry) print availableRestaurants availableRestaurants = [_formatRestaurant(restaurant, lat, lng) for restaurant in availableRestaurants] allAvailabeRestaurants.extend(availableRestaurants) #if deal is availabe for the matching date time return it if allAvailabeRestaurants: sortedAllAvailabeRestaurants = sorted(allAvailabeRestaurants, key=lambda k: (-int(k['end_time']))) returnVal = [] pickedRestaurantIds = [] for sortedAllAvailabeRestaurant in sortedAllAvailabeRestaurants: if sortedAllAvailabeRestaurant['restaurant_id'] not in pickedRestaurantIds: returnVal.append(sortedAllAvailabeRestaurant) pickedRestaurantIds.append(sortedAllAvailabeRestaurant['restaurant_id']) return { 'status': 'success', 'data': { 'deals': returnVal } } return { 'status': 'error', 'data': { 'msg': "no restaurants exists" } } except: import traceback traceback.print_exc() return { 'status': 'error', 'data': { 'msg': "server side error" } }
def _searchOnJustDial(dbCon, request, phone, owner_id, name, lat, lng, address, cost_for_2, email, pic_url): qry = "select * from restaurants where phone = %s" %(phone); print qry ourMatchingRestaurant = dbCon.fetch_one(qry) #get the closest matching owner_id = int(owner_id) if ourMatchingRestaurant and str(ourMatchingRestaurant['owner_id']) == str(owner_id): return { 'status': 'success', 'data': { 'restaurant_id': ourMatchingRestaurant['id'] } } elif ourMatchingRestaurant: return { 'status': 'error', 'data': { 'msg': "Invalid owner" } } #http://hack2014.justdial.com/search/json/mobilegetname/919343529202/3 url = request.registry.settings['justdial.url'] + "/search/json/mobilegetname/%d/1" %(long(phone)) print url data = requests.get(url) jdRestaurant = data.json() jdRestaurant = jdRestaurant['data'] if jdRestaurant and len(jdRestaurant) > 0: jdRestaurant = jdRestaurant[0] print jdRestaurant qry = "insert into restaurants values (null, %s, '%s', %s,%s, null,'%s', '%s','%s','%s', '%s', '%s', %d)" %(jdRestaurant['id'], name, lat, lng, address, cost_for_2, email, phone, pic_url, jdRestaurant['jdid'], owner_id) print qry restaurant_id = dbCon.insert(qry) return { 'status': 'success', 'data': { 'restaurant_id': restaurant_id } } #hit 5 times # index = 0 maxScore = 0 maxMatchedRestaurant = None while True and index < JD_COUNT: #http://hack2014.justdial.com/search/json/justdialapicat/restaurants/kebab/bangalore/13043647/77620617/2km/20/0 url = request.registry.settings['justdial.url'] + "/search/json/justdialapicat/restaurants/%s/bangalore/%s/%s/2km/20/%d" %(name, _formatTo6Digits(lat), _formatTo6Digits(lng), index) print url data = requests.get(url) jdRestaurants = data.json() jdRestaurants = jdRestaurants['results'] jdRestaurantDocIds = [] print jdRestaurants for restaurant in jdRestaurants: print '----' print restaurant score = getSimilarity(name, restaurant['name']) if score > THRESHOLD_SCORE and score > maxScore: maxScore = score maxMatchedRestaurant = restaurant jdRestaurantDocIds.append(str(restaurant['docId'])) print jdRestaurantDocIds jdRestaurantDocIdsStr = "'" + "','".join(jdRestaurantDocIds) + "'" qry = 'select * from restaurants where owner_id = %d and jd_doc_id in (%s) ' %(int(owner_id), jdRestaurantDocIdsStr); print qry jdRestaurant = dbCon.fetch_one(qry) if jdRestaurant: return { 'status': 'success', 'data': { 'restaurant_id': jdRestaurant['id'] } } index += 1 if maxMatchedRestaurant: print maxMatchedRestaurant qry = "insert into restaurants values (null, null, '%s', %s,%s, null,'%s', '%s','%s','%s', '%s', '%s', %d)" %(name, lat, lng, address, cost_for_2, email, phone, pic_url, maxMatchedRestaurant['docId'], int(owner_id)) print qry restaurant_id = dbCon.insert(qry) return { 'status': 'success', 'data': { 'restaurant_id': restaurant_id } } return { 'status': 'error', 'data': { 'msg': "Not able to find restaurant on just dial" } }