Automator: сохранение изображений из списка URL-адресов в текстовом файле.

0

У меня есть текстовый файл со списком URL-адресов изображений с веб-сайта. Я хотел бы загрузить их в папку с именем Art на моем компьютере.

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

Как я могу загрузить несколько изображений из их URL?

Линда
источник
Не решение Automator, но это xargsи curlоснованное на командной строке решение должно работать: stackoverflow.com/questions/9865866/…
ernie

Ответы:

2

Давайте на секунду предположим, что URL вашего изображения находятся в текстовом файле, расположенном на вашем рабочем столе ... "Image list.txt"

Давайте предположим, что каждый URL изображения в этом файле находится на отдельной строке

Предположим, что папка «Art» находится на вашем рабочем столе (папка для загруженных изображений)

введите описание изображения здесь

Этот код AppleScript - все, что вам нужно

set theList to (path to desktop as text) & "Image list.txt"
set artFolder to (path to desktop as text) & "Art"
set artFolder to quoted form of POSIX path of artFolder

set theImages to read alias theList as list using delimiter linefeed -- get the lines of a file as a list

repeat with i from 1 to count of theImages
    set thisItem to item i of theImages
    do shell script "cd " & artFolder & "; " & "curl -O " & quoted form of thisItem
end repeat

На самом деле, вот еще лучшее решение. Сохраните следующий код AppleScript в Script Editor.app как приложение. Теперь у вас будет два варианта.

Двойной щелчок по приложению в Finder откроет диалоговое окно с просьбой выбрать текстовый файл, содержащий URL-адреса изображений, а затем приступит к загрузке изображений.

ИЛИ ЖЕ

Вы можете перетащить текстовый файл, содержащий URL-адреса изображений, прямо на значок приложения в Finder, который затем обработает и загрузит изображения в этом текстовом файле. (AKA Droplet)

on open theFiles
    --  Handle the case where the script is launched by dropping
    -- a .txt file, containing image URLs,  directly onto this app's icon
    set artFolder to (path to desktop as text) & "Art"
    set artFolder to quoted form of POSIX path of artFolder

    set theImages to read alias theFiles as list using delimiter linefeed

    repeat with i from 1 to count of theImages
        set thisItem to item i of theImages
        do shell script "cd " & artFolder & "; " & "curl -O " & quoted form of thisItem
    end repeat
end open

on run
    --  Handle the case where the script is launched without any dropped files
    set theList to (choose file with prompt ¬
        "Choose Your Text File Containing Image URLs" of type {"txt"} ¬
        default location (path to desktop) ¬
        invisibles false ¬
        without multiple selections allowed) as text

    set artFolder to (path to desktop as text) & "Art"
    set artFolder to quoted form of POSIX path of artFolder

    set theImages to read alias theList as list using delimiter linefeed

    repeat with i from 1 to count of theImages
        set thisItem to item i of theImages
        do shell script "cd " & artFolder & "; " & "curl -O " & quoted form of thisItem
    end repeat
end run

Вот изображение капли в действии ...

введите описание изображения здесь

wch1zpink
источник
1
Ваш ответ более формален, чем мой, но мне нравится использовать креативность для достижения своих целей. В любом случае, слава за то, что вы хорошо образованы.
Матеус Рибейро
Элегантный. Работает как шарм.
Линда
Я попробовал ваш сценарий выше, и я получаю эту ошибку: curl: (3) [globbing] unmatched brace in column 1. Не уверен, что это значит. Как я могу это исправить? Для простоты на своем рабочем столе я создал папку с именем Artи файлом Image list.txtс одним URL-адресом на строку. Заранее спасибо!
Notyourguru
@ notyourguru, какая именно командная строка выдает ошибку? Возможно, вы захотите опубликовать копию фактического сценария, который вы используете, например, https://paste.ee или https://pastebin.com , чтобы мы могли точно видеть, с чем вы работаете, чтобы помочь диагностировать ошибку. ,
user3439894
-1

Я предполагаю, что у вас есть текстовый файл с одним URL на строку. Это важно для следующего рабочего процесса. Я также предполагаю, что у вас есть чистые URL-адреса в формате jpg / png, прямые ссылки на изображения, а не HTML-страницы URL с изображениями внутри.

Я расскажу о Safari, потому что высока вероятность того, что браузер установлен в вашей системе, но другие браузеры должны работать так же.

1 - Откройте Safari и перейдите к настройкам, общим настройкам и установите папку по умолчанию для загрузки файлов в папку ART :

введите описание изображения здесь

2 - Откройте Automator, создайте новый рабочий процесс и перетащите действие «Выполнить AppleScript»:

введите описание изображения здесь

3 - Вставьте следующий код:


on run
    set the clipboard to {}
    tell application "TextEdit" to activate
    tell application "System Events"
        key code 126 using command down -- go to the start of the doc (command+up)
        delay 0.1
        key code 124 using {command down, shift down} -- select the first line (commmand+shift+right arrow)
        delay 0.1
        key code 8 using command down -- copy URL (command+C)
        delay 0.1
    end tell
    repeat while (the clipboard) is not "EXIT"
        tell application "Safari" to activate
        tell application "System Events"
            key code 37 using command down -- Open Location (Command+L)
            delay 0.1
            key code 9 using command down -- paste URL (Command+V)
            delay 0.1
            key code 36 -- enter
            delay 3 -- three seconds to begin loading the image, adjust if necessary
            key code 1 using command down -- Save (command+S)
            delay 0.1
            key code 36 -- enter
            repeat while exists window "Save" of application process "Safari"
                delay 0.5 -- wait the save to end
            end repeat
        end tell
        tell application "TextEdit" to activate -- back to textEdit
        tell application "System Events"
            key code 125 -- go to next line
            delay 0.1
            key code 123 using command down -- go to the start of the line (command + left key)
            delay 0.1
            key code 124 using {command down, shift down} -- select the line (commmand+shift+right arrow)
            delay 0.1
            key code 8 using command down -- copy URL (Command+C)
            delay 0.1
        end tell
    end repeat
end run

введите описание изображения здесь

4 - Поместите «EXIT» в последнюю строку документа, чтобы программа теперь выполняла задание:

введите описание изображения здесь

5 - Запустить рабочий процесс

Я проверил, и это отлично работает.

Матеус Рибейро
источник
1
Помимо того факта, что этот конкретный тип кодирования чрезвычайно подвержен поломкам во время работы, сценарии пользовательского интерфейса в целом следует использовать только в качестве последнего средства, когда не существует лучшего или более правильного способа! Проблема с вашим решением заключается в том, что это должен быть модальный процесс, то есть после его запуска пользователь не должен касаться чего-либо еще в системе до тех пор, пока это не будет сделано, многозадачность не допускается . В отличие от простого скрипта bash (который на самом деле должен быть) или ответа wch1zpink, он может / будет работать как фоновый процесс, позволяя выполнять многозадачность во время загрузки изображений!
user3439894
1
Хотя это может сработать для вас в вашем ограниченном тестировании, я могу заверить вас, что он легко ломается с длинным списком файлов.
user3439894
@ user3439894 Я согласен. Однако я предоставил достойное решение в короткие сроки. Это разовая задача, а не приложение.
Матеус Рибейро