Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

175 рядки
5.8 KiB

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # This program is dedicated to the public domain under the CC0 license.
  4. # Telegram - Betaseries
  5. import logging
  6. import requests
  7. import json
  8. from config import config
  9. import os
  10. # import time
  11. from os import path
  12. from telegram_api import send_message
  13. client_id = config['client_id']
  14. login = config['login']
  15. password = config['password']
  16. def login_beta():
  17. # L'API nécéssite le client_id, le login + le mot de passe en MD5. A partir de là, nous récupérons le TOKEN Betaseries qui nous permettra de communiquer avec notre compte Betaseries
  18. global token
  19. API_auth = 'https://api.betaseries.com/members/auth'
  20. API_auth += '?client_id=' + client_id +'&login=' + login + '&password=' + password
  21. request = requests.post(API_auth)
  22. if str(request) != '<Response [200]>' :
  23. return False
  24. data = request.json()
  25. token = str(data['token'])
  26. return token
  27. def create_api(choice, thetvdb_id):
  28. #Cette fonction permet de créer l'api Betaseries (que nous allons interroger) à partir des informations dans config.py
  29. #La séparer dans une autre fonction permet de choisir QUELLE api créer et pour quel thetvdb_id
  30. token = login_beta() #Si jamais create_api est appelée d'un autre fichier, login_beta() n'a pas pu mettre la variable "token" en Global. Donc on la récupère
  31. if choice == 'latest' :
  32. base_url = 'https://api.betaseries.com/episodes/latest?'
  33. API = base_url + 'token=' + token + '&client_id=' + client_id + '&thetvdb_id=' + thetvdb_id
  34. return API
  35. if choice == 'info' :
  36. base_url = 'https://api.betaseries.com/shows/display?'
  37. API = base_url + 'token=' + token + '&client_id=' + client_id + '&thetvdb_id=' + thetvdb_id
  38. return API
  39. if choice == 'seen':
  40. base_url = 'https://api.betaseries.com/shows/display?'
  41. return False
  42. def check_latest(thetvdb_id):
  43. # Nous utilisons le thetvdb_id et le fournissons à create_api. à partir de là nous récupérons le dernier épisode de la série. Et nous regardons s'il est déjà enregistré [WIP]
  44. API = create_api('latest', thetvdb_id)
  45. if API == False :
  46. print("ERREUR DURANT LA CREATION DE L'API !")
  47. return
  48. request = requests.get(API)
  49. if str(request) != '<Response [200]>' :
  50. print("Mauvaise réponse de l'api ! ")
  51. return False
  52. show = request.json()
  53. episode = show['episode']
  54. title = episode['show']
  55. id = episode['id']
  56. user = episode['user']
  57. if path.exists('latest') == False :
  58. print("Le dossier 'latest' n'existe pas, creez le")
  59. #On créé le dictionnaire contenant les informations de l'épisode
  60. episode_info = {
  61. "serie_title" : title['title'],
  62. "season " : episode['season'],
  63. "episode" : episode['episode'],
  64. "id" : title['id'],
  65. "seen" : user['seen']
  66. }
  67. #On choisi créé l'emplacement du fichier. On utilisera l'id thetvdb car utiliser le nom de la série risquerait des fichiers trop long
  68. file_path = ''
  69. file_path = 'latest/' + thetvdb_id + '.json'
  70. # Si le fichier n'existe pas. Nous n'avons rien à comparer : Par définition nous sauvegardons les informations.
  71. if path.exists(file_path) == False :
  72. create_file(file_path, episode_info)
  73. # Si le fichier existe. Nous comparons les informations reçues de l'API avec celles du fichier
  74. else :
  75. with open(file_path) as json_file:
  76. data = json.load(json_file)
  77. title = episode_info['serie_title']
  78. latest_season = int(episode_info['season '])
  79. latest_episode = int(episode_info['episode'])
  80. saved_season = int(data['season '])
  81. saved_episode = int(data['episode'])
  82. if latest_season > saved_season :
  83. message = 'Nouvel episode de ' + title + ' ! ' + 'S' + str(latest_season) + 'E' + str(latest_episode)
  84. send_message(message)
  85. #On supprime le fichier, et on le ré-écris avec les nouvelles informations.
  86. os.remove(file_path)
  87. create_file(file_path, episode_info)
  88. return
  89. if latest_season == saved_season:
  90. if latest_episode > saved_episode:
  91. message = 'Nouvel episode de ' + title + ' ! ' + 'S' + str(latest_season) + 'E' + str(latest_episode)
  92. send_message(message)
  93. os.remove(file_path)
  94. create_file(file_path, episode_info)
  95. return
  96. print("Aucun changement")
  97. return
  98. def create_file(file_path, episode_info):
  99. #Creation du fichier à partir des informations récupérées dans check_latest()
  100. with open(file_path, "w") as write_file:
  101. json.dump(episode_info, write_file)
  102. def get_title_only(thetvdb_id):
  103. API = create_api('info', thetvdb_id)
  104. if API == False :
  105. print("ERREUR DURANT LA CREATION DE L'API !")
  106. return
  107. request = requests.get(API)
  108. if str(request) != '<Response [200]>' :
  109. print("Mauvaise réponse de l'api ! ")
  110. return False
  111. info = request.json()
  112. data = info['show']
  113. title = data['title']
  114. return title
  115. def to_see(thetvdb_id):
  116. # Permet de dire qu'un episode est deja vu
  117. file_path = 'latest/' + thetvdb_id + '.json'
  118. with open(file_path) as json_file:
  119. data = json.load(json_file)
  120. print(data)
  121. if data[u'seen'] == False :
  122. message = data['serie_title'] + ' ! ' + '\n' + 'Episode: ' + str(data['episode']) + ' Saison:' + str(data['season ']) + '\n' + '\n'
  123. return message
  124. else :
  125. print(u"Vous etes à jour")
  126. return
  127. def main():
  128. #Only here for debug git
  129. login_beta()
  130. print(get_title_only('354198'))
  131. if __name__ == '__main__':
  132. main()