api.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. """PACC API functions"""
  2. import re
  3. import requests
  4. from bs4 import BeautifulSoup
  5. from dateutil import parser
  6. from app import BASE_URL, HEADERS, LOGGER
  7. class PlayerNotFoundException(Exception):
  8. """RR exception"""
  9. def __init__(self, *args, **kwargs):
  10. Exception.__init__(self, *args, **kwargs)
  11. LOGGER.warning('PlayerNotFoundException')
  12. def get_rr_player(player_id):
  13. """Get Rival Region player"""
  14. response = requests.get(
  15. '{}slide/profile/{}'.format(BASE_URL, player_id),
  16. headers=HEADERS
  17. )
  18. soup = BeautifulSoup(response.text, 'html.parser')
  19. player = {
  20. 'name': None,
  21. 'region': None,
  22. 'residency': None,
  23. 'registation_date': None,
  24. }
  25. table = soup.find('table')
  26. if table is None:
  27. raise PlayerNotFoundException('Player {} not found'.format(player_id))
  28. name = soup.find('h1')
  29. if name:
  30. player['name'] = re.sub(r'.*:\s', '', name.text)
  31. for row in table.find_all('tr'):
  32. label = row.find('td').text.strip()
  33. if label == 'Region:':
  34. span = row.find('span', {'class': 'dot'})
  35. if span:
  36. player['region'] = span.text
  37. if label == 'Residency:':
  38. span = row.find('span', {'class': 'dot'})
  39. if span:
  40. player['residency'] = span.text
  41. if label == 'Registration date:':
  42. element = row.find('td', {'class': 'imp'})
  43. if element:
  44. player['registation_date'] = parser.parse(element.text)
  45. return player
  46. def get_players_by_name(player_name):
  47. """Get player list by name"""
  48. response = requests.get(
  49. '{}listed/region/0/{}/0'.format(BASE_URL, player_name),
  50. headers=HEADERS,
  51. )
  52. soup = BeautifulSoup(response.text, 'html.parser')
  53. players = []
  54. player_items = soup.find_all('tr', {'class': 'list_link'})
  55. for player_item in player_items:
  56. players.append({
  57. 'id': int(player_item.get('user')),
  58. 'name': player_item.find('td', {'class': 'list_name'}).text.strip(),
  59. 'level': int(player_item.find('td', {'class': 'list_level'}).text),
  60. })
  61. return players
  62. def send_personal_message(user_id, message):
  63. """Send personal message to player"""
  64. requests.post(
  65. '{}send_personal_message/{}'.format(BASE_URL, user_id),
  66. headers=HEADERS,
  67. data={
  68. 'message': message
  69. }
  70. )