3
from flexget.feed import Feed
4
from flexget.plugin import register_plugin, get_plugin_by_name
6
log = logging.getLogger('search_rss')
9
class SearchRSS(object):
10
"""A generic search plugin that can use rss based search feeds. Configure it like rss
11
plugin, but include {{{search_term}}} in the url where the search term should go."""
14
rss_plugin = get_plugin_by_name('rss')
15
return rss_plugin.instance.validator()
17
def search(self, query, comparator, config=None):
18
from flexget.utils.template import environment
19
from flexget.manager import manager
20
comparator.set_seq1(query)
21
search_string = urllib.quote(comparator.search_string().encode('utf-8'))
22
rss_plugin = get_plugin_by_name('rss')
23
# Create a fake feed to pass to the rss plugin input handler
24
feed = Feed(manager, 'search_rss_feed', {})
25
# Use a copy of the config, so we don't overwrite jinja url when filling in search term
26
config = rss_plugin.instance.build_config(config).copy()
27
template = environment.from_string(config['url'])
28
config['url'] = template.render({'search_term': search_string})
29
# TODO: capture some other_fields to try to find seed/peer/content_size numbers?
31
for entry in rss_plugin.phase_handlers['input'](feed, config):
32
if comparator.matches(entry['title']):
33
entry['search_ratio'] = comparator.ratio()
37
register_plugin(SearchRSS, 'search_rss', groups=['search'])