All pastes #1460001 Raw Edit

Subtitles downloader

public text v1 · immutable
#1460001 ·published 2009-06-14 14:34 UTC
rendered paste body
#// ==UserScript==#// @name           Download YouTube Captions#// @namespace      http://userscripts.org/*#// @include        http://www.youtube.com/watch?*#// ==/UserScript==#var id = unsafeWindow.pageVideoId;#var caption_array=[false];#function make_timeline(time)#{#        var string="";#        var integer=0;#        time=time "";#        if(seconds=time.match(/\.(.*)/))#                seconds=Math.round(parseFloat(seconds[1].substr(0,1) "." seconds[1].substr(1,2)));#        else#                seconds="0";#        time=parseInt(time);#        if(time>=36000)#        {#                integer=Math.floor(time/3600);#                time-=3600*integer;#                string =integer ":";#        }#        else if(time>=3600)#        {#                integer=Math.floor(time/3600);#                time-=3600*integer;#                string ="0" integer ":";#        }#        else string ="00:";#        if(time>=600)#        {#                integer=Math.floor(time/60);#                time-=60*integer;#                string =integer ":";#        }#        else if(time>=60)#        {#                integer=Math.floor(time/60);#                time-=60*integer;#                string ="0" integer ":";#        }#        else#                string ="00:";#        integer=Math.floor(time);#        if(time>=10)#                string =integer "," seconds;#        else#                string ="0" integer "," seconds;#        return string;#};#function parse_captions(xml)#{#        var captions=new DOMParser().parseFromString(xml,"text/xml").getElementsByTagName("text");#        var srt_output="";#        Array.forEach(captions,function(caption,i)#        {#                srt_output = i   "\n"#                          make_timeline(caption.getAttribute("start"))#                          " --> "#                          make_timeline(parseFloat(caption.getAttribute("start"))#                          parseFloat(caption.getAttribute("dur")))#                          "\n"   caption.textContent.replace(/&#(\d );/g,function($0, $1) {#                                return String.fromCharCode(Number($1));#                        }).replace(/&/g,"&")   "\n\n";#        });#        return srt_output;#};#function load_caption(selector)#{#        var caption=caption_array[selector.selectedIndex];#        if(!caption)return;#        GM_xmlhttpRequest({#                method:"GET",#                url:"http://video.google.com/timedtext?hl=" caption.lang_code "&lang=" caption.lang_code "&name=" caption.name "&v=" id,#                onload:function(xhr)#                {#                        if(xhr.responseText!="")#                                location.href="data:text/srt;charset=utf-8," encodeURIComponent(parse_captions(xhr.responseText));#                        else#                                alert("Error: No response from server.");#                        document.getElementById("captions_selector_option").selected=true;#                }#        });#};#function load_captions(video_code)#{#        GM_xmlhttpRequest({#                method:"GET",#                url:"http://video.google.com/timedtext?hl=en&v=" id "&type=list",#                onload:function(xhr)#                {#                        if(xhr.responseText=="")#                        {#                                document.getElementById("captions_selector_option").innerHTML="No Captions";#                                return;#                        }#                        var captions=new DOMParser().parseFromString(xhr.responseText,"text/xml").getElementsByTagName("track");#                        var select=document.getElementById("captions_selector");#                        Array.forEach(captions,function(caption,i)#                        {#                                var caption_info= {#                                        name : caption.getAttribute("name"),#                                        lang_code : caption.getAttribute("lang_code"),#                                        lang_name : caption.getAttribute("lang_translated")#                                };#                                caption_array.push(caption_info);#                                var option=document.createElement("option");#                                option.innerHTML=caption_info.lang_name;#                                select.appendChild(option);#                        });#                        document.getElementById("captions_selector_option").innerHTML="-Download Captions-";#                        document.getElementById("captions_selector").disabled=false;#                }#        });#};#(function()#{#        var div=document.createElement("div")#        div.setAttribute("style","padding-top:5px;");#        var select=document.createElement("select");#        select.id="captions_selector";#        select.disabled=true;#        var option=document.createElement("option");#        option.id="captions_selector_option";#        option.innerHTML="Loading Captions";#        option.selected=true;#        select.appendChild(option);#        select.addEventListener("change",function()#        {#                load_caption(this);#        },false);#        div.appendChild(select);#        var tabs=document.getElementById("watch-actions-area").getElementsByTagName("div")[0];#        var last_element=tabs.getElementsByTagName("div");#        tabs.insertBefore(div, last_element[last_element.length-1]);#        load_captions();#})();