การตัด youtube-dl ลงใน automator ผ่าน applescript


2

ฉันหวังว่าจะสร้างแอปพลิเคชันอัตโนมัติที่แจ้งให้ผู้ใช้ป้อนข้อมูล (เช่น youtube url) และดาวน์โหลดโดยใช้ youtube-dl (ติดตั้งผ่าน Homebrew แล้ว) หลังจากนี้ฉันพยายามใช้คำสั่งyoutube-dl URL_HERE -eที่ดึงชื่อของวิดีโอ ฉันหวังว่าจะส่งการแจ้งเตือนว่า "ดาวน์โหลดสำเร็จแล้ว TITLE_VIDEO" หลังจากดาวน์โหลดสำเร็จ (หากดาวน์โหลดสำเร็จ) ฉันกำลังใช้คำสั่ง "Run Applescript" ของ automator

นี่คือทั้งหมดที่ฉันได้รับ:

display dialog "What is the youtube URL you want to download?" default answer ""
set answer to text returned of result

tell application "Terminal"
    activate
    do script with command "youtube-dl -f 140 " & answer
end tell

display notification "Successfully downloaded " & TITLE_HERE sound name "Blow"

ฉันใหม่สำหรับ applescript ดังนั้นมีเพียงฟังก์ชันพื้นฐาน / ฟังก์ชันที่สามารถอธิบายได้ง่าย

สิ่งที่ฉันคิดคือการทำคำสั่งเทอร์มินัลyoutube-dl URL_HERE -eซึ่งจะส่งคืนหัวเรื่องของวิดีโอ (TITLE) และตั้งให้เป็นตัวแปรแล้วส่งผ่านตัวแปรนั้นไปที่display notification

คำตอบ:


1

ดีมาก - UI ที่เรียบง่ายเช่นนั้นอาจมีประโยชน์มากในหลาย ๆ สถานการณ์!

ลองสิ่งนี้:

display dialog "URL to fetch?" default answer ""
set theUrl to (text returned of result)

--> get file
do shell script "cd /tmp/; /usr/local/bin/youtube-dl " & theUrl

--> get title
set theTitle to do shell script "/usr/local/bin/youtube-dl -e " & theUrl

display notification "Fetched " & theTitle sound name "Blow"
delay 1 --> avoid quit before notice

น่าเสียดายที่สคริปต์ youtube-dl ไม่ได้ดาวน์โหลดวิดีโอเมื่อใช้แฟล็ก -e (และเกิดข้อผิดพลาดเมื่อพยายามใช้ตัวเลือก --exec CMD)

ลงเอยด้วยการรันคำสั่งสองครั้ง; ก่อนอื่นดาวน์โหลดไปยัง / tmp จากนั้นรับหัวเรื่อง

ยังสามารถใช้รหัสกระบวนการ (pid) เพื่อติดตามความคืบหน้า ฯลฯ :)

command 2>/dev/null & pid=$!

อัปเดต: ฉันไม่สามารถรับเอาต์พุตของคำสั่งบางอย่างผ่านทาง applescript เช่น 'nettop' อาจมีวิธีการแก้ไข นี่คือความพยายามที่เลอะเทอะของฉันในการใช้การตรวจสอบหมายเลข ...

set question to display dialog "URL to fetch?" default answer "" buttons {"Cancel", "Open in Browser", "Download"} default button 3
set pageURL to (text returned of result)
if pageURL is "" then return "No URL"
set choice to (button returned of question)

if choice is "Download" then
    try
        set pid to do shell script "cd /tmp/; /usr/local/bin/youtube-dl --newline " & pageURL & " > /tmp/vidstatus 2>&1 & echo $!"
        delay 1
        repeat while ((do shell script "kill -0 " & pid) is "") -- check if pid is still responding
            display dialog "Status: " & (do shell script "tail -n1 /tmp/vidstatus") -- display last line of output
        end repeat
    on error
        display dialog "Download complete!" -- eh, success, hopefully :) 
    end try

else if choice is "Open in Browser" then
    try
        set videoURL to do shell script "/usr/local/bin/youtube-dl -g " & pageURL
        open location videoURL -- browser can stream and save file
    on error
        display dialog "Download aborted!"
    end try
end if

นี่คือสิ่งที่ฉันกำลังมองหา! ขอขอบคุณ! ฉันรู้ว่าฉันสามารถปรับแต่งการแจ้งเตือนได้จากที่นี่โดยใช้เอกสารประกอบ คุณสามารถอธิบายความคืบหน้า pid / track ได้หรือไม่? ฉันใหม่สำหรับ applescript ดังนั้นฉันจึงไม่แน่ใจว่าฉันจะสามารถใช้สิ่งนั้นได้อย่างไร
William

ยินดีต้อนรับคุณ! โปรดทราบว่านี่ไม่ใช่วิธีแก้ปัญหาที่เป็นของแข็ง / เร็ว :) พยายามอ่านข้อมูลเครือข่ายที่ได้รับสำหรับกระบวนการดาวน์โหลดและอย่างใดอย่างหนึ่งให้ป้อนว่าเป็นการอัปเดตอย่างต่อเนื่องไปยังกล่องโต้ตอบ / การแจ้งเตือนของ applescript .. ) youtube-dl มีคลาสไพ ธ อนที่สามารถใช้งานได้สะดวก
EO2

0

คุณต้องตรวจสอบค่าส่งคืนของเชลล์สคริปต์ ดูเอกสารประกอบของ Appledo shellในหัวข้อการรับคำตอบ

เชลล์สคริปต์รายงานข้อผิดพลาดได้อย่างไร

คำสั่งเชลล์ทั้งหมดส่งคืนสถานะจำนวนเต็มเมื่อเสร็จสิ้น: ศูนย์หมายถึงสำเร็จ สิ่งอื่นหมายถึงความล้มเหลว หากสคริปต์ออกด้วยสถานะที่ไม่เป็นศูนย์เชลล์สคริปต์จะส่งข้อผิดพลาด AppleScript ที่มีสถานะเป็นหมายเลขข้อผิดพลาด

set success to do shell script "cd /tmp/; /usr/local/bin/youtube-dl " & theUrl

ดังนั้นคุณสามารถตรวจสอบsuccessตัวแปรได้

if success is equal to 0

คุณสามารถใช้tryและon errorเพื่อตรวจสอบว่าการดาวน์โหลดใช้งานได้หรือไม่

try
    do shell script "cd /tmp/; /usr/local/bin/youtube-dl " & theUrl
on error
    -- show error message
end try
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.