Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


Боковая панель

apple-mac-os:macos-monterey:automate-torrent-downloads-on-macos

Автоматизация скачивания torrent в macOS

Рассмотрим пример использования «Действия папки» для автоматизации отправки .torrent файлов на удалённый сервер transmission. В рассматриваемом примере transmission установлен на роутере ASUS с кастомной прошивкой от Merlin.

Подсмотрев пример в этом блоге, создал автоматизацию действия папки по старинке в Automator.app и используя shell-script.

Текст скрипта:

#!/bin/zsh
 
for file in "$@"
do
        if [[ "$(basename ${file##*.})" == "torrent" ]]
        then
	#Authentication
         	HOST=My-Router.local
          PORT=9092
          USER=torruser
          PASS=torrpassword
 
            #Encoding torrent file
            METAINFO=$(base64 $file)
            # set true if you want every torrent to be paused initially
            #PAUSED="true"
            PAUSED="false"
            #Push
            SESSID=$(curl --silent --anyauth --user $USER:$PASS "http://$HOST:$PORT/transmission/rpc" | sed 's/.*<code>//g;s/<\/code>.*//g')
            curl --silent --anyauth --user $USER:$PASS --header "$SESSID" "http://$HOST:$PORT/transmission/rpc" -d "{\"method\":\"torrent-add\",\"arguments\":{\"paused\":${PAUSED},\"metainfo\":\"${METAINFO}\"}}"
 
            # Remove .torrent file
            rm $file -f
        fi
done

Однако день спустя, наткнулся на реализацию на AppleScript, которая мне показалась интереснее, поэтому начал изучение вопроса с начала.

В итоге получился рабочий вариант, который не зависит от устаревающего Automator, также добавлена обработка ошибок и уведомления. Сохраняем скрипт в каталоге ~/Library/Workflows/Applications/Folder Actions/

--Обрабатываемый тип файлов
property FileExt : "torrent"
 
on adding folder items to this_folder after receiving added_items
	repeat with torrentFile in added_items
		tell application "Finder"
			if the name extension of the torrentFile is in the FileExt then
				(*
Параметры переменных подключения к серверу
Пользователь, пароль, порт настраиваются в /opt/etc/transmission/settings.json на стороне сервера
*)
				set transmissionuser to "torruser"
				set transmissionpass to "torrpassword"
				set transmissionhost to "My-Router.local"
				set transmissionport to "9092"
				set transmissionauth to transmissionuser & ":" & transmissionpass
				set transmissionurl to "http://" & transmissionhost & ":" & transmissionport
				set rpcurl to transmissionurl & "/transmission/rpc"
				--Проверяем доступность сервера
				try
					do shell script "nc -z " & transmissionhost & space & transmissionport
					try
						set metainfo to do shell script "base64 " & quoted form of (POSIX path of (torrentFile))
						set sessionid to do shell script "curl --silent " & rpcurl & " --anyauth --user " & transmissionauth & ¬
							" | sed 's/.*<code>//g;s/<\\/code>.*//g'"
						set json to "{\"method\": \"torrent-add\", \"arguments\":{\"metainfo\":\"" & metainfo & "\" }}"
						set answer to do shell script "curl --silent --anyauth --user " & transmissionauth & space & rpcurl & " --header " & ¬
							quoted form of (sessionid) & " -d " & quoted form of (json) & " | sed 's/.*result\\\":\\\"//g;s/\\\"}//g'"
						if answer = "success" then
							-- Показ уведомления об успешной отправке
							display notification (name of torrentFile as text) with title "Transmission-RPC" subtitle "Успешно отправлен на закачку"
							--Удаление обработанного .torrent файла
							--delete torrentFile -- удаление в корзину
							do shell script "rm -f " & quoted form of (POSIX path of (torrentFile))
						else
							-- Сообщение об ошибке отправки .torrent файла, исчезает через 10 сек
							set errMsg to do shell script "echo " & quoted form of (answer) & " | sed 's/.*<p>//g;s/<\\/p>.*//g'"
							display dialog "Ошибка отправки файла: " & (name of torrentFile) & ".
 
Ответ сервера: " & errMsg with title "Transmission-RPC" buttons {"OK"} default button 1 with icon stop giving up after 10
						end if
					end try
				on error
					-- Сообщение об ошибке связи с сервером, исчезает через 10 сек
					display dialog "Сервер transmission " & transmissionhost & " недоступен" with title ¬
						"Transmission-RPC" buttons {"OK"} default button 1 with icon stop giving up after 10
				end try
			end if
		end tell
	end repeat
end adding folder items to

Для установки скрипта вызываем контекстное меню на каталоге:

Так же «Настройка действий папки» можно вызвать через spotlight.

В обработку скрипта попадают все файлы и каталоги, которые будут добавляться в настроенный каталог, если расширение файла или файлов .torrent, то они будут отправлены в transmission для последующей загрузки.

Также существует решение, реализованное с помощью «Быстрые Команды», которое позволяет вручную отправлять .torrent файлы на удалённый сервер на iOS и iPadOS.


Проверено на следующих конфигурациях:

Версия ОС
Apple macOS Monterey (12.0)

Автор первичной редакции:
Виталий Якоб
Время публикации: 03.02.2022 10:39

Обсуждение

Ваш комментарий:
 

apple-mac-os/macos-monterey/automate-torrent-downloads-on-macos.txt · Последнее изменение: 08.02.2022 15:19 — Виталий Якоб