Форум сайта python.su
2
написал я прогу чтоб скачивала с rss торрент файлы вот код:
#!/usr/bin/env python # -*- coding: utf-8 -*- import feedparser import collections import shelve import os.path from urllib import request LINK = 'http://torrentrss.net/getrss.php?rsslink=Lxye6Z' #вставляем свою ссылку с http://torrentrss.net/ folder_to_save = '~/TDownload/torrent' #куда сохранять торрент файлы folder_to_save = os.path.expanduser(folder_to_save) data_file = 'data.she' #название файла shelve TORRENTS = collections.namedtuple('Torrents', 'serial series torrent_url torrent_name') def torrent_nametuple(f): serial = f['summary_detail']['value'] series = f['title'] series = series.replace('Финал','').replace('Сезона','').replace('сезона','').replace('WEBDLRip','').replace('|','').replace('/','').strip() torrent_name = "{}_{}.torrent".format(serial,series.replace('.','')) torrent_url = f['link'] return TORRENTS(serial,series,torrent_url,torrent_name) def main(): print('\n'*10) d = shelve.open(data_file) feed = feedparser.parse( LINK ) for f in feed['entries'][::-1]: #делаем итерацию по данным в rss torrent = torrent_nametuple(f) try: serial_dict = d[torrent.serial] #переходим к dict сериала except KeyError: #если нету ещо такого сериала d[torrent.serial] = {} #создаем новый dict serial_dict = d[torrent.serial] #и даем сылку на него if serial_dict.pop(torrent.series, None) is not None: continue #значит уже ету серию скачало else: print("качаю новый файл:\n {}\n {}".format(torrent.serial,torrent.series)) request.urlretrieve( torrent.torrent_url , os.path.join(folder_to_save,torrent.torrent_name) ) print("файл скачан добавляю его данные в базу...") serial_dict[torrent.series] = torrent d.close() return 0 if __name__ == '__main__': main()
Отредактировано simple_user (Авг. 13, 2014 02:52:19)
Офлайн
857
simple_userd = shelve.open(data_file)
d = shelve.open(data_file, writeback=True)
def main(): #print('\n'*10) d = shelve.open(data_file, writeback=True) feed = feedparser.parse( LINK ) for f in feed['entries'][::-1]: #делаем итерацию по данным в rss torrent = torrent_nametuple(f) if torrent.serial in d: serial_dict = d[torrent.serial] else: serial_dict = d[torrent.serial] = {} #try: # serial_dict = d[torrent.serial] #переходим к dict сериала #except KeyError: #если нету ещо такого сериала # d[torrent.serial] = {} #создаем новый dict # serial_dict = d[torrent.serial] #и даем сылку на него #if serial_dict.pop(torrent.series, None) is not None: # continue #значит уже ету серию скачало #else: loadfmt = "качаю новый файл:\n {}\n {}" if torrent.series not in serial_dict: print(loadfmt.format(torrent.serial, torrent.series)) request.urlretrieve( torrent.torrent_url, os.path.join(folder_to_save, torrent.torrent_name) ) serial_dict[torrent.series] = tuple(torrent) print("файл скачан добавляю его данные в базу...") d.close() return 0
Отредактировано py.user.next (Авг. 14, 2014 22:33:11)
Офлайн
2
благодарочка
жаль что уже реализовал по другому алгоритму ( проверяю есть ли файл в папке, если нету качаю )
Офлайн
857
simple_user
проверяю есть ли файл в папке
Офлайн
2
py.user.nextторрент програма когда “поймала” файл добавляет к нему в конец “.added” соответсвенно я проверяю если файл с этой концовкой в папке, а не иходник
Вообще, надо сначала закачать файл, а потом добавить в базу. Если будет разрыв соединения во время скачивания файла, часть файла останется.
Офлайн
857
simple_user
торрент програма когда “поймала” файл добавляет к нему в конец “.added”
simple_user
если програма “не словит” она концовку не добавит
Офлайн
2
с вами не по споришь…)))
Офлайн
857
Это просто мягко объясняю, что ты нарушил одно из правил при создании программ. Считай, что глобальные переменные имеют ту же природу. Привязав скрипт к внешней программе, ты сделал его зависимым от её семантики.
Если тебе нужно соединить две программы, то между ними должны передаваться простые данные (числа, строки).
Отредактировано py.user.next (Авг. 20, 2014 10:48:09)
Офлайн
2
окей, спасибо
Офлайн