flexget.plugins.search_rss
Covered: 11 lines
Missed: 17 lines
Skipped 10 lines
Percent: 39 %
 1
import logging
 2
import urllib
 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."""
13
    def validator(self):
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')
24
        feed = Feed(manager, 'search_rss_feed', {})
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})
30
        entries = []
31
        for entry in rss_plugin.phase_handlers['input'](feed, config):
32
            if comparator.matches(entry['title']):
33
                entry['search_ratio'] = comparator.ratio()
34
                entries.append(entry)
35
        return entries
37
register_plugin(SearchRSS, 'search_rss', groups=['search'])