2
from flexget.feed import Entry
3
from flexget.plugin import *
4
from flexget.utils.soup import get_soup
5
from flexget.utils.cached_input import cached
6
from BeautifulSoup import NavigableString
7
from flexget.utils.tools import urlopener
9
log = logging.getLogger('scenereleases')
12
class InputScenereleases:
14
Uses scenereleases.info category url as input.
18
scenereleases: http://scenereleases.info/category/movies/movies-dvd-rip
22
from flexget import validator
23
return validator.factory('url')
25
def parse_site(self, url, feed):
26
"""Parse configured url and return releases array"""
28
page = urlopener(url, log)
32
for entry in soup.findAll('div', attrs={'class': 'entry'}):
34
title = entry.find('h2')
36
log.debug('No h2 entrytitle')
38
release['title'] = title.a.contents[0].strip()
40
log.debug('Processing title %s' % (release['title']))
42
for link in entry.findAll('a'):
43
# no content in the link
46
link_name = link.contents[0]
49
if not isinstance(link_name, NavigableString):
51
link_name = link_name.strip().lower()
52
if link.has_key('href'):
53
link_href = link['href']
56
log.debug('found link %s -> %s' % (link_name, link_href))
58
if link_name.lower() == 'imdb':
59
log.debug('found imdb link %s' % link_href)
60
release['imdb_url'] = link_href
62
# test if entry with this url would be rewritable by known plugins (ie. downloadable)
64
temp['title'] = release['title']
65
temp['url'] = link_href
66
urlrewriting = get_plugin_by_name('urlrewriting')
67
if urlrewriting['instance'].url_rewritable(feed, temp):
68
release['url'] = link_href
69
log.debugall('--> accepting %s (resolvable)' % link_href)
71
log.debugall('<-- ignoring %s (non-resolvable)' % link_href)
73
# reject if no torrent link
74
if not 'url' in release:
75
from flexget.utils.log import log_once
76
log_once('%s skipped due to missing or unsupported (unresolvable) download link' % (release['title']), log)
78
releases.append(release)
82
@cached('scenereleases', 'url')
84
def on_feed_input(self, feed):
85
releases = self.parse_site(feed.get_input_url('scenereleases'), feed)
87
for release in releases:
88
# construct entry from release
91
def apply_field(d_from, d_to, f):
94
return # None values are not wanted!
97
for field in ['title', 'url', 'imdb_url', 'imdb_score', 'imdb_votes']:
98
apply_field(release, entry, field)
100
feed.entries.append(entry)
102
register_plugin(InputScenereleases, 'scenereleases')