<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def do_exec(config, config_dir):
 """ CLI action "process the feed from specified configuration". """

    if not os.path.exists(config_dir):
        print "Configuration '{}' does not exist.".format(config)
        exit(1)

    print "The parser for '{}' config has been initialized.".format(config)

    config_file = os.path.join(config_dir, 'config')
    with open(config_file, 'r') as f:
        config_data = json.load(f)

    url = config_data['url']
    torrent_dir = config_data['torrent_dir']
    ensure_dir(torrent_dir)

    filters_file = os.path.join(config_dir, 'filter')
    filters = read_file(filters_file)

    blacklist_file = os.path.join(config_dir, 'blacklist')
    blacklist = read_file(blacklist_file)

    print "Fetching URL {}".format(url)
    r = requests.get(url)
    if r.status_code != 200:
        print "Failed to fetch RSS feed."

    xml = r.text.encode('utf-8')
    parser = etree.XMLParser(ns_clean=True, recover=True, encoding='utf-8')
    tree  = etree.fromstring(xml, parser)
    items = tree.xpath('//item')
    downloaded = 0
    for e in items:
        e_title = e.xpath('title')[0].text
        e_link = e.xpath('link')[0].text
        if not drop_it(e_title, filters, blacklist):
            downloaded += 1
            target_file = os.path.join(torrent_dir, e_title + '.torrent')
            r = requests.get(e_link, stream=True)
            with open(target_file, 'wb') as f:
                for chunk in r.iter_content(4096):
                    f.write(chunk)

    print "Items found: {}, items downloaded: {}."\
        .format(len(items), downloaded)