llivejo: (Default)
[personal profile] llivejo
Написал питоновский скрипт, который заменяет torrents.ru на rutracker.org внутри бинарных торрент-файлов.

Лежит здесь: retr.py (2Кб, 53 строки кода). Импортирует модуль bencode из bittorrent или bittornado.

Перекодировал свои 150+ файлов, полет нормальный. Под Windows не проверял пока не победил тоже заработало.

Upd. Совместно с [livejournal.com profile] nepilsonis добавили перекодирование переменных comment и publisher-url

Upd.2 Cкомпилил py-installer'ом windows-версию, тех кому лень поставить Питон целиком. Потребуется Python26.dll, 2.0MB, и собственно retr.exe, 646KB. Работает только в консоли/терминале/или как там он называется в винде.

Date: 2010-02-20 05:59 am (UTC)
From: [identity profile] nepilsonis.livejournal.com
Спасибо, прекрасно.
Только ещё и комментарий надо бы, по хорошему если.
Чтобы страница форума открывалвсь.

Date: 2010-02-20 07:29 am (UTC)
From: [identity profile] nepilsonis.livejournal.com
Чёрт...
Честно говоря, я уже сделал так
            meta['announce-list'] = [[newtracker], ["http://retracker.local/anno.....
            try:
                comment = retrack(meta['comment'])
                meta['comment'] = comment
                puburl = retrack(meta['publisher-url'])
                meta['publisher-url'] = puburl
            except KeyError, e:
                print 'KeyError, continuing'
            newtorrent = infile + ".tmp"

но почему-то оно всё равно не работает. питона я не знаю абсолютно (кроме того, что всё зависит от пробелов), потому не пойму, что не так.

А ещё у меня в 800 торрентах нашлось 2, у которых внутри есть файлы, начинающиеся на точку. Так вот питоновская либа при их импорте вылетает - потому что, якобы, так нельзя называть файлы.

Что же делать с комментариями?
Edited Date: 2010-02-20 07:34 am (UTC)

Date: 2010-02-20 08:12 am (UTC)
From: [identity profile] nepilsonis.livejournal.com
Я тоже именно так и понял. Там просто есть регексп, с которым сравнивают info.name. Почему оно при этом срабатывает на имя файла — ведь этот атрибут — это не имя файла, коих там хоть несколько сотен может быть, а имя самого торрента — я не понял. Операция одноразовая, потому я просто добавил вывод имени файла перед обработкой, и те 2 файла, на которых вылетала, просто руками поправил.

Если для кого-то это станет проблемой — напишет новую версию :)

В общем, ещё раз спасибо вам, у меня теперь всё хорошо :)

Date: 2010-02-20 07:37 am (UTC)
From: [identity profile] nepilsonis.livejournal.com
О, счастье!
Секрет раскрыт! Конечно, дело в лишних точках!
Теперь всё работает:
@@ -33,14 +33,18 @@
 def main():
     if len(sys.argv)>1:
         for infile in sys.argv[1:]:
+            print infile
             f = open(infile, "r")
             meta = do_test_chksumfile(f)
             f.close()
             newtracker = retrack(meta['announce'])
             meta['announce'] = newtracker
             meta['announce-list'] = [[newtracker], ["http://retracker.local/announce"]]
-            meta['comment'] = retrack(meta['comment'])
-            meta['publisher-url'] = retrack(meta['publisher-url'])
+            try:
+                meta['comment'] = retrack(meta['comment'])
+                meta['publisher-url'] = retrack(meta['publisher-url'])
+            except KeyError, e:
+                print 'KeyError, continuing'
             newtorrent = infile + ".tmp"
             print "%s created" % newtorrent



вывод имени файла был нужен, чтобы знать, на каком файле оно споткнулось
Edited Date: 2010-02-20 07:40 am (UTC)

Date: 2010-02-20 08:03 am (UTC)
From: [identity profile] nepilsonis.livejournal.com
Просто голову отрезал…
Я по вашей ссылке про ретрекеры прочёл, что мой азуреус с ним работает некорректно, а кроме того, у нас в стране такого нет. и вообще у меня свои днс, так что никакой пользы, кроме вреда. так что таки убрал я ретрекер. Но это моя личная заморочка, россияням, вероятно, она полезна.

Date: 2010-02-20 08:06 am (UTC)
From: [identity profile] nepilsonis.livejournal.com
то есть у меня в том варианте, который мне всё хорошо сделал, нет точек перед torrents.ru, вообще.

Date: 2010-03-08 05:47 am (UTC)
From: [identity profile] wolf1221.livejournal.com
+5cents (retracker.local УЖЕ может быть добавлен, и существует довольно много торрентов с кучей элементов в announce-list). Python я тоже не особо знаю. Извиняюсь за С-змы. --- retr.py.old.py 2010-03-08 08:30:07.000000000 +0300 +++ retr.py 2010-03-08 08:44:40.000000000 +0300 @@ -44,9 +44,21 @@ f = open(infile, "rb") meta = do_test_chksumfile(f) f.close() - newtracker = retrack(meta['announce']) - meta['announce'] = newtracker - meta['announce-list'] = [[newtracker], ["http://retracker.local/announce"]] + meta['announce'] = retrack(meta['announce']) + local_present = 0 + try: + newtracker = [] + for item in meta['announce-list']: + if 'retracker.local' in item[0]: + local_present = 1 + newtracker.append([retrack(item[0])]) + except KeyError: + newtracker = [meta['announce']] + + if not local_present : + newtracker.append("http://retracker.local/announce") + + meta['announce-list'] = newtracker retrack_key('comment', meta) retrack_key('publisher-url', meta) newtorrent = infile + ".tmp"

Date: 2010-03-14 03:32 am (UTC)
From: [identity profile] wolf1221.livejournal.com
Done.
--- retr.py.old.py	2010-03-08 08:30:07.000000000 +0300
+++ retr.py	2010-03-08 08:50:09.000000000 +0300
@@ -44,9 +44,21 @@
             f = open(infile, "rb")
             meta = do_test_chksumfile(f)
             f.close()
-            newtracker = retrack(meta['announce'])
-            meta['announce'] = newtracker
-            meta['announce-list'] = [[newtracker], ["http://retracker.local/announce"]]
+            meta['announce'] = retrack(meta['announce'])
+            local_present = 0
+            try:
+                newtracker = []
+                for item in meta['announce-list']:
+                    if 'retracker.local' in item[0]:
+                        local_present = 1
+                    newtracker.append([retrack(item[0])])
+            except KeyError:
+                newtracker = [meta['announce']]
+
+            if not local_present:
+                newtracker.append("http://retracker.local/announce")
+
+            meta['announce-list'] = newtracker
             retrack_key('comment', meta)
             retrack_key('publisher-url', meta)
             newtorrent = infile + ".tmp"

December 2020

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
27282930 31  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 16th, 2025 05:27 pm
Powered by Dreamwidth Studios