Skip to content

Instantly share code, notes, and snippets.

@pbaja
Last active May 15, 2016 15:33
Show Gist options
  • Save pbaja/dad2e6714bae4e40c69d8ccb5c1550fc to your computer and use it in GitHub Desktop.
Save pbaja/dad2e6714bae4e40c69d8ccb5c1550fc to your computer and use it in GitHub Desktop.
Checking for new movie episodes
#!/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