|
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # This program is dedicated to the public domain under the CC0 license.
- # Telegram - Betaseries
-
- import logging
- import requests
- import json
- from config import config, series
- import os
- # import time
- from os import path
- from telegram_api import send_message
-
-
-
- client_id = config['client_id']
- login = config['login']
- password = config['password']
-
-
- def login_beta():
- # 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
- global token
- API_auth = 'https://api.betaseries.com/members/auth'
- API_auth += '?client_id=' + client_id +'&login=' + login + '&password=' + password
- request = requests.post(API_auth)
- if str(request) != '<Response [200]>' :
- return False
- data = request.json()
- token = str(data['token'])
- return token
-
-
- def create_api(choice, thetvdb_id):
- #Cette fonction permet de créer l'api Betaseries (que nous allons interroger) à partir des informations dans config.py
- #La séparer dans une autre fonction permet de choisir QUELLE api créer et pour quel thetvdb_id
-
- 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
-
- if choice == 'latest' :
- base_url = 'https://api.betaseries.com/episodes/latest?'
- API_latest = base_url + 'token=' + token + '&client_id=' + str(client_id) + '&thetvdb_id=' + thetvdb_id
- return API_latest
- if choice == 'info' :
- base_url = 'https://api.betaseries.com/shows/display?'
- API_info = base_url + 'token=' + token + '&client_id=' + str(client_id) + '&thetvdb_id=' + str(thetvdb_id)
- return API_info
- if choice == 'seen':
- base_url = 'https://api.betaseries.com/episodes/watched?'
- API_seen = base_url + 'token=' + token + '&client_id=' + str(client_id) + '&id='
- return API_seen
- if choice == '2see' :
- base_url = 'https://api.betaseries.com/episodes/list?'
- API_2see = base_url + 'token=' + str(token) + '&client_id=' + str(client_id) + '&showsLimit=10&limit=1'
- #API_2see = base_url + 'token=' + str(token) + '&client_id=' + str(client_id) + '&limit=1'
- return API_2see
-
- return False
-
- def check_latest(thetvdb_id):
- # 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]
- API = create_api('latest', thetvdb_id)
- if API == False :
- print("ERREUR DURANT LA CREATION DE L'API !")
- return
-
- request = requests.get(API)
- if str(request) != '<Response [200]>' :
- print("Mauvaise réponse de l'api !(Check_Latest) ")
- return False
- show = request.json()
- episode = show['episode']
-
- title = episode['show']
- id = episode['id']
- user = episode['user']
-
- if path.exists('latest') == False :
- print("Le dossier 'latest' n'existe pas, creez le")
-
- #On créé le dictionnaire contenant les informations de l'épisode
- episode_info = {
- "serie_title" : title['title'],
- "season " : episode['season'],
- "episode" : episode['episode'],
- "id" : episode['id'],
- "seen" : user['seen']
- }
-
- #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
- file_path = 'latest/' + thetvdb_id + '.json'
-
-
- # Si le fichier n'existe pas. Nous n'avons rien à comparer : Par définition nous sauvegardons les informations.
-
- if path.exists(file_path) == False :
- create_file(file_path, episode_info)
-
- # Si le fichier existe. Nous comparons les informations reçues de l'API avec celles du fichier
- else :
- with open(file_path) as json_file:
- data = json.load(json_file)
-
- title = episode_info['serie_title']
- latest_season = int(episode_info['season '])
- latest_episode = int(episode_info['episode'])
-
- saved_season = int(data['season '])
- saved_episode = int(data['episode'])
-
-
- if latest_season > saved_season :
- message = 'Nouvel episode de ' + title + ' ! ' + 'S' + str(latest_season) + 'E' + str(latest_episode)
- send_message(message)
- #On supprime le fichier, et on le ré-écris avec les nouvelles informations.
- os.remove(file_path)
- create_file(file_path, episode_info)
- return
-
- if latest_season == saved_season:
- if latest_episode > saved_episode:
- message = 'Nouvel episode de ' + title + ' ! ' + 'S' + str(latest_season) + 'E' + str(latest_episode)
- send_message(message)
- os.remove(file_path)
- create_file(file_path, episode_info)
- return
-
- if data['seen'] == False :
- print("Vous n'avez pas vu le dernier episode de cette series : ", get_title_only(thetvdb_id))
- os.remove(file_path)
- create_file(file_path, episode_info)
- return
-
- def create_file(file_path, episode_info):
- #Creation du fichier à partir des informations récupérées dans check_latest()
- with open(file_path, "w") as write_file:
- json.dump(episode_info, write_file)
-
-
- def get_title_only(thetvdb_id):
- API = create_api('info', thetvdb_id)
- if API == False :
- print("ERREUR DURANT LA CREATION DE L'API !")
- return
- request = requests.get(API)
- if str(request) != '<Response [200]>' :
- print("Mauvaise réponse de l'api ! (Get_title) ")
- return False
-
- info = request.json()
- data = info['show']
- title = data['title']
- return title
-
-
- def to_see(thetvdb_id):
- # Permet de dire les episodes dejà vu A PARTIR des fichiers
- file_path = 'latest/' + thetvdb_id + '.json'
- with open(file_path) as json_file:
- data = json.load(json_file)
-
- if data[u'seen'] == False :
- message = data['serie_title'] + ' ! ' + '\n' + 'Episode: ' + str(data['episode']) + ' Saison:' + str(data['season ']) + '\n' + '\n'
- return message
- print(u"Vous etes à jour")
- return False
-
- def seen(thetvdb_id):
- # Permet de mettre un episode en 'vu' sur betaseries
- print(u"Ajout d'un episode à la liste des vu")
- file_path = 'latest/' + thetvdb_id + '.json'
-
- with open(file_path) as json_file:
- data = json.load(json_file)
- if data['seen'] == True :
- send_message('Episode deja vu')
- return
- API = create_api('seen', None)
- API += str(data['id'])
- print(API)
- request = requests.post(API)
- if str(request) == '<Response [400]>' :
- send_message(u"Impossible de marquer l'episode comme vu(déjà vu?)")
- print(request)
- return
- send_message('Done !')
- return
-
- def get_episode_code(thetvdb_id):
- file_path = 'latest/' + thetvdb_id + '.json'
- with open(file_path) as json_file:
- data = json.load(json_file)
- code = 'S' + str(data['season ']) + 'E' + str(data['episode'])
- return code
-
-
-
- def get_ep_code_series(fichier):
- with open(fichier) as json_file:
- data = json.load(json_file)
- name = data['title'] + ' | ' + 'S' + str(data['season']) + 'E' + str(data['episode'])
-
- return name
-
- def what_2see():
- API = create_api("2see", None)
- request = requests.get(API)
- request = request.json()
- request = request['shows']
-
-
- json = request[0]
- message = ''
- liste = []
- for i in range(len(request)):
- json = request[i]
- unseen = json['unseen']
- unseen = unseen[0]
-
- message += json['title'] + "\n Code : " + unseen['code'] + '\n \n'
-
- file_path = 'series/' + str(json['thetvdb_id']) + '.json'
- serie_info = {
- 'title' : json['title'],
- 'thetvdb' : str(json['thetvdb_id']),
- 'season' : unseen['season'],
- 'episode' : unseen['episode'],
- 'id' : unseen['id']}
-
-
- liste.append(str(json['thetvdb_id']))
-
- if path.exists(file_path) == False :
- create_file(file_path, serie_info)
- else :
- os.remove(file_path)
- create_file(file_path, serie_info)
-
- if path.exists('cache_to_see.json') == False :
- create_file('cache_to_see.json', liste)
- else :
- os.remove('cache_to_see.json')
- create_file('cache_to_see.json', liste)
- return message
-
-
-
- def main():
- path = "series/102261.json"
- print(get_ep_code_series(path))
-
-
- if __name__ == '__main__':
- main()
-
-
-
-
|