您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

betaseries.py 7.1 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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. 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. print("Vous n'avez pas vu le dernier episode de cette series : ", get_title_only(thetvdb_id))
  100. os.remove(file_path)
  101. create_file(file_path, episode_info)
  102. return
  103. def create_file(file_path, episode_info):
  104. #Creation du fichier à partir des informations récupérées dans check_latest()
  105. with open(file_path, "w") as write_file:
  106. json.dump(episode_info, write_file)
  107. def get_title_only(thetvdb_id):
  108. API = create_api('info', thetvdb_id)
  109. if API == False :
  110. print("ERREUR DURANT LA CREATION DE L'API !")
  111. return
  112. request = requests.get(API)
  113. if str(request) != '<Response [200]>' :
  114. print("Mauvaise réponse de l'api ! (Get_title) ")
  115. return False
  116. info = request.json()
  117. data = info['show']
  118. title = data['title']
  119. return title
  120. def to_see(thetvdb_id):
  121. # Permet de dire les episodes dejà vu A PARTIR des fichiers
  122. file_path = 'latest/' + thetvdb_id + '.json'
  123. with open(file_path) as json_file:
  124. data = json.load(json_file)
  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. print(u"Vous etes à jour")
  129. return False
  130. def seen(thetvdb_id):
  131. # Permet de mettre un episode en 'vu' sur betaseries
  132. print(u"Ajout d'un episode à la liste des vu")
  133. file_path = 'latest/' + thetvdb_id + '.json'
  134. with open(file_path) as json_file:
  135. data = json.load(json_file)
  136. if data['seen'] == True :
  137. send_message('Episode deja vu')
  138. return
  139. API = create_api('seen', None)
  140. API += str(data['id'])
  141. print(API)
  142. request = requests.post(API)
  143. if str(request) == '<Response [400]>' :
  144. send_message(u"Impossible de marquer l'episode comme vu(déjà vu?)")
  145. print(request)
  146. return
  147. send_message('Done !')
  148. return
  149. def get_episode_code(thetvdb_id):
  150. file_path = 'latest/' + thetvdb_id + '.json'
  151. with open(file_path) as json_file:
  152. data = json.load(json_file)
  153. code = 'S' + str(data['season ']) + 'E' + str(data['episode'])
  154. return code
  155. def main():
  156. #Only here for debug git
  157. for i in range(len(series)):
  158. id = series[i]
  159. print(get_episode_code(id))
  160. if __name__ == '__main__':
  161. main()