2010-12-09 6 views
1

Ich habe eine .txt-Datei auf meinem Desktop namens "URLs. txt "enthält eine Liste von URLs (eine pro Zeile) mit" .mp3 "Erweiterung (dh" http://www.example.com/path/number.mp3 "). Ich brauche alle Audio-Dateien herunterladen, aber zugleich die Reihenfolge der Dateien aufgelistet in „URLs.txt“ behalten ...Applescript Liste von MP3-URLs in TXT-Datei zu lesen, dann alle Umbenennung jeder Datei in numerischer Reihenfolge herunterladen (1,2,3 ...)

Könnte jemand bitte mit einem Apple helfen, dieses wird:

Read "URLs .txt "zeilenweise, lade jede Audiodatei herunter, benenne aber jede Datei in numerischer Reihenfolge (im laufenden Betrieb) um die Dateilistenreihenfolge beim Herunterladen in" URLs "Ordner auf Desktop? Zum Beispiel:

URLs.txt
http: // ... 34566.mp3
http: // ... 234.mp3
http: // ... 126.567. mp3

... wird ...

URLs Desktop-Ordner
1.mp3
2.mp3
3.mp3

Ich bin mit Safari auf einem Mac und möchte das Skript entweder über Automator oder Script Menu auszuführen.

Jede Hilfe sehr geschätzt!

Danke,
Dave

Antwort

0

von Ihrer letzten Frage zu urteilen, sieht es aus wie Sie stattdessen einen Shell-Skript verwenden könnte, und es nur in Automator platzieren. In diesem Fall würde der folgende Bash-Skript arbeiten:

#!/bin/bash 
mkdir -p ~/Desktop/URLs 
n=1 
while read mp3; do 
    curl "$mp3" > ~/Desktop/URLs/$n.mp3 
    ((n++)) 
done < ~/Desktop/URLs.txt 

Die mkdir -p erstellt den Ordner (ohne erroring falls bereits vorhanden); n=1 richtet Ihren Zähler für die Dateinamen ein. Dann springt while read mp3; do über jede Zeile in der Datei und liest jeden in die Variable mp3; curl "$mp3" > ~/Desktop/URLs/$n.mp3 lädt die Datei unter dieser Adresse herunter und speichert sie in der gewünschten Datei. Dann ((n++)) Inkrementen n um eins; ((..)) markieren Mathe-Modus, und ++ ist der Self-Inkrement-Operator. Schließlich teilt die < ~/Desktop/URLs.txt der while-Schleife mit, dass ihre Standardeingabe (was sie mit read überprüft) aus dieser Datei stammt. Ich vermute, dass dies sauberer ist als die Verwendung von AppleScript, da die Stärken von AppleScript hauptsächlich auf die Interoperabilität mit anderen Anwendungen zurückzuführen sind, um die es bei dieser Aufgabe nicht geht.


Edit: Während das Skript von der Kommandozeile funktioniert gut, erlegt Automator irgendeine Art von Beschränkung, die es nicht bis zum Ende mit einem großen Anzahl von Dateien verursacht. Ich konnte beim Googlen keine Erklärung oder einen Weg finden, um es zu umgehen. Daher denke ich, dass es am besten ist, stattdessen AppleScript zu verwenden. Es ist länger, und ich denke, Sie werden sehen, warum ich vor ein Bash-Skript verwendet, aber hier ist es:

property desktopPath : path to desktop as string 

try 
    tell application "Finder" to ¬ 
     make folder at (path to desktop) with properties {name:"URLs"} 
on error number -48 
    -- The folder already exists 
end try 

set n to 1 
repeat with urlLine in paragraphs of (read alias (desktopPath & "URLs.txt")) 
    set qURL to quoted form of urlLine 
    if qURL ≠ "''" then 
     set dest to quoted form of ¬ 
      (POSIX path of desktopPath & "URLs/" & n & ".mp3") 
     do shell script "curl " & quoted form of urlLine & " > " & dest 
     set n to n + 1 
    end if 
end repeat 

Wie Sie sehen können, ist es sperriger, aber es ist im Grunde das gleiche. Wir haben zuerst desktopPath als den Weg zum Desktop (Überraschung) gesetzt, da wir es sehr oft verwenden werden. Der Baustein try - on error versucht, das Verzeichnis URLs zu erstellen, wobei der Fehler ignoriert wird, wenn er bereits vorhanden ist. Wir initialisieren dann unseren Zähler und lesen jeden Absatz (also Zeile) in URLs.txt (auf dem Desktop). Wir zitieren dann die URL, so dass wir sie in der Shell verwenden können (wobei ein streunender & oder ; eine unerwünschte Bedeutung haben könnte), und stellen Sie sicher, dass es dort tatsächlich eine URL gibt und keine leeren Anführungszeichen. (Das kann beispielsweise passieren, wenn die Datei mit einem Zeilenumbruch endet.) Wir verwenden dann curl, um die Datei herunterzuladen, und inkrementieren n. Wenn Sie glauben, dass Sie viele Dateien haben, können Sie am Ende des Skripts eine Zeile say "Done!" hinzufügen, damit Sie wissen, wann es fertig ist.

Sie werden feststellen, dass ich do shell script und curl verwendet habe, um eine Datei herunterzuladen, anstatt nach Safari zu rufen. Immer wenn ich AppleScripts schreibe, die eine Datei herunterladen müssen, verwende ich aus zwei Gründen lieber curl. Erstens kann ich die Datei direkt herunterladen, anstatt sie in Safari zu öffnen und dann zu speichern (was sich auch in hässlichem AppleScript widerspiegeln würde, dass ich nicht 100% sicher bin, wie ich schreiben soll); Zweitens, Safari ist möglicherweise nicht geöffnet, weil Sie keine Webseiten geöffnet haben (unwahrscheinlich, zumindest für mich :-)), oder weil Sie Safari nicht als Browser verwenden. Sicher, Sie tun jetzt, aber Sie wissen nie, wann Sie Ihre Meinung ändern könnten. Ich habe auch einen Verweis auf etwas namens "URL Access Scripting" gesehen, aber ich kann nicht sagen, ob das noch unterstützt wird oder nicht, und ich habe es nie benutzt. Da ich auf der Apple-Website keine Erwähnung davon finden kann, habe ich mich auf der Seite der Dokumentation geirrt und bin stattdessen mit curl gegangen.


1: Eine Möglichkeit, dies zu tun, ist das ganze Bash-Skript in einem do shell script zu wickeln. Das würde funktionieren, aber es wäre irgendwie dumm. Sie könnten es tun, wenn Sie wollten, aber:

2: Case in point: Ich hatte Safari seit entweder Jaguar oder Panther, und sah mich nicht wechseln - bis Anfang dieses Halbjahres, als ich wechselte innerhalb von einer Woche auf Google Chrome.

+0

Hallo Antal, das funktioniert super - danke! Aber das Skript scheint nur bis zu "49.mp3" herunterzuladen, während meine URLs.txt Datei URLs zu mehr als 49 Dateien hat ... Gibt es eine "Mengenbeschränkung" für das Skript, das Sie mir gegeben haben? –

+0

@themiddledrew: Seltsam, sollte nicht sein. Ich habe wahrscheinlich einen Fehler beim Entkommen gemacht (Bash ist so) - was sind die Zeilen # 49 und # 50 der Datei? Oder im Allgemeinen die Datei als Ganzes? –

+0

-1: Alle Funktionen beiseite, die OP fragte nach Applescript kein Shell-Skript - von einem Syntaxstandpunkt aus sind sie fast vollständig voneinander entfernt - und sicherlich kein Buggy-Skript darüber. –

1

Ich weiß, das ist ein alter Thread, aber ich dachte, meine jüngsten Erkenntnisse könnten hilfreich für jemanden sein, der nach dem gleichen Ding sucht, das mich hierher gebracht hat. Dies ist, was ich mit Automator anstelle von AppleScript kam.

  1. öffnen Automator
  2. erstellen Workflow-Dokument
  3. Unter dem Text Library greifen "Angegebene Text Get" und ziehen Sie es in Ihren Workflow
  4. Ziehen Sie dann in "Extrahieren von Daten aus Text"
  5. Dann Wählen Sie "URLs" aus dem Dropdown-Menü
  6. Unter der Internet-Bibliothek erhalten Sie "Download URLs"
  7. Fügen Sie Ihre Liste von URLs in die erste Box und drücken Sie "Run" in der Spitze rechts

Dies ist, was Sie Ihren Workflow aussehen soll:

enter image description here

Hoffentlich Nutzungs jemand sein kann.

Verwandte Themen