You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.7KB

  1. #!/usr/bin/python3
  2. import requests
  3. import sys
  4. import textwrap
  5. import pprint
  6. try:
  7. from simplejson.errors import JSONDecodeError
  8. except ImportError:
  9. from json.decoder import JSONDecodeError
  10. api = 'https://api.steampowered.com/'
  11. key = '63578AF8E85EDF1E49411D5D4E18E166'
  12. uid = '76561198008294872' #whiteline
  13. #uid = '76561198111568728' #N33R
  14. # Fetch JSON from url and run it through transform, pretty printing errors
  15. # and the data worked on as exhaustively as possible.
  16. def json_query(url, transform, params={}):
  17. try:
  18. result = requests.get(url, params)
  19. except requests.exceptions.ConnectionError:
  20. print("Network connection error.")
  21. sys.exit(1)
  22. try:
  23. data = result.json()
  24. except JSONDecodeError as err:
  25. print('Error when decoding JSON:\nFrom endpoint ' + url + ':\n' + str(err) + '\n' + str(result) + '\n')
  26. sys.exit(1)
  27. try:
  28. return transform(data)
  29. except (IndexError, KeyError) as err:
  30. print('Error when traversing JSON:\nFrom endpoint ' + url + ':\n' + str(err))
  31. pprint.PrettyPrinter(indent=2).pprint(data)
  32. sys.exit(1)
  33. def steam_query(endpoint, transform, params={}):
  34. new_params = params.copy()
  35. new_params['key'] = key
  36. return json_query(api + endpoint + '/', transform, new_params)
  37. def get_friend_list(steamid):
  38. params = {
  39. 'steamid' : steamid,
  40. 'relationship' : 'friend'
  41. }
  42. return steam_query('ISteamUser/GetFriendList/v0001', lambda data: data['friendslist']['friends'], params)
  43. def get_player_summaries(steamids):
  44. params = {
  45. 'steamids' : ','.join(steamids)
  46. }
  47. return steam_query('ISteamUser/GetPlayerSummaries/v0002', lambda data: data['response']['players'], params)
  48. def boldgreen(string):
  49. return '\033[92m' + '\033[1m' + string + '\033[0m'
  50. def boldred(string):
  51. return '\033[91m' + '\033[1m' + string + '\033[0m'
  52. def boldgray(string):
  53. return '\033[90m' + '\033[1m' + string + '\033[0m'
  54. def personastate(n):
  55. states = {
  56. 0 : boldred('Offline'),
  57. 1 : boldgreen('Online'),
  58. 2 : boldred('Busy'),
  59. 3 : boldgray('Away'),
  60. 4 : boldgray('Snooze'),
  61. 5 : boldgreen('Looking to trade'),
  62. 6 : boldgreen('Looking to play')
  63. }
  64. return states[n]
  65. def main():
  66. friends = [friend['steamid'] for friend in get_friend_list(uid)]
  67. players = sorted(get_player_summaries(friends), key=lambda player: player['personaname'])
  68. print('\n'.join([player['personaname'] + ': ' + personastate(player['personastate']) + (', playing ' + player['gameextrainfo'] if 'gameextrainfo' in player else '') for player in players]))
  69. if __name__ == '__main__':
  70. main()