Приветствую уважаемое Хабрасообщество!
Несколько дней назад у меня возникло желание автоматизировать получение моих любимых сериалов. Таким образом задача была ясна.
Материальная база уже имелась.
1) Домашний компьютер с debian 6.0 консольный.
2) Установленный на нем Transmission.
3)Желание.
После некоторого поиска был выбран нужный скрипт и работа пошла.
Устанавливаем transmission, следующей командой:
sudo apt-get install transmission-daemon
После установки переходим к его настройке. Для начала остановим демон, это нужно чтобы корректно внести настройки.
/etc/init.d/transmission-daemon stop
После остановки переходим к конфиг файлу
nano /etc/transmission-daemon/settings.json
В этом файле содержаться различные параметры. Более подробно вы можете найти в google.com. Однако нас интересуют только определенные.
«download-dir»: "/home/ftp", — куда будут качаться файлы.
«rpc-username»: «admin», — устанавливаем логин к веб интерфейсу
«rpc-password»: «admin», — устанавливаем пароль к веб интерфейсу
«rpc-whitelist»: «127.0.0.1», — устанавливаем диапазон ip, которые будут иметь доступ.
«rpc-whitelist-enabled»: false, — отключаем предыдущий пункт, по желанию.
Так же в конце файла допишем две строки. Эти строки необходимы для автоматической проверки папки на наличие торрент файла.
Обратите внимание что последняя строка конфига перед знаком “}” запятая не должна стоять, во всех остальных случая обязательно ставте запятую.
«watch-dir»: "/home/ftp",
«watch-dir-enabled»: true
Для того что бы наш торрент смог сохранять закачиваемые файлы, нужно дать права доступа на это.
nano /etc/init.d/transmission-daemon
В этом файле меняем параметр запуска демона, debian-transmission меняем на root.
User=debian-transmission
И в конце запускаем запускаем демон
/etc/init.d/transmission-daemon start
Для более автоматизированной работы с rutracker.org сделаем следующие действия. Создами файл rutracker.org
nano /home/rutracker.org
И записываем в него следующий конфиг, немного подправив его под себя, введя свой логин пароль и папку для сохранения.
Чтобы наш конфиг смог быть выполнен пишем следующую строчку
Chmod +x rutraker.org
Для выполнения скрипта нам понадобиться Python. Установим Python следующей командой
аpt-get-install python
Затем создаем файл urls.lts, в этот файл мы будем писать полностью ссылки на те топики которые нас интересуют.
nano /home/urls.lst
И вписываем к примеру
rutracker.org/forum/viewtopic.php?t=3175410
Сохраняем и создаем файл, который будет хранить инфо о последнем изменении торрент файла на сервере.
nano /home/last.lst
Записываем к примеру цифру один и сохраняем и всё. Теперь скрипт будет качать файлы пофакту выполнения, однако каждый раз запускать скрипт есть не кошерно.
Исправить эту ситуацию нам поможет cron и его магический файл crontab. Открываем файл Crontab
nano /etc/crontab
И видим приблизительно такой текст
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
Дальше добавляем следующую строку в файл перед последним знаком “#”, то есть приводим файл в такой вид
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
* */2 * * * root /root/rutracker.org
#
Теперь более подробно о тех звездочках, что мы наблюдаем.
* * * * *
— — — — — | | | | |
| | | | — День недели (0 — 7) (Воскресенье =0 или =7)
| | | — Месяц (1 — 12)
| | — День (1 — 31)
| — Час (0 — 23)
— Минута (0 — 59)
Таким образом мы видим, что если вместо первой звездочки мы поставим 0-59, то это будет значить что каждую минуту будет выполняться наш скрипт.
А если напиши */5, то в таком случае скрипт будет выполняться каждые 5 минут.
Более оптимальным временем выполнения скрипта было бы каждые 2 или 4 часа, для этого просто заменим вторую звездочку на */2 или */4
В первом варианте строка примет вид
* */2 * * * root /root/rutracker.org
Во втором
* */4 * * * root /root/rutracker.org
Минимальный интервал проверки стоит ставить порядка 30 минут. Причина тому кукис.
После звездочек идет запись “root” это указатель пользователя от которого будет запускаться наш скрипт.
Собственно после всех манипуляций мы сохраняем файл и перезапускам cron
/etc/init.d/cron restart
Всё. Может откинуться на спинку кресла и насладиться новой серией любимого сериала.
Источники.
Скрипт для проверки
Cron (wiki)
Несколько дней назад у меня возникло желание автоматизировать получение моих любимых сериалов. Таким образом задача была ясна.
Материальная база уже имелась.
1) Домашний компьютер с debian 6.0 консольный.
2) Установленный на нем Transmission.
3)Желание.
После некоторого поиска был выбран нужный скрипт и работа пошла.
Устанавливаем transmission, следующей командой:
sudo apt-get install transmission-daemon
После установки переходим к его настройке. Для начала остановим демон, это нужно чтобы корректно внести настройки.
/etc/init.d/transmission-daemon stop
После остановки переходим к конфиг файлу
nano /etc/transmission-daemon/settings.json
В этом файле содержаться различные параметры. Более подробно вы можете найти в google.com. Однако нас интересуют только определенные.
«download-dir»: "/home/ftp", — куда будут качаться файлы.
«rpc-username»: «admin», — устанавливаем логин к веб интерфейсу
«rpc-password»: «admin», — устанавливаем пароль к веб интерфейсу
«rpc-whitelist»: «127.0.0.1», — устанавливаем диапазон ip, которые будут иметь доступ.
«rpc-whitelist-enabled»: false, — отключаем предыдущий пункт, по желанию.
Так же в конце файла допишем две строки. Эти строки необходимы для автоматической проверки папки на наличие торрент файла.
Обратите внимание что последняя строка конфига перед знаком “}” запятая не должна стоять, во всех остальных случая обязательно ставте запятую.
«watch-dir»: "/home/ftp",
«watch-dir-enabled»: true
Для того что бы наш торрент смог сохранять закачиваемые файлы, нужно дать права доступа на это.
nano /etc/init.d/transmission-daemon
В этом файле меняем параметр запуска демона, debian-transmission меняем на root.
User=debian-transmission
И в конце запускаем запускаем демон
/etc/init.d/transmission-daemon start
Для более автоматизированной работы с rutracker.org сделаем следующие действия. Создами файл rutracker.org
nano /home/rutracker.org
И записываем в него следующий конфиг, немного подправив его под себя, введя свой логин пароль и папку для сохранения.
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# created by x0x01 (aka.x0x01[AT]gmail[dot]com)
import urllib, urllib2, cookielib
from string import strip
LOGIN = 'Ваш логин'
PASS = 'Ваш пароль'
# путь для сохранения torrent файла
OUT_DIR = '/home/ftp/'
#OUT_DIR = '/tmp/gettor/'
# формирование кук
post_params = urllib.urlencode({
'login_username' : LOGIN,
'login_password' : PASS,
'login' : '%C2%F5%EE%E4'
})
# инит обработчика кук
cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
urllib2.install_opener(opener)
# авторизация + сессия с куками
web_obj = opener.open('http://login.rutracker.org/forum/login.php', post_params)
data = web_obj.read()
try:
# читаем файл со ссылками, формируем список
fl_url_list = open('urls.lst', 'r')
url_arr = fl_url_list.readlines()
fl_url_list.close()
# чтение файла "размеров", формируем список
fl_dta_list = open('last.lst', 'r')
dta_arr = fl_dta_list.readlines()
fl_dta_list.close()
except IOError:
print 'err'
dta_arr = []
# открытие на запись для новых "размеров" в last.lst
fl_dta_list = open('last.lst', 'w')
# из списка "размеров" формируем словарь ID:SIZE
dta_dic = {}
for curr in dta_arr:
# отрезаем переносы строк
curr = strip(curr)
# делим строку по пробелу и создаем словарь
dta_dic[str.split(curr)[0]] = str.split(curr)[1]
# сохранение torrent файла
def dw_torrent_f(b_data, f_name):
f = open(OUT_DIR+f_name+'.torrent', 'w')
f.write(b_data)
f.close()
# обработка ссылок
for thread_url in url_arr:
# отрезаем переносы строк
thread_url = strip(thread_url)
# делим ссылку на 2 части (получение id форума)
topic_id = str.split(thread_url,'=')[1]
dl_torrent_url = 'http://dl.rutracker.org/forum/dl.php?t='+topic_id
# получение torrent файла по ссылке
web_obj = opener.open(dl_torrent_url, post_params)
data = web_obj.read()
# сравнение размеров полученного файла и в last.lst
try:
if len(data) <> int(dta_dic[topic_id]):
# этот обновился, сохраняем
print '[^]', thread_url
dw_torrent_f(data, topic_id)
except (IndexError, KeyError):
# этот новый, сохраняем
print '[+]', thread_url
dw_torrent_f(data, topic_id)
#print 'UPD:', dl_torrent_url, 'new:', len(data), 'old:', m_dic[topic_id]
# пишем в last.lst новые значения id и размер
fl_dta_list.write(str(topic_id)+' '+str(len(data))+'\n')
# закрытие файла
fl_dta_list.close()
Чтобы наш конфиг смог быть выполнен пишем следующую строчку
Chmod +x rutraker.org
Для выполнения скрипта нам понадобиться Python. Установим Python следующей командой
аpt-get-install python
Затем создаем файл urls.lts, в этот файл мы будем писать полностью ссылки на те топики которые нас интересуют.
nano /home/urls.lst
И вписываем к примеру
rutracker.org/forum/viewtopic.php?t=3175410
Сохраняем и создаем файл, который будет хранить инфо о последнем изменении торрент файла на сервере.
nano /home/last.lst
Записываем к примеру цифру один и сохраняем и всё. Теперь скрипт будет качать файлы пофакту выполнения, однако каждый раз запускать скрипт есть не кошерно.
Исправить эту ситуацию нам поможет cron и его магический файл crontab. Открываем файл Crontab
nano /etc/crontab
И видим приблизительно такой текст
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
Дальше добавляем следующую строку в файл перед последним знаком “#”, то есть приводим файл в такой вид
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
* */2 * * * root /root/rutracker.org
#
Теперь более подробно о тех звездочках, что мы наблюдаем.
* * * * *
— — — — — | | | | |
| | | | — День недели (0 — 7) (Воскресенье =0 или =7)
| | | — Месяц (1 — 12)
| | — День (1 — 31)
| — Час (0 — 23)
— Минута (0 — 59)
Таким образом мы видим, что если вместо первой звездочки мы поставим 0-59, то это будет значить что каждую минуту будет выполняться наш скрипт.
А если напиши */5, то в таком случае скрипт будет выполняться каждые 5 минут.
Более оптимальным временем выполнения скрипта было бы каждые 2 или 4 часа, для этого просто заменим вторую звездочку на */2 или */4
В первом варианте строка примет вид
* */2 * * * root /root/rutracker.org
Во втором
* */4 * * * root /root/rutracker.org
Минимальный интервал проверки стоит ставить порядка 30 минут. Причина тому кукис.
После звездочек идет запись “root” это указатель пользователя от которого будет запускаться наш скрипт.
Собственно после всех манипуляций мы сохраняем файл и перезапускам cron
/etc/init.d/cron restart
Всё. Может откинуться на спинку кресла и насладиться новой серией любимого сериала.
Источники.
Скрипт для проверки
Cron (wiki)