Source code for flexget.plugins.input.myepisodes_list
import re
from itertools import chain
from loguru import logger
from requests import RequestException
from flexget import plugin
from flexget.entry import Entry
from flexget.event import event
from flexget.utils.cached_input import cached
from flexget.utils.soup import get_soup
logger = logger.bind(name='myepisodes_list')
URL = 'http://www.myepisodes.com/'
[docs]
class MyEpisodesList:
"""Creates an entry for each item in your myepisodes.com show list.
Syntax:
myepisodes_list:
username: <value>
password: <value>
strip_dates: <yes|no>
include_ignored: <yes|no>
Options username and password are required.
"""
schema = {
'type': 'object',
'properties': {
'username': {'type': 'string'},
'password': {'type': 'string'},
'strip_dates': {'type': 'boolean', 'default': False},
'include_ignored': {'type': 'boolean', 'default': False},
},
'required': ['username', 'password'],
'additionalProperties': False,
}
@cached('myepisodes_list')
@plugin.internet(logger)
def on_task_input(self, task, config):
if not task.requests.cookies:
username = config['username']
password = config['password']
logger.debug('Logging in to {} ...', URL)
params = {'username': username, 'password': password, 'action': 'Login'}
try:
loginsrc = task.requests.post(URL + 'login.php', data=params)
if 'login' in loginsrc.url:
raise plugin.PluginWarning(
(
'Login to myepisodes.com failed, please check '
'your account data or see if the site is down.'
),
logger,
)
except RequestException as e:
raise plugin.PluginError(f'Error logging in to myepisodes: {e}')
page = task.requests.get(URL + 'myshows/manage/').content
try:
soup = get_soup(page)
except Exception as e:
raise plugin.PluginError(f'Unable to parse myepisodes.com page: {e}')
entries = []
def show_list(select_id):
return soup.find('select', {'id': select_id}).findAll('option')
options = show_list('shows')
if config['include_ignored']:
options = chain(options, show_list('ignored_shows'))
for option in options:
name = option.text
if config.get('strip_dates'):
# Remove year from end of name if present
name = re.sub(r'\s+\(\d{4}\)$', '', name)
showid = option.get('value')
url = f'{URL}views.php?type=epsbyshow&showid={showid}'
entry = Entry()
entry['title'] = name
entry['url'] = url
entry['series_name'] = name
entry['myepisodes_id'] = showid
if entry.isvalid():
entries.append(entry)
else:
logger.debug('Invalid entry created? {}', entry)
if not entries:
logger.warning(
'No shows found on myepisodes.com list. Maybe you need to add some first?'
)
return entries
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(MyEpisodesList, 'myepisodes_list', api_ver=2, interfaces=['task'])