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.

197 lines
6.5 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/episodes/watched?'
  41. API = base_url + 'token=' + token + '&client_id=' + client_id + '&id='
  42. return API
  43. return False
  44. def check_latest(thetvdb_id):
  45. # 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]
  46. API = create_api('latest', thetvdb_id)
  47. if API == False :
  48. print("ERREUR DURANT LA CREATION DE L'API !")
  49. return
  50. request = requests.get(API)
  51. if str(request) != '<Response [200]>' :
  52. print("Mauvaise réponse de l'api !(Check_Latest) ")
  53. return False
  54. show = request.json()
  55. episode = show['episode']
  56. title = episode['show']
  57. id = episode['id']
  58. user = episode['user']
  59. if path.exists('latest') == False :
  60. print("Le dossier 'latest' n'existe pas, creez le")
  61. #On créé le dictionnaire contenant les informations de l'épisode
  62. episode_info = {
  63. "serie_title" : title['title'],
  64. "season " : episode['season'],
  65. "episode" : episode['episode'],
  66. "id" : episode['id'],
  67. "seen" : user['seen']
  68. }
  69. #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
  70. file_path = ''
  71. file_path = 'latest/' + thetvdb_id + '.json'
  72. # Si le fichier n'existe pas. Nous n'avons rien à comparer : Par définition nous sauvegardons les informations.
  73. if path.exists(file_path) == False :
  74. create_file(file_path, episode_info)
  75. # Si le fichier existe. Nous comparons les informations reçues de l'API avec celles du fichier
  76. else :
  77. with open(file_path) as json_file:
  78. data = json.load(json_file)
  79. title = episode_info['serie_title']
  80. latest_season = int(episode_info['season '])
  81. latest_episode = int(episode_info['episode'])
  82. saved_season = int(data['season '])
  83. saved_episode = int(data['episode'])
  84. if latest_season > saved_season :
  85. message = 'Nouvel episode de ' + title + ' ! ' + 'S' + str(latest_season) + 'E' + str(latest_episode)
  86. send_message(message)
  87. #On supprime le fichier, et on le ré-écris avec les nouvelles informations.
  88. os.remove(file_path)
  89. create_file(file_path, episode_info)
  90. return
  91. if latest_season == saved_season:
  92. if latest_episode > saved_episode:
  93. message = 'Nouvel episode de ' + title + ' ! ' + 'S' + str(latest_season) + 'E' + str(latest_episode)
  94. send_message(message)
  95. os.remove(file_path)
  96. create_file(file_path, episode_info)
  97. return
  98. if data['seen'] == False :
  99. os.remove(file_path)
  100. create_file(file_path, episode_info)
  101. return
  102. def create_file(file_path, episode_info):
  103. #Creation du fichier à partir des informations récupérées dans check_latest()
  104. with open(file_path, "w") as write_file:
  105. json.dump(episode_info, write_file)
  106. def get_title_only(thetvdb_id):
  107. API = create_api('info', thetvdb_id)
  108. if API == False :
  109. print("ERREUR DURANT LA CREATION DE L'API !")
  110. return
  111. request = requests.get(API)
  112. if str(request) != '<Response [200]>' :
  113. print("Mauvaise réponse de l'api ! (Get_title) ")
  114. return False
  115. info = request.json()
  116. data = info['show']
  117. title = data['title']
  118. return title
  119. def to_see(thetvdb_id):
  120. # Permet de dire les episodes dejà vu A PARTIR des fichiers
  121. file_path = 'latest/' + thetvdb_id + '.json'
  122. with open(file_path) as json_file:
  123. data = json.load(json_file)
  124. print(data)
  125. if data[u'seen'] == False :
  126. message = data['serie_title'] + ' ! ' + '\n' + 'Episode: ' + str(data['episode']) + ' Saison:' + str(data['season ']) + '\n' + '\n'
  127. return message
  128. else :
  129. print(u"Vous etes à jour")
  130. return
  131. def seen(thetvdb_id):
  132. # Permet de mettre un episode en 'vu' sur betaseries
  133. print(u"Ajout d'un episode à la liste des vu")
  134. file_path = 'latest/' + thetvdb_id + '.json'
  135. with open(file_path) as json_file:
  136. data = json.load(json_file)
  137. if data['seen'] == True :
  138. send_message('Episode deja vu')
  139. return
  140. API = create_api('seen', None)
  141. API += str(data['id'])
  142. print(API)
  143. def main():
  144. #Only here for debug git
  145. login_beta()
  146. print(get_title_only('354198'))
  147. if __name__ == '__main__':
  148. main()