From 81ea15298b8e362f2b22019aad3bae9862713165 Mon Sep 17 00:00:00 2001 From: Brian Date: Fri, 22 Jul 2016 10:29:27 -0400 Subject: [PATCH] Adding initial REST Framework; Adding method to get user stats (#204) * Adding initial REST Framework; Adding method to get user stats * Changing bot's get_player_info print statement to adhere to the standards --- pokecli.py | 11 +++++++++-- pokemongo_bot/__init__.py | 21 +++++++++++++++------ server.py | 30 ++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 server.py diff --git a/pokecli.py b/pokecli.py index 5356fe4110..c01607f7f7 100755 --- a/pokecli.py +++ b/pokecli.py @@ -39,6 +39,7 @@ ssl._create_default_https_context = ssl._create_unverified_context from pokemongo_bot import PokemonGoBot +from server import PokemonGoServer def init_config(): parser = argparse.ArgumentParser() @@ -96,8 +97,14 @@ def main(): bot = PokemonGoBot(config) bot.start() - while(True): - bot.take_step() + pid = os.fork() + + if pid == 0: + server = PokemonGoServer(bot, 5000) + server.start() + else: + while(True): + bot.take_step() if __name__ == '__main__': main() diff --git a/pokemongo_bot/__init__.py b/pokemongo_bot/__init__.py index 69e5e83c37..84be0a0e0b 100644 --- a/pokemongo_bot/__init__.py +++ b/pokemongo_bot/__init__.py @@ -11,6 +11,7 @@ from stepper import Stepper from geopy.geocoders import GoogleV3 from math import radians, sqrt, sin, cos, atan2 +from collections import OrderedDict class PokemonGoBot(object): @@ -248,7 +249,10 @@ def get_inventory_count(self, what): return itemcount return '0' - def get_player_info(self): + def get_player_info(self, print_stats=True): + player_stats = stats = OrderedDict() + + # Get contents of inventory self.api.get_inventory() response_dict = self.api.call() if 'responses' in response_dict: @@ -266,14 +270,19 @@ def get_player_info(self): nextlvlxp = (int(playerdata['next_level_xp']) - int(playerdata['experience'])) if 'level' in playerdata: - print('[#] -- Level: {level}'.format(**playerdata)) + player_stats['Level'] = playerdata['level'] if 'experience' in playerdata: - print('[#] -- Experience: {experience}'.format(**playerdata)) - print('[#] -- Experience until next level: {}'.format(nextlvlxp)) + player_stats['Experience'] = playerdata['experience'] + player_stats['Experience until next level'] = nextlvlxp if 'pokemons_captured' in playerdata: - print('[#] -- Pokemon Captured: {pokemons_captured}'.format(**playerdata)) + player_stats['Pokemon Captured'] = playerdata['pokemons_captured'] if 'poke_stop_visits' in playerdata: - print('[#] -- Pokestops Visited: {poke_stop_visits}'.format(**playerdata)) + player_stats['Pokestops Visited'] = playerdata['poke_stop_visits'] + + if print_stats: + for key in player_stats: + print('[#] -- {}: {}'.format(key, player_stats[key])) + return json.dumps(player_stats, indent=4) diff --git a/server.py b/server.py new file mode 100644 index 0000000000..1198f16f3f --- /dev/null +++ b/server.py @@ -0,0 +1,30 @@ +import json + +from flask import Flask +from flask.ext.classy import FlaskView, route +#from bot import PokemonGoBot + +from pgoapi import PGoApi + +app = Flask(__name__) + +global global_bot + +class PokemonGoServer(object): + def __init__(self, bot, port=5000): + api_view = ApiView() + api_view.set_bot(bot) + api_view.register(app) + self.port = port + + def start(self): + app.run(host='0.0.0.0', port=self.port) + +class ApiView(FlaskView): + def set_bot(self, bot): + global global_bot + global_bot = bot + + @route("/player_info") + def get_player_info(self): + return global_bot.get_player_info(False)