Last active
May 15, 2016 15:33
-
-
Save pbaja/dad2e6714bae4e40c69d8ccb5c1550fc to your computer and use it in GitHub Desktop.
Checking for new movie episodes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python3 | |
import tvdb_api, yaml, sys, telegram, delayer | |
from datetime import datetime, timedelta | |
''' | |
''' | |
class Core(object): | |
def __init__(self): | |
# Load series from file | |
try: | |
self.file = yaml.load(open("series.yml","r")) | |
except Exception as e: | |
print(e) | |
sys.exit(1) | |
# Reading config.yml | |
try: | |
self.config = yaml.load(open("config.yml","r")) | |
except Exception as e: | |
print(e) | |
sys.exit(1) | |
def check(self): | |
# Initialize TelegramBot | |
self.bot = telegram.Bot(token=self.config["telegram_token"]) | |
self.last_update = 0 | |
self.chat_id = self.config["telegram_chatid"] | |
# Initialize TV API | |
self.tv = tvdb_api.Tvdb(language="en",apikey=self.config["tvdb_apikey"]) | |
# Get show | |
for serie in self.file["series"]: | |
if not "id" in serie: | |
show = self.tv[serie["name"]] | |
serie["id"] = int(show["id"]) | |
else: | |
show = self.tv[serie['id']] | |
if serie["name"] != show["seriesname"]: | |
serie["name"] = show["seriesname"] | |
print("Checking {}: ".format(serie["name"]),end="") | |
# Get lastest aired season and episode | |
episodes = [] | |
latest_episode = None | |
for s in show.values(): | |
for e in s.values(): | |
if datetime.strptime(e["firstaired"], '%Y-%m-%d')+timedelta(days=self.config["wait_days"]) <= datetime.now(): | |
seasonnumber = int(e['seasonnumber']) | |
episodenumber = int(e['episodenumber']) | |
if latest_episode == None or episodenumber*seasonnumber > int(latest_episode["seasonnumber"])*int(latest_episode["episodenumber"]): | |
latest_episode = e | |
episodes.append(e) | |
# Get watched season and episode | |
if not "season" in serie: serie["season"] = int(latest_episode["seasonnumber"]) | |
if not "episode" in serie: serie["episode"] = int(latest_episode["episodenumber"]) | |
episode = show[serie["season"]][serie["episode"]] | |
# Check if new episodes are available | |
current = int(episode["episodenumber"])*int(episode["seasonnumber"]) | |
latest = int(latest_episode["episodenumber"])*int(latest_episode["seasonnumber"]) | |
if latest > current: | |
# New episode available! | |
name = show["seriesname"] | |
se = latest_episode["seasonnumber"] | |
ep = latest_episode["episodenumber"] | |
epn = latest_episode["episodename"] | |
msg = "Nowy odcinek {}!\n".format(name) | |
msg += "Sezon: {} Odcinek: {} Nazwa: {}\n".format(se, ep, epn) | |
msg += latest_episode["filename"]+"\n" | |
self.bot.sendMessage(chat_id=chat_id, text=msg) | |
print("New episode!") | |
# Set as watched | |
serie["season"] = int(latest_episode["seasonnumber"]) | |
serie["episode"] = int(latest_episode['episodenumber']) | |
else: | |
print("No new episodes") | |
def save(self): | |
yaml.dump(self.file, open("series.yml","w"), default_flow_style=False) | |
lastupd = open("lastupd.txt","w") | |
lastupd.write(str(datetime.now())) | |
lastupd.close() | |
c = Core() | |
if len(sys.argv) > 1: | |
if sys.argv[1] == "add": | |
name = " ".join(sys.argv[2:]) | |
c.file["series"].append({"name": name}) | |
c.save() | |
print("Added {}".format(name)) | |
elif sys.argv[1] == "list": | |
for serie in c.file["series"]: | |
print(serie["name"]) | |
elif sys.argv[1] == "remove": | |
name = " ".join(sys.argv[2:]) | |
for index, serie in enumerate(c.file["series"]): | |
if serie["name"] == name: | |
del c.file["series"][index] | |
print("Removed {}".format(name)) | |
c.save() | |
break | |
else: | |
print("Not found") | |
else: | |
c.check() | |
c.save() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment