def raw_data(self): # Make sure fingerprint isn't blacklisted. fingerprint_blacklisted = any([ fingerprints['no_referrer'](request), fingerprints['iPokeGo'](request) ]) if fingerprint_blacklisted: log.debug('User denied access: blacklisted fingerprint.') abort(403) self.heartbeat[0] = now() args = get_args() if args.on_demand_timeout > 0: self.control_flags['on_demand'].clear() d = {} # Request time of this request. d['timestamp'] = datetime.utcnow() # Request time of previous request. if request.args.get('timestamp'): timestamp = int(request.args.get('timestamp')) timestamp -= 1000 # Overlap, for rounding errors. else: timestamp = 0 swLat = request.args.get('swLat') swLng = request.args.get('swLng') neLat = request.args.get('neLat') neLng = request.args.get('neLng') oSwLat = request.args.get('oSwLat') oSwLng = request.args.get('oSwLng') oNeLat = request.args.get('oNeLat') oNeLng = request.args.get('oNeLng') # Previous switch settings. lastgyms = request.args.get('lastgyms') lastpokestops = request.args.get('lastpokestops') lastpokemon = request.args.get('lastpokemon') lastslocs = request.args.get('lastslocs') lastspawns = request.args.get('lastspawns') if request.args.get('luredonly', 'true') == 'true': luredonly = True else: luredonly = False # Current switch settings saved for next request. if request.args.get('gyms', 'true') == 'true': d['lastgyms'] = request.args.get('gyms', 'true') if request.args.get('pokestops', 'true') == 'true': d['lastpokestops'] = request.args.get('pokestops', 'true') if request.args.get('pokemon', 'true') == 'true': d['lastpokemon'] = request.args.get('pokemon', 'true') if request.args.get('scanned', 'true') == 'true': d['lastslocs'] = request.args.get('scanned', 'true') if request.args.get('spawnpoints', 'false') == 'true': d['lastspawns'] = request.args.get('spawnpoints', 'false') # If old coords are not equal to current coords we have moved/zoomed! if (oSwLng < swLng and oSwLat < swLat and oNeLat > neLat and oNeLng > neLng): newArea = False # We zoomed in no new area uncovered. elif not (oSwLat == swLat and oSwLng == swLng and oNeLat == neLat and oNeLng == neLng): newArea = True else: newArea = False # Pass current coords as old coords. d['oSwLat'] = swLat d['oSwLng'] = swLng d['oNeLat'] = neLat d['oNeLng'] = neLng if (request.args.get('pokemon', 'true') == 'true' and not args.no_pokemon): if request.args.get('ids'): ids = [int(x) for x in request.args.get('ids').split(',')] d['pokemons'] = convert_pokemon_list( Pokemon.get_active_by_id(ids, swLat, swLng, neLat, neLng)) elif lastpokemon != 'true': # If this is first request since switch on, load # all pokemon on screen. d['pokemons'] = convert_pokemon_list( Pokemon.get_active(swLat, swLng, neLat, neLng)) else: # If map is already populated only request modified Pokemon # since last request time. d['pokemons'] = convert_pokemon_list( Pokemon.get_active( swLat, swLng, neLat, neLng, timestamp=timestamp)) if newArea: # If screen is moved add newly uncovered Pokemon to the # ones that were modified since last request time. d['pokemons'] = d['pokemons'] + ( convert_pokemon_list( Pokemon.get_active( swLat, swLng, neLat, neLng, oSwLat=oSwLat, oSwLng=oSwLng, oNeLat=oNeLat, oNeLng=oNeLng))) if request.args.get('eids'): # Exclude id's of pokemon that are hidden. eids = [int(x) for x in request.args.get('eids').split(',')] d['pokemons'] = [ x for x in d['pokemons'] if x['pokemon_id'] not in eids] if request.args.get('reids'): reids = [int(x) for x in request.args.get('reids').split(',')] d['pokemons'] = d['pokemons'] + ( convert_pokemon_list( Pokemon.get_active_by_id(reids, swLat, swLng, neLat, neLng))) d['reids'] = reids if (request.args.get('pokestops', 'true') == 'true' and not args.no_pokestops): if lastpokestops != 'true': d['pokestops'] = Pokestop.get_stops(swLat, swLng, neLat, neLng, lured=luredonly) else: d['pokestops'] = Pokestop.get_stops(swLat, swLng, neLat, neLng, timestamp=timestamp) if newArea: d['pokestops'] = d['pokestops'] + ( Pokestop.get_stops(swLat, swLng, neLat, neLng, oSwLat=oSwLat, oSwLng=oSwLng, oNeLat=oNeLat, oNeLng=oNeLng, lured=luredonly)) if request.args.get('gyms', 'true') == 'true' and not args.no_gyms: if lastgyms != 'true': d['gyms'] = Gym.get_gyms(swLat, swLng, neLat, neLng) else: d['gyms'] = Gym.get_gyms(swLat, swLng, neLat, neLng, timestamp=timestamp) if newArea: d['gyms'].update( Gym.get_gyms(swLat, swLng, neLat, neLng, oSwLat=oSwLat, oSwLng=oSwLng, oNeLat=oNeLat, oNeLng=oNeLng)) if request.args.get('scanned', 'true') == 'true': if lastslocs != 'true': d['scanned'] = ScannedLocation.get_recent(swLat, swLng, neLat, neLng) else: d['scanned'] = ScannedLocation.get_recent(swLat, swLng, neLat, neLng, timestamp=timestamp) if newArea: d['scanned'] = d['scanned'] + ScannedLocation.get_recent( swLat, swLng, neLat, neLng, oSwLat=oSwLat, oSwLng=oSwLng, oNeLat=oNeLat, oNeLng=oNeLng) if request.args.get('seen', 'false') == 'true': d['seen'] = Pokemon.get_seen(int(request.args.get('duration'))) if request.args.get('appearances', 'false') == 'true': d['appearances'] = Pokemon.get_appearances( request.args.get('pokemonid'), int(request.args.get('duration'))) if request.args.get('appearancesDetails', 'false') == 'true': d['appearancesTimes'] = ( Pokemon.get_appearances_times_by_spawnpoint( request.args.get('pokemonid'), request.args.get('spawnpoint_id'), int(request.args.get('duration')))) if request.args.get('spawnpoints', 'false') == 'true': if lastspawns != 'true': d['spawnpoints'] = SpawnPoint.get_spawnpoints( swLat=swLat, swLng=swLng, neLat=neLat, neLng=neLng) else: d['spawnpoints'] = SpawnPoint.get_spawnpoints( swLat=swLat, swLng=swLng, neLat=neLat, neLng=neLng, timestamp=timestamp) if newArea: d['spawnpoints'] = d['spawnpoints'] + ( SpawnPoint.get_spawnpoints( swLat, swLng, neLat, neLng, oSwLat=oSwLat, oSwLng=oSwLng, oNeLat=oNeLat, oNeLng=oNeLng)) if request.args.get('status', 'false') == 'true': args = get_args() d = {} if args.status_page_password is None: d['error'] = 'Access denied' elif (request.args.get('password', None) == args.status_page_password): d['main_workers'] = MainWorker.get_all() d['workers'] = WorkerStatus.get_all() if request.args.get('weather', 'false') == 'true'\ and not args.no_weather_cells: d['weather'] = get_weather_cells(swLat, swLng, neLat, neLng) if request.args.get('s2cells', 'false') == 'true'\ and not args.no_weather_cells: d['s2cells'] = get_s2_coverage(swLat, swLng, neLat, neLng) if request.args.get('weatherAlerts', 'false') == 'true'\ and not args.no_weather_cells: d['weatherAlerts'] = get_weather_alerts(swLat, swLng, neLat, neLng) return jsonify(d)
def raw_data(self): # Make sure fingerprint isn't blacklisted. fingerprint_blacklisted = any([ fingerprints['no_referrer'](request), fingerprints['iPokeGo'](request) ]) if fingerprint_blacklisted: log.debug('User denied access: blacklisted fingerprint.') abort(403) auth_redirect = check_auth(request) if (auth_redirect): return auth_redirect d = {} # Request time of this request. d['timestamp'] = datetime.utcnow() # Request time of previous request. if request.args.get('timestamp'): timestamp = int(request.args.get('timestamp')) timestamp -= 1000 # Overlap, for rounding errors. else: timestamp = 0 swLat = request.args.get('swLat') swLng = request.args.get('swLng') neLat = request.args.get('neLat') neLng = request.args.get('neLng') oSwLat = request.args.get('oSwLat') oSwLng = request.args.get('oSwLng') oNeLat = request.args.get('oNeLat') oNeLng = request.args.get('oNeLng') # Previous switch settings. lastgyms = request.args.get('lastgyms') lastpokestops = request.args.get('lastpokestops') lastpokemon = request.args.get('lastpokemon') lastslocs = request.args.get('lastslocs') lastspawns = request.args.get('lastspawns') pokestops = request.args.get('pokestops', 'true') == 'true' pokestopsNoEvent = request.args.get('pokestopsNoEvent', 'true') == 'true' quests = request.args.get('quests', 'true') == 'true' invasions = request.args.get('invasions', 'true') == 'true' lures = request.args.get('lures', 'true') == 'true' # Current switch settings saved for next request. if (request.args.get('gyms', 'true') == 'true' or request.args.get('raids', 'true') == 'true'): d['lastgyms'] = True if pokestops and (pokestopsNoEvent or quests or invasions or lures): d['lastpokestops'] = True if request.args.get('pokemon', 'true') == 'true': d['lastpokemon'] = True if request.args.get('scanned', 'true') == 'true': d['lastslocs'] = True if request.args.get('spawnpoints', 'false') == 'true': d['lastspawns'] = True if (oSwLat is not None and oSwLng is not None and oNeLat is not None and oNeLng is not None): # If old coords are not equal to current coords we have # moved/zoomed! if (oSwLng < swLng and oSwLat < swLat and oNeLat > neLat and oNeLng > neLng): newArea = False # We zoomed in no new area uncovered. elif not (oSwLat == swLat and oSwLng == swLng and oNeLat == neLat and oNeLng == neLng): newArea = True else: newArea = False # Pass current coords as old coords. d['oSwLat'] = swLat d['oSwLng'] = swLng d['oNeLat'] = neLat d['oNeLng'] = neLng if (request.args.get('pokemon', 'true') == 'true' and not args.no_pokemon): eids = None ids = None if (request.args.get('eids') and request.args.get('prionotify', 'false') == 'false'): request_eids = request.args.get('eids').split(',') eids = [int(i) for i in request_eids] elif not request.args.get('eids') and request.args.get('ids'): request_ids = request.args.get('ids').split(',') ids = [int(i) for i in request_ids] if lastpokemon != 'true': # If this is first request since switch on, load # all pokemon on screen. d['pokemons'] = convert_pokemon_list( Pokemon.get_active(swLat, swLng, neLat, neLng, eids=eids, ids=ids)) else: # If map is already populated only request modified Pokemon # since last request time. d['pokemons'] = convert_pokemon_list( Pokemon.get_active(swLat, swLng, neLat, neLng, timestamp=timestamp, eids=eids, ids=ids)) if newArea: # If screen is moved add newly uncovered Pokemon to the # ones that were modified since last request time. d['pokemons'] += (convert_pokemon_list( Pokemon.get_active(swLat, swLng, neLat, neLng, oSwLat=oSwLat, oSwLng=oSwLng, oNeLat=oNeLat, oNeLng=oNeLng, eids=eids, ids=ids))) if request.args.get('reids'): request_reids = request.args.get('reids').split(',') reids = [int(x) for x in request_reids] d['pokemons'] += convert_pokemon_list( Pokemon.get_active(swLat, swLng, neLat, neLng, ids=ids)) d['reids'] = reids if (not args.no_pokestops and pokestops and (pokestopsNoEvent or quests or invasions or lures)): if lastpokestops != 'true': d['pokestops'] = Pokestop.get_stops( swLat, swLng, neLat, neLng, pokestopsNoEvent=pokestopsNoEvent, quests=quests, invasions=invasions, lures=lures) else: d['pokestops'] = Pokestop.get_stops( swLat, swLng, neLat, neLng, timestamp=timestamp, pokestopsNoEvent=pokestopsNoEvent, quests=quests, invasions=invasions, lures=lures) if newArea: d['pokestops'].update( Pokestop.get_stops(swLat, swLng, neLat, neLng, oSwLat=oSwLat, oSwLng=oSwLng, oNeLat=oNeLat, oNeLng=oNeLng, pokestopsNoEvent=pokestopsNoEvent, quests=quests, invasions=invasions, lures=lures)) gyms = request.args.get('gyms', 'true') == 'true' and not args.no_gyms raids = (request.args.get('raids', 'true') == 'true' and not args.no_raids) if gyms or raids: if lastgyms != 'true': d['gyms'] = Gym.get_gyms(swLat, swLng, neLat, neLng, raids=raids) else: d['gyms'] = Gym.get_gyms(swLat, swLng, neLat, neLng, timestamp=timestamp, raids=raids) if newArea: d['gyms'].update( Gym.get_gyms(swLat, swLng, neLat, neLng, oSwLat=oSwLat, oSwLng=oSwLng, oNeLat=oNeLat, oNeLng=oNeLng, raids=raids)) if request.args.get('scanned', 'true') == 'true': if lastslocs != 'true': d['scanned'] = ScannedLocation.get_recent( swLat, swLng, neLat, neLng) else: d['scanned'] = ScannedLocation.get_recent(swLat, swLng, neLat, neLng, timestamp=timestamp) if newArea: d['scanned'] = d['scanned'] + ScannedLocation.get_recent( swLat, swLng, neLat, neLng, oSwLat=oSwLat, oSwLng=oSwLng, oNeLat=oNeLat, oNeLng=oNeLng) if request.args.get('seen', 'false') == 'true': d['seen'] = Pokemon.get_seen(int(request.args.get('duration'))) if request.args.get('appearances', 'false') == 'true': d['appearances'] = Pokemon.get_appearances( request.args.get('pokemonid'), request.args.get('formid'), int(request.args.get('duration'))) if request.args.get('appearancesDetails', 'false') == 'true': d['appearancesTimes'] = ( Pokemon.get_appearances_times_by_spawnpoint( request.args.get('pokemonid'), request.args.get('formid'), request.args.get('spawnpoint_id'), int(request.args.get('duration')))) if request.args.get('spawnpoints', 'false') == 'true': if lastspawns != 'true': d['spawnpoints'] = Trs_Spawn.get_spawnpoints(swLat=swLat, swLng=swLng, neLat=neLat, neLng=neLng) else: d['spawnpoints'] = Trs_Spawn.get_spawnpoints( swLat=swLat, swLng=swLng, neLat=neLat, neLng=neLng, timestamp=timestamp) if newArea: d['spawnpoints'] = d['spawnpoints'] + ( Trs_Spawn.get_spawnpoints(swLat, swLng, neLat, neLng, oSwLat=oSwLat, oSwLng=oSwLng, oNeLat=oNeLat, oNeLng=oNeLng)) if request.args.get('weather', 'false') == 'true': d['weather'] = get_weather_cells(swLat, swLng, neLat, neLng) if request.args.get('weatherAlerts', 'false') == 'true': d['weatherAlerts'] = get_weather_alerts(swLat, swLng, neLat, neLng) return jsonify(d)