Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

267 linhas
8.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, series
  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_latest = base_url + 'token=' + token + '&client_id=' + str(client_id) + '&thetvdb_id=' + thetvdb_id
  34. return API_latest
  35. if choice == 'info' :
  36. base_url = 'https://api.betaseries.com/shows/display?'
  37. API_info = base_url + 'token=' + token + '&client_id=' + str(client_id) + '&thetvdb_id=' + str(thetvdb_id)
  38. return API_info
  39. if choice == 'seen':
  40. base_url = 'https://api.betaseries.com/episodes/watched?'
  41. API_seen = base_url + 'token=' + token + '&client_id=' + str(client_id) + '&id='
  42. return API_seen
  43. if choice == '2see' :
  44. base_url = 'https://api.betaseries.com/episodes/list?'
  45. API_2see = base_url + 'token=' + str(token) + '&client_id=' + str(client_id) + '&showsLimit=10&limit=1'
  46. #API_2see = base_url + 'token=' + str(token) + '&client_id=' + str(client_id) + '&limit=1'
  47. return API_2see
  48. return False
  49. def check_latest(thetvdb_id):
  50. # 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]
  51. API = create_api('latest', thetvdb_id)
  52. if API == False :
  53. print("ERREUR DURANT LA CREATION DE L'API !")
  54. return
  55. request = requests.get(API)
  56. if str(request) != '<Response [200]>' :
  57. print("Mauvaise réponse de l'api !(Check_Latest) ")
  58. return False
  59. show = request.json()
  60. episode = show['episode']
  61. title = episode['show']
  62. id = episode['id']
  63. user = episode['user']
  64. if path.exists('latest') == False :
  65. print("Le dossier 'latest' n'existe pas, creez le")
  66. #On créé le dictionnaire contenant les informations de l'épisode
  67. episode_info = {
  68. "serie_title" : title['title'],
  69. "season " : episode['season'],
  70. "episode" : episode['episode'],
  71. "id" : episode['id'],
  72. "seen" : user['seen']
  73. }
  74. #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
  75. file_path = 'latest/' + thetvdb_id + '.json'
  76. # Si le fichier n'existe pas. Nous n'avons rien à comparer : Par définition nous sauvegardons les informations.
  77. if path.exists(file_path) == False :
  78. create_file(file_path, episode_info)
  79. # Si le fichier existe. Nous comparons les informations reçues de l'API avec celles du fichier
  80. else :
  81. with open(file_path) as json_file:
  82. data = json.load(json_file)
  83. title = episode_info['serie_title']
  84. latest_season = int(episode_info['season '])
  85. latest_episode = int(episode_info['episode'])
  86. saved_season = int(data['season '])
  87. saved_episode = int(data['episode'])
  88. if latest_season > saved_season :
  89. message = 'Nouvel episode de ' + title + ' ! ' + 'S' + str(latest_season) + 'E' + str(latest_episode)
  90. send_message(message)
  91. #On supprime le fichier, et on le ré-écris avec les nouvelles informations.
  92. os.remove(file_path)
  93. create_file(file_path, episode_info)
  94. return
  95. if latest_season == saved_season:
  96. if latest_episode > saved_episode:
  97. message = 'Nouvel episode de ' + title + ' ! ' + 'S' + str(latest_season) + 'E' + str(latest_episode)
  98. send_message(message)
  99. os.remove(file_path)
  100. create_file(file_path, episode_info)
  101. return
  102. if data['seen'] == False :
  103. print("Vous n'avez pas vu le dernier episode de cette series : ", get_title_only(thetvdb_id))
  104. os.remove(file_path)
  105. create_file(file_path, episode_info)
  106. return
  107. def create_file(file_path, episode_info):
  108. #Creation du fichier à partir des informations récupérées dans check_latest()
  109. with open(file_path, "w") as write_file:
  110. json.dump(episode_info, write_file)
  111. def get_title_only(thetvdb_id):
  112. API = create_api('info', thetvdb_id)
  113. if API == False :
  114. print("ERREUR DURANT LA CREATION DE L'API !")
  115. return
  116. request = requests.get(API)
  117. if str(request) != '<Response [200]>' :
  118. print("Mauvaise réponse de l'api ! (Get_title) ")
  119. return False
  120. info = request.json()
  121. data = info['show']
  122. title = data['title']
  123. return title
  124. def to_see(thetvdb_id):
  125. # Permet de dire les episodes dejà vu A PARTIR des fichiers
  126. file_path = 'latest/' + thetvdb_id + '.json'
  127. with open(file_path) as json_file:
  128. data = json.load(json_file)
  129. if data[u'seen'] == False :
  130. message = data['serie_title'] + ' ! ' + '\n' + 'Episode: ' + str(data['episode']) + ' Saison:' + str(data['season ']) + '\n' + '\n'
  131. return message
  132. print(u"Vous etes à jour")
  133. return False
  134. def seen(thetvdb_id, mode):
  135. # Permet de mettre un episode en 'vu' sur betaseries
  136. print(u"Ajout d'un episode à la liste des vu")
  137. API = create_api('seen', None)
  138. if mode == 'latest' :
  139. file_path = 'latest/' + thetvdb_id + '.json'
  140. with open(file_path) as json_file:
  141. data = json.load(json_file)
  142. if data['seen'] == True :
  143. send_message('Episode deja vu')
  144. return
  145. API += str(data['id'])
  146. if mode == 'watched' :
  147. API += str(thetvdb_id)
  148. print(API)
  149. request = requests.post(API)
  150. if str(request) == '<Response [400]>' :
  151. send_message(u"Impossible de marquer l'episode comme vu(déjà vu?)")
  152. print(request)
  153. return
  154. send_message('Done !')
  155. return
  156. def get_episode_code(thetvdb_id):
  157. file_path = 'latest/' + thetvdb_id + '.json'
  158. with open(file_path) as json_file:
  159. data = json.load(json_file)
  160. code = 'S' + str(data['season ']) + 'E' + str(data['episode'])
  161. return code
  162. def get_ep_code_series(fichier):
  163. with open(fichier) as json_file:
  164. data = json.load(json_file)
  165. name = 'S' + str(data['season']) + 'E' + str(data['episode']) + ' ' + data['title']
  166. return name
  167. def what_2see():
  168. API = create_api("2see", None)
  169. request = requests.get(API)
  170. request = request.json()
  171. request = request['shows']
  172. json = request[0]
  173. message = ''
  174. liste = []
  175. for i in range(len(request)):
  176. json = request[i]
  177. unseen = json['unseen']
  178. unseen = unseen[0]
  179. message += json['title'] + "\n Code : " + unseen['code'] + '\n \n'
  180. file_path = 'series/' + str(json['thetvdb_id']) + '.json'
  181. serie_info = {
  182. 'title' : json['title'],
  183. 'thetvdb' : str(json['thetvdb_id']),
  184. 'season' : unseen['season'],
  185. 'episode' : unseen['episode'],
  186. 'id' : unseen['id']}
  187. liste.append(str(json['thetvdb_id']))
  188. if path.exists(file_path) == False :
  189. create_file(file_path, serie_info)
  190. else :
  191. os.remove(file_path)
  192. create_file(file_path, serie_info)
  193. if path.exists('cache_to_see.json') == False :
  194. create_file('cache_to_see.json', liste)
  195. else :
  196. os.remove('cache_to_see.json')
  197. create_file('cache_to_see.json', liste)
  198. return message
  199. def main():
  200. print("Nothing to do here")
  201. if __name__ == '__main__':
  202. main()