Example #1
0
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"}}
Example #2
0
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"}}
Example #3
0
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"
        }
    }
Example #4
0
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"
				}
		}
Example #5
0
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"
				}
		}
Example #6
0
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"
					}
			}