選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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()