2017-10-01 9 views
0

AppleScriptを開発して、チャンネルIDを使用してYouTubeのライブストリームの動画IDを抽出したいと考えています。Applescript from YouTube Livestream Video ID

現在、私はYoutubeがライブストリームのビデオIDを時々刻々と変更するため、手動で行っています。 例として、私は次のように練習しています。

  1. オープンhttps://www.youtube.com/embed/live_stream?channel=UCu7cGbQEMgGk8TD0ZYucM5g

  2. プレーヤー上で右クリックし、 "動画のURLをコピー" を選択

  3. このURLは私がLivestreamerを自動化するために書いたのAppleScriptに使用されています。 (このスクリプトは以下のとおりである。)YouTubeなど

スクリプトを以下には時間までの時間を変更する必要があり、時間にこのURLの時間を変化させます。私の意図は、プロセス全体を自動化することです。

-- Shraddha TV and Radio Recorder -- 
-- Developed by Anoma -- 
set pathToShraddha to ((path to downloads folder as text) & "Shraddha:") 
set outputExtension to "" 
set ls to "" 
set sourceURL to "" 
set con to "" 
set windowInfo to "" 
set theTime to "" 
set endTime to "" 

display dialog "Shraddha TV or Radio" buttons {"TV", "Radio", "Cancel"} default button 1 
if result = {button returned:"TV"} then 
    set outputExtension to ".ts" 
    set sourceURL to "https://www.youtube.com/watch?v=1yv7JjMP4Dw" 
    set ls to "livestreamer" 
    set con to "480p -o" 
else if result = {button returned:"Radio"} then 
    set outputExtension to ".mp3" 
    set sourceURL to "http://92.222.236.128:8006" 
    set ls to "ffmpeg -i" 
    set con to "-c copy" 
else 
    return 
end if 

set fn to (setFileName(outputExtension)) 

display dialog "Record now or later?" buttons {"Now", "Later", "Cancel"} default button 1 
if result = {button returned:"Now"} then 
set endTime to text returned of (display dialog "Please set the time to end recording. (Leave 'hhmm' if you want to record continuously.) " with title "Timer" default answer "hhmm" buttons {"Cancel", "Set"} default button 2) 
set windowInfo to recordMedia(ls, sourceURL, con, (POSIX path of pathToShraddha as string), fn) 
finishTime(endTime, windowInfo) 
else if result = {button returned:"Later"} then 
-- get time to be set--- 
set theTime to text returned of (display dialog "Please set the time to start recording." with title "Timer" default answer "hhmm" buttons {"Cancel", "Set"} default button 2) 
if ((theTime as string) is equal to "hhmm") then 
    display dialog "Time is not set correctly" 
    return 
end if 
set endTime to text returned of (display dialog "Please set the time to end recording. (Leave 'hhmm' if you want to record continuously.) " with title "Timer" default answer "hhmm" buttons {"Cancel", "Set"} default button 2) 
display dialog (getTimeInHoursAndMinutes()) 
display dialog theTime 

set i to 0 
repeat while (getTimeInHoursAndMinutes()) is less than theTime 
    if (i = 0) then 
     set i to (i + 1) 
     recordMedia("", "", "", "", "") 
    end if 
    delay 60 
end repeat 
finishTime(endTime, (recordMedia(ls, sourceURL, con, (POSIX path of pathToShraddha as string), fn))) 
else 
return 
end if 

-- This method generates the file name 
on setFileName(outputExt) 
set fileName to do shell script "date +'%Y-%m-%d_%H-%M-%S'" 
set outputExt to the outputExt as string 
set fileName to ("STV_" & fileName as string) & outputExt 
return fileName as string 
end setFileName 

-- This method gives the current time in "hhmm" format (24hr) 
on getTimeInHoursAndMinutes() 
set timeStr to time string of (current date) 
set hrStr to (characters 1 thru -10 of timeStr as string) 
if ((count hrStr) is less than 2) then 
    set timeStr to ((0 & timeStr) as string) 
end if 
set ampm to (characters -2 thru -1 of timeStr as string) 
if ((ampm as string) is equal to "PM") then 
    if ((hrStr as integer) is less than 12) then 
     set hrStr to (((hrStr as integer) + 12) as string) 
    end if 
else 
    if ((hrStr as integer) = 12) then 
     set hrStr to (0 as string) 
    end if 
    if ((count hrStr) is less than 2) then 
     set hrStr to ((0 & hrStr) as string) 
    end if 
end if 
set mStr to (characters 4 thru 5 of timeStr as string) 
set timeStr to (hrStr) & (mStr) 
return timeStr as string 
end getTimeInHoursAndMinutes 

-- This method Record the stream -- 
on recordMedia(ls, sourceURL, con, pathToShraddhaString, fn) 
tell application "Terminal" 
    set windowInfo to do script "caffeinate -i " & ls & space & sourceURL & space & con & space & pathToShraddhaString & fn 
    activate of windowInfo 
end tell 
return windowInfo 
end recordMedia 

-- This method end recording -- 
on finishTime(endTime, windowInfo) 
if ((endTime as string) is equal to "hhmm") then 
else 
    repeat while (getTimeInHoursAndMinutes()) is less than endTime 
     delay 60 
    end repeat 
    tell application "Terminal" 
     -- reopen 
     activate of windowInfo 
     --tell application "System Events" to keystroke "q" 
     tell application "System Events" to keystroke "c" using {control down} 
    end tell 
end if 
end finishTime 

私は、スクリプトを実行するたびにライブ・ストリームURLの抽出を自動化するスクリプトの開発に私を助けていただけますか?

ありがとうございます。

答えて

0

これはCapitainos @ Superuserの回答です。

本当にうまく動作します。

Property LivestreamURL : {} 
-- set youtube_channel to choose URL -- just remove comment tag to choose this option 
set youtube_channel to "https://www.youtube.com/embed/live_stream?channel=UCu7cGbQEMgGk8TD0ZYucM5g" 
tell application "Safari" 
    launch -- background OR use 'activate' if preferred  
    open location youtube_channel 
end tell 
-- wait for Safari to load the webpage 
if load_webpage(20) is false then return 

tell application "Safari" to set end of LivestreamURL to do JavaScript "document.links[0].href" in document 1 
    set this_ID to item 1 of LivestreamURL 
    set channel_ID to (characters 51 thru -1 of youtube_channel) as string 
    set video_ID to (characters 33 thru -1 of this_ID) as string 

-- return LivestreamURL -- or; 
return return & "Channel ID : " & channel_ID & linefeed & "Video ID  : " & video_ID & linefeed & linefeed 

-- This is the Handler 'load_webpage' 
on load_webpage(timeout_variable) 
    delay 2 
    repeat with i from 1 to the timeout_variable 
     tell application "Safari" 
      if (do JavaScript "document.readyState" in document 1) is "complete" then 
       return true 
      else if i is the timeout_variable then 
       return false 
      else 
       delay 1 
      end if 
     end tell 
    end repeat 
    return false 
end load_webpage