2010-12-09 2 views
1

URL에 .txt 파일이 있습니다. ".mp3"확장자 (예 : "http://www.example.com/path/number.mp3")가 포함 된 URL 목록 (한 줄에 하나씩)이 포함 된 "txt" 나는AppleScript로 .txt 파일의 MP3 URL 목록을 읽은 다음 숫자순으로 각 파일의 이름을 변경하십시오. (1,2,3 ...)

누군가가 AppleScript로 도와 주 시겠어요 ... 모든 오디오 파일을 다운로드해야하지만 동시에 "URLs.txt"에 나열된 파일의 순서를 유지하는 것입니다 :

읽기 "의 URL .txt "줄 단위로 각 오디오 파일을 다운로드 한 다음 각 파일의 번호 순서를"URLs "폴더에 다운로드하면 파일 순서가 그대로 유지되도록 데스크탑?
HTTP

URLs.txt : // ... 34566.mp3
에 http : // ... 234.mp3
HTTP : 예를 들어 // ... 126567. MP3

은 ...

URL을 데스크탑 폴더
...된다
2.mp3
3.mp3

1.MP3 나는 Mac에서 사파리를 실행하고있어 자동화 또는 스크립트 메뉴를 통해 두 스크립트를 실행하고 싶습니다.

도움을 주시면 큰 도움이됩니다. 대신 쉘 스크립트를 사용하고, 단지 자동화에 배치 할 수 있었던 것처럼

감사합니다,
데이브 마지막 질문으로 판단

답변

0

, 그것은 보인다. 이 경우, 다음과 같은 배쉬 스크립트가 작동 것이다 :

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

mkdir -p는 (이미 존재하는 경우 erroring없이) 폴더를 생성한다; n=1은 파일 이름에 대한 카운터를 설정합니다. 그런 다음 while read mp3; do은 파일의 모든 행을 반복하며 각 변수를 mp3 변수로 읽습니다. curl "$mp3" > ~/Desktop/URLs/$n.mp3은 해당 주소에서 파일을 다운로드하여 원하는 파일에 저장합니다. 그런 다음 은 1 씩 증가하여 n이됩니다. ((..)) 오프 수학 모드이고 ++은 자체 증가 연산자입니다. 마지막으로, < ~/Desktop/URLs.txt은 while 루프가 표준 입력을 가장한 것으로 알려줍니다 (이 파일은 read으로 확인). 내 생각 엔 AppleScript를 사용하는 것보다 훨씬 깔끔한 것입니다. AppleScript의 강점은 주로이 작업이 아닌 다른 응용 프로그램과 상호 운용되기 때문입니다.


편집 : 해당 스크립트 명령 줄에서 잘 작동하지만, 자동화가 파일의 큰 숫자가 완료되지 원인 제한의 일종을 부과한다. 내 인터넷 검색에서 우회하는 방법이나 설명을 찾을 수 없으므로 대신 AppleScript를 사용하는 것이 가장 좋습니다. 1이 길고, 그리고 내가 전에 bash는 스크립트를 사용하는 이유를 볼 수 있다고 생각하지만, 여기있다 :

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 

당신이 볼 수 있듯이, 그것은 부피가 큰, 그러나 그것은 기본적으로 동일합니다. 먼저 desktopPath을 바탕 화면 경로로 설정합니다 (놀라움). 우리가 많이 사용하게 될 것이기 때문입니다. try - on error 블록은 이미 존재하는 경우 오류를 무시하고 URLs 디렉터리를 만들려고합니다. 그런 다음 카운터를 초기화하고 URLs.txt (바탕 화면에있는)의 모든 단락 (즉, 줄)을 읽습니다. 그런 다음 URL에서 인용 부호를 사용하여 쉘에서 사용할 수 있습니다 (유출 & 또는 ;이 원하지 않는 의미를 가질 수 있음). 빈 따옴표가 아닌 실제 URL이 있는지 확인하십시오. 예를 들어, 파일이 개행 문자로 끝나는 경우에 발생할 수 있습니다. 그런 다음 curl을 사용하여 파일을 다운로드하고 n을 증가시킵니다. 파일이 많을 것으로 생각되면 say "Done!" 행을 스크립트 끝에 추가하여 완료 시점을 알 수 있습니다.

사파리를 호출하는 대신 파일을 다운로드하기 위해 do shell scriptcurl을 사용했음을 알게 될 것입니다. 파일을 다운로드해야하는 AppleScript를 작성할 때마다 curl을 두 가지 이유로 선호합니다. 하나는 Safari에서 파일을 열어 저장하는 것보다는 파일을 직접 다운로드 할 수 있습니다.이 파일을 저장하면 (필자는 쓰는 방법을 100 % 확신 할 수없는 못생긴 AppleScript에도 반영됩니다). 두 가지로, 웹 페이지가 열려 있지 않아서 (나에게는 최소한 :-)) 또는 Safari를 브라우저로 사용하지 않기 때문에 Safari를 열지 못할 수도 있습니다. 물론, 당신은 지금,하지만 당신은 언제 당신이 마음을 바꿀 수도 모를. "URL 액세스 스크립팅"에 대한 참조를 보았습니다. 그러나 여전히 지원되는지 여부는 알 수 없으며 사용하지도 않았습니다. Apple의 웹 사이트에서 이에 대한 언급을 찾을 수 없기 때문에 나는 설명서의 측면에서 실수를했으며 curl을 대신 사용했습니다.


1 :이 일을 한 가지 방법은 do shell script에 전체 bash는 스크립트를 래핑하는 것입니다. 그게 효과가 있겠지만, 어리 석다. 당신이 원하는 경우에 당신은 그것을 할 수 있지만 :-)

2 : 적절한 예 : 나는 재규어 나 표범 중 하나 때문에 사파리를 사용했고, 자신을 스위칭 할 때까지 이번 학기, 내가 전환 할 때 보지 않았다 1 주일 동안 Google 크롬으로

+0

안녕 Antal, 그 위대한 작품 - 감사합니다! 그러나 내 URLs.txt 파일에 49 개 이상의 파일에 대한 URL이있는 반면 스크립트는 "49.mp3"까지 다운로드하는 것만 같습니다 ... 스크립트에 "수량 제한"이 있습니까? –

+0

@themiddledrew : 이상하게 여겨서는 안됩니다. 아마 탈옥 (Bash는 그렇게)하는 실수를 저질렀습니다. 파일의 # 49 번과 # 50 번 줄은 무엇입니까? 또는 일반적으로 전체 파일입니까? –

+0

-1 : 모든 기능을 제쳐두고, OP는 쉘 스크립트가 아닌 Applescript를 요구했습니다. 구문 관점에서 볼 때 거의 완전히 반대입니다. 물론 그 위에 버그가있는 스크립트는 아닙니다. –

1

나는 이것이 오래된 스레드라는 것을 알고있다. 그러나 나는 나의 최근 발견이 나를 여기에 상륙시킨 같은 것을 찾는 다른 누군가에게 도움이 될 것이라고 생각했다. 이것은 AppleScript 대신 Automator를 사용하여 만들었습니다.

  1. 열기 자동화
  2. 다음에서 끌어서
  3. "텍스트에서 데이터를 추출", "지정된 텍스트 가져 오기"및 워크 플로우로 드래그 텍스트 라이브러리 잡아에서 워크 플로 문서
  4. 만들기 드롭 다운에서 "URL"을 선택하십시오.
  5. 인터넷 라이브러리에서 "다운로드 URL"을 받으십시오.
  6. URL 목록을 첫 번째 상자에 붙여넣고 상단에서 "실행"을 누르십시오. 오른쪽

이 당신의 워크 플로우가 어떻게 보일지입니다 :

enter image description here

희망 사람에게 유용 할 수 있습니다.

관련 문제