public
Description: Download NZBs from an RSS feed
Homepage: http://www.neohippie.net/blog/tags/rssnzb/
Clone URL: git://github.com/synack/rssnzb.git
rssnzb / ssnzb.py
100755 63 lines (51 sloc) 1.836 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env python
# Copyright (c) 2008, Jeremy Grosser
# Open source under New BSD License. See LICENSE file for details
 
# Where the patterns and downloaded files are stored
RSSNZB_DIR = '/etc/rssnzb'
 
# Where to put downloaded NZB files
DOWNLOAD_DIR = '/mnt/media/upload'
 
from urllib import urlretrieve
from xmlrpclib import ServerProxy
from time import sleep
import feedparser
import simplejson as json
import re
from pprint import pprint
 
dl = open('%s/downloaded' % RSSNZB_DIR, 'r')
downloaded = []
for line in dl.readlines():
    downloaded.append(line[:-1])
dl.close()
 
def download_nzbs(urls, hella):
    entries = []
    for url in urls:
        feed = feedparser.parse(url)
        entries += feed['entries']
    downloaded = json.load(file('%s/downloaded' % RSSNZB_DIR, 'r'))
    queue = {}
 
    for entry in entries:
        if entry['report_progress'] != 'Report is complete':
            continue
        if entry['title'] in downloaded:
            existing = downloaded[entry['title']]
            if int(entry['report_size']) <= int(existing['report_size']):
                continue
        queue[entry['title']] = entry['report_id']
        downloaded[entry['title']] = entry
 
    for title in queue:
        print 'Downloading', title
        hella.enqueuenewzbin(queue[title])
        sleep(1)
 
    serial = {}
    for key in downloaded:
        serial[key] = {}
        for k in downloaded[key]:
            if k in ['report_id', 'report_size', 'title']:
                serial[key][k] = downloaded[key][k]
    json.dump(serial, file('%s/downloaded' % RSSNZB_DIR, 'w'), indent=4)
 
def main():
    hella = ServerProxy('http://hellanzb:massive@localhost:8760/')
 
    download_nzbs([x.rstrip('\r\n') for x in file('%s/savedsearches' % RSSNZB_DIR, 'r').readlines()], hella)
 
if __name__ == '__main__':
    main()