Страницы

воскресенье, 16 февраля 2014 г.

Perpetum reposita. Скачать весь Интернет. Joke - All torrents download

На Хабре наткнулся на интересную статью "Спасем крупнейшую медиатеку в рунете. Вся база rutracker у Вас на компьютере", где выложена торрент-ссылка на крупную базу хэш-сумм торрент-файлов.
Т.к. у меня нет регистрации там, то заметку оформлю здесь.

После загрузки около 2 Гб, на диске появился файл final.txt.gz, который содержит информацию о названии торрента, его ID, хэш-сумме и ещё несколько полей.
Этого достаточно для экспериментов.

Теперь в игру вступает мощь комадной строки линукса.

Посмотрим, что это за файл.

Для начала подсчитаем количество записей (строк, оканчивающихся символом \n).

$ cat final.txt | wc -l
1411636

Это почти 1,5 миллиона строк.


Файл final.txt в качестве разделителя полей использует табуляцию TAB (символ \t).

Отберём только нужное (название и хэш-сумму), используя команду cut:

$ cat final.txt | cut -f 2,6

Вывод можно направить и в другой файл:

$ cat final.txt | cut -f 2,6 > hashes.csv


Теперь можно выполнять поиск необходимого из командной строки:


Например найти всё PDF - файлы

$ cat final.txt | cut -f 2,6 | grep "PDF"


Теперь в найденном можно найти уже более подробно:


$ cat final.txt | cut -f 2,6 | grep "PDF" | grep "Android"

Для удобства преобразуем хэш-суммы, в т.н. magnet-ссылки.

Magnet-ссылка - это маленькое чудо.
Минимальная magnet-ссылка имеет вид: magnet:?xt=urn:btih:HASH
где вместо HASH подставляется хэш-сумма из файла final.txt

Используем AWK.
Параметр -F '\t' - задаёт разделитель (табуляцию) во входном файле, пишется в формате регулярных выражений, поэтому в одинарных ковычках.

Принцип AWK  (помимо всех возможностей) - это отбор строк (записей) по шаблону (pattern) и применение к этому шаблону действия (action).
Шаблоны и действия записываются в виде программы на языке AWK.
В командной строке обычно используются короткие программы, текст которых помещается на строке, а то и двух. Программа заключается в одинарные кавычки.

Кратко переменные, относящиеся к текущей строке (линии):
$0 - вся строка
$1, $2 и т.п. - поля на которые разбивается вся строка (каждый раз каждая строка) внутри AWK

Программа записывается в виде:
'$1 ~ /Android/ {print $0}'
Здесь есть шаблон с регулярным выражением заключённым между двумя //, а также действие. Действие заключается в фигурные скобки {}.

Мы берём первое поле каждой строки - это параметр $1 (а в него попадёт название торрента, так мы решили на предыдущих этапах), и при срабатывании шаблона (мы ищем вхождение слова Android в тексте названия), выполниться действие { print $0 } - просто выведем на стандартный вывод (консоль).

Т.к. просто  хэш-суммы не интересно, то сделаём домашнюю заготовку - добавим префикс magnet-ссылки к каждой хэш-сумме и получим файл вида: название торрента - magnet-ссылка. Заметим, что мы также добавляем разделитель табуляцию в выходном файле - \t перед magnet.



gimmor@red$ cat final.txt | grep "PDF" | cut -f 2,6 | awk -F '\t' '$1 ~ /Android/ {print $1,"\tmagnet:?xt=urn:btih:"$2}'

или с ранее отфильтрованным файлом:
gimmor@red$ cat hashes.csv | awk -F '\t' '$1 ~ /Android/ {print $1,"\tmagnet:?xt=urn:btih:"$2}'

Т.е. используя цепочку перенаправлений, можно фильтровать, с каждым разом сужая поиск и отбирая нужное.

| grep "PDF" |
| grep "PDF" | grep "RUS" |

| grep "PDF" | grep "RUS" | grep "Ubuntu" |


Т.е. после отбора нужного - только magnet-ссылок:

gimmor@red $cat hashes.csv | awk -F '\t' '$1 ~ /Android/ {print $1,"\tmagnet:?xt=urn:btih:"$2}' | cut -f 2

Вывод будет примерно таким (хэш-суммы показаны условные):

magnet:?xt=urn:btih:V7LRVHBXLMXZHG4123345DQ7ZECRNXFA
magnet:?xt=urn:btih:55ITF6OOHNHKO4O5P4KY7CXYQ335FCAK
magnet:?xt=urn:btih:JX5WYUMEAG4KMJ5EBJ123345SP4UZZPF4
magnet:?xt=urn:btih:WDDIG2CDI656FVTGGPHL2KH7PWCRZAKD
magnet:?xt=urn:btih:YFEPMNFQS6X123345WRM7RM3EUEPGTOH
magnet:?xt=urn:btih:ZEZJZ6DMPDFVJPUJ123345OI2AXZZUB3J



Теперь, получив узкий список magnet-ссылок того что нужно, можно выполнять загрузку необходимого.

gimmor@red$ sudo apt-get install transmission-cli

Трансмиссия в командной строке запускается так:

gimmor@red$ transmission-cli [options] <file|url|magnet>
-m - важная опция, включает открытие порта на роутере, посредством службы  UPnP.

gimmor@red$ transmission-cli -m "magnet:?xt=urn:btih:YFEPMNFQS6XYDS3TF123345M3EUEPGTOH"

Желательно, чтобы графический клиент не был запущен, иначе возникает конфликт портов. Можно и перенастроить порты у графического клиента.

В графическом клиенте, надо в меню "Файл" - "Открыть URL..." указать magnet-ссылку и далее стандартно.

※※※

Использование SQL


Если воспользоваться моей заметкой по PostrgreSQL, то можно установить СУБД и загрузить туда полученный csv-файл, всю базу final.txt и пр.
И тогда выполнение sql запросов будет интерактивно + можно много чего ещё делать.

※※※

Ресурсы


- Спасем крупнейшую медиатеку в рунете. Вся база rutracker у Вас на компьютере. http://habrahabr.ru/post/195454/
- Содержимое The Pirate Bay уместили в 90 мегабайт. http://habrahabr.ru/post/137929/

※※※

Комментариев нет: