Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

174 строки
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. from os import path
  11. from telegram_api import send_message
  12. client_id = config['client_id']
  13. login = config['login']
  14. password = config['password']
  15. def login_beta():
  16. # 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
  17. global token
  18. API_auth = 'https://api.betaseries.com/members/auth'
  19. API_auth += '?client_id=' + client_id +'&login=' + login + '&password=' + password
  20. request = requests.post(API_auth)
  21. if str(request) != '<Response [200]>' :
  22. return False
  23. data = request.json()
  24. token = str(data['token'])
  25. return token
  26. def create_api(choice, thetvdb_id):
  27. #Cette fonction permet de créer l'api Betaseries (que nous allons interroger) à partir des informations dans config.py
  28. #La séparer dans une autre fonction permet de choisir QUELLE api créer et pour quel thetvdb_id
  29. 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
  30. if choice == 'latest' :
  31. base_url = 'https://api.betaseries.com/episodes/latest?'
  32. API = base_url + 'token=' + token + '&client_id=' + client_id + '&thetvdb_id=' + thetvdb_id
  33. return API
  34. if choice == 'info' :
  35. base_url = 'https://api.betaseries.com/shows/display?'
  36. API = base_url + 'token=' + token + '&client_id=' + client_id + '&thetvdb_id=' + thetvdb_id
  37. return API
  38. if choice == 'seen':
  39. base_url = 'https://api.betaseries.com/shows/display?'
  40. return False
  41. def check_latest(thetvdb_id):
  42. # 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]
  43. API = create_api('latest', thetvdb_id)
  44. if API == False :
  45. print("ERREUR DURANT LA CREATION DE L'API !")
  46. return
  47. request = requests.get(API)
  48. if str(request) != '<Response [200]>' :
  49. print("Mauvaise réponse de l'api ! ")
  50. return False
  51. show = request.json()
  52. episode = show['episode']
  53. title = episode['show']
  54. id = episode['id']
  55. user = episode['user']
  56. if path.exists('latest') == False :
  57. print("Le dossier 'latest' n'existe pas, creez le")
  58. #On créé le dictionnaire contenant les informations de l'épisode
  59. episode_info = {
  60. "serie_title" : title['title'],
  61. "season " : episode['season'],
  62. "episode" : episode['episode'],
  63. "id" : title['id'],
  64. "seen" : user['seen']
  65. }
  66. #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
  67. file_path = ''
  68. file_path = 'latest/' + thetvdb_id + '.json'
  69. # Si le fichier n'existe pas. Nous n'avons rien à comparer : Par définition nous sauvegardons les informations.
  70. if path.exists(file_path) == False :
  71. create_file(file_path, episode_info)
  72. # Si le fichier existe. Nous comparons les informations reçues de l'API avec celles du fichier
  73. else :
  74. with open(file_path) as json_file:
  75. data = json.load(json_file)
  76. title = episode_info['serie_title']
  77. latest_season = int(episode_info['season '])
  78. latest_episode = int(episode_info['episode'])
  79. saved_season = int(data['season '])
  80. saved_episode = int(data['episode'])
  81. if latest_season > saved_season :
  82. message = 'Nouvel episode de ' + title + ' ! ' + 'S' + str(latest_season) + 'E' + str(latest_episode)
  83. send_message(message)
  84. #On supprime le fichier, et on le ré-écris avec les nouvelles informations.
  85. os.remove(file_path)
  86. create_file(file_path, episode_info)
  87. return
  88. if latest_season == saved_season:
  89. if latest_episode > saved_episode:
  90. message = 'Nouvel episode de ' + title + ' ! ' + 'S' + str(latest_season) + 'E' + str(latest_episode)
  91. send_message(message)
  92. os.remove(file_path)
  93. #create_file(file_path, episode_info)
  94. return
  95. print("Aucun changement")
  96. return
  97. def create_file(file_path, episode_info):
  98. #Creation du fichier à partir des informations récupérées dans check_latest()
  99. with open(file_path, "w") as write_file:
  100. json.dump(episode_info, write_file)
  101. def get_title_only(thetvdb_id):
  102. API = create_api('info', thetvdb_id)
  103. if API == False :
  104. print("ERREUR DURANT LA CREATION DE L'API !")
  105. return
  106. request = requests.get(API)
  107. if str(request) != '<Response [200]>' :
  108. print("Mauvaise réponse de l'api ! ")
  109. return False
  110. info = request.json()
  111. data = info['show']
  112. title = data['title']
  113. return title
  114. def to_see(thetvdb_id):
  115. # Permet de dire qu'un episode est deja vu
  116. file_path = 'latest/' + thetvdb_id + '.json'
  117. with open(file_path) as json_file:
  118. data = json.load(json_file)
  119. print(data)
  120. if data[u'seen'] == False :
  121. message = data['serie_title'] + ' ! ' + '\n' + 'Episode: ' + str(data['episode']) + ' Saison:' + str(data['season ']) + '\n' + '\n'
  122. return message
  123. else :
  124. print(u"Vous etes à jour")
  125. return
  126. def main():
  127. #Only here for debug
  128. login_beta()
  129. print(get_title_only('354198'))
  130. if __name__ == '__main__':
  131. main()