viddl-rb 0.77 → 0.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/plugins/youtube.rb +32 -15
- metadata +6 -5
    
        data/plugins/youtube.rb
    CHANGED
    
    | @@ -4,7 +4,7 @@ class Youtube < PluginBase | |
| 4 4 | 
             
              # see http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs
         | 
| 5 5 | 
             
              # TODO: we don't have all the formats from the wiki article here
         | 
| 6 6 | 
             
              VIDEO_FORMATS = {
         | 
| 7 | 
            -
                "38" => {:extension => "mp4",  :name => "MP4 Highest Quality 4096x3027 (H.264, AAC)"}, | 
| 7 | 
            +
                "38" => {:extension => "mp4",  :name => "MP4 Highest Quality 4096x3027 (H.264, AAC)"},
         | 
| 8 8 | 
             
                "37" => {:extension => "mp4",  :name => "MP4 Highest Quality 1920x1080 (H.264, AAC)"},
         | 
| 9 9 | 
             
                "22" => {:extension => "mp4",  :name => "MP4 1280x720 (H.264, AAC)"},
         | 
| 10 10 | 
             
                "46" => {:extension => "webm", :name => "WebM 1920x1080 (VP8, Vorbis)"},
         | 
| @@ -15,10 +15,10 @@ class Youtube < PluginBase | |
| 15 15 | 
             
                "35" => {:extension => "flv",  :name => "FLV 854x480 (H.264, AAC)"},
         | 
| 16 16 | 
             
                "34" => {:extension => "flv",  :name => "FLV 640x360 (H.264, AAC)"},
         | 
| 17 17 | 
             
                "5"  => {:extension => "flv",  :name => "FLV 400x240 (Soerenson H.263)"},
         | 
| 18 | 
            -
                "17" => {:extension => "3gp",  :name => "3gp"} | 
| 18 | 
            +
                "17" => {:extension => "3gp",  :name => "3gp"}
         | 
| 19 19 | 
             
              }
         | 
| 20 20 |  | 
| 21 | 
            -
              DEFAULT_FORMAT_ORDER = %w[38 37 22 45 44 18 35 34 5  | 
| 21 | 
            +
              DEFAULT_FORMAT_ORDER = %w[38 37 22 46 45 44 43 18 35 34 5 17]
         | 
| 22 22 | 
             
              VIDEO_INFO_URL       = "http://www.youtube.com/get_video_info?video_id="
         | 
| 23 23 | 
             
              VIDEO_INFO_PARMS     = "&ps=default&eurl=&gl=US&hl=en"
         | 
| 24 24 |  | 
| @@ -53,20 +53,37 @@ class Youtube < PluginBase | |
| 53 53 | 
             
              end
         | 
| 54 54 |  | 
| 55 55 | 
             
              def self.grab_single_url_filename(url)
         | 
| 56 | 
            +
                grab_url_embeddable(url) || grab_url_non_embeddable(url)
         | 
| 57 | 
            +
              end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              def self.grab_url_embeddable(url)
         | 
| 56 60 | 
             
                video_info   = get_video_info(url)
         | 
| 57 61 | 
             
                video_params = extract_video_parameters(video_info)
         | 
| 62 | 
            +
                unless video_params[:embeddable]
         | 
| 63 | 
            +
                  notify("VIDEO IS NOT EMBEDDABLE")
         | 
| 64 | 
            +
                  return false
         | 
| 65 | 
            +
                end
         | 
| 58 66 |  | 
| 59 | 
            -
                 | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
                  file_name       = PluginBase.make_filename_safe(title) + "." + VIDEO_FORMATS[selected_format][:extension]
         | 
| 67 | 
            +
                urls_formats    = extract_urls_formats(video_info)
         | 
| 68 | 
            +
                selected_format = choose_format(urls_formats)
         | 
| 69 | 
            +
                title           = video_params[:title]
         | 
| 70 | 
            +
                file_name       = PluginBase.make_filename_safe(title) + "." + VIDEO_FORMATS[selected_format][:extension]
         | 
| 64 71 |  | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
                 | 
| 72 | 
            +
                {:url => urls_formats[selected_format], :name => file_name}
         | 
| 73 | 
            +
              end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
              def self.grab_url_non_embeddable(url)
         | 
| 76 | 
            +
                video_info = open(url).read
         | 
| 77 | 
            +
                stream_map = video_info[/url_encoded_fmt_stream_map\" *: *\"([^\"]+)\"/,1]
         | 
| 78 | 
            +
                urls_formats = parse_stream_map(url_decode(stream_map))
         | 
| 79 | 
            +
                selected_format = choose_format(urls_formats)
         | 
| 80 | 
            +
                title = video_info[/<meta name="title" content="([^"]*)">/, 1]
         | 
| 81 | 
            +
                file_name = PluginBase.make_filename_safe(title) + "." + VIDEO_FORMATS[selected_format][:extension]
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                # cleaning
         | 
| 84 | 
            +
                clean_url = urls_formats[selected_format].gsub(/\\u0026[^&]*/, "")
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                {:url => clean_url, :name => file_name}
         | 
| 70 87 | 
             
              end
         | 
| 71 88 |  | 
| 72 89 | 
             
              def self.get_video_info(url)
         | 
| @@ -218,7 +235,7 @@ class Youtube < PluginBase | |
| 218 235 | 
             
                  urls_titles.merge!(grab_urls_and_titles(result_feed))
         | 
| 219 236 |  | 
| 220 237 | 
             
                  #as long as the feed has a next link we follow it and add the resulting video urls
         | 
| 221 | 
            -
                  loop do | 
| 238 | 
            +
                  loop do
         | 
| 222 239 | 
             
                    next_link = result_feed.search("//feed/link[@rel='next']").first
         | 
| 223 240 | 
             
                    break if next_link.nil?
         | 
| 224 241 | 
             
                    result_feed = Nokogiri::HTML(open(next_link["href"]))
         | 
| @@ -232,7 +249,7 @@ class Youtube < PluginBase | |
| 232 249 | 
             
                def grab_urls_and_titles(feed)
         | 
| 233 250 | 
             
                  feed.remove_namespaces!  #so that we can get to the titles easily
         | 
| 234 251 | 
             
                  urls   = feed.search("//entry/link[@rel='alternate']").map { |link| link["href"] }
         | 
| 235 | 
            -
                  titles = feed.search("//entry/group/title").map { |title| title.text } | 
| 252 | 
            +
                  titles = feed.search("//entry/group/title").map { |title| title.text }
         | 
| 236 253 | 
             
                  Hash[urls.zip(titles)]    #hash like this: url => title
         | 
| 237 254 | 
             
                end
         | 
| 238 255 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,12 +1,12 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: viddl-rb
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 4 | 
            +
              hash: 151
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 0
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              version: "0. | 
| 8 | 
            +
              - 78
         | 
| 9 | 
            +
              version: "0.78"
         | 
| 10 10 | 
             
            platform: ruby
         | 
| 11 11 | 
             
            authors: 
         | 
| 12 12 | 
             
            - Marc Seeger
         | 
| @@ -14,7 +14,7 @@ autorequire: | |
| 14 14 | 
             
            bindir: bin
         | 
| 15 15 | 
             
            cert_chain: []
         | 
| 16 16 |  | 
| 17 | 
            -
            date: 2013- | 
| 17 | 
            +
            date: 2013-03-21 00:00:00 Z
         | 
| 18 18 | 
             
            dependencies: 
         | 
| 19 19 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 20 20 | 
             
              name: nokogiri
         | 
| @@ -160,9 +160,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 160 160 | 
             
            requirements: []
         | 
| 161 161 |  | 
| 162 162 | 
             
            rubyforge_project: viddl-rb
         | 
| 163 | 
            -
            rubygems_version: 1.8. | 
| 163 | 
            +
            rubygems_version: 1.8.25
         | 
| 164 164 | 
             
            signing_key: 
         | 
| 165 165 | 
             
            specification_version: 3
         | 
| 166 166 | 
             
            summary: An extendable commandline video downloader for flash video sites.
         | 
| 167 167 | 
             
            test_files: []
         | 
| 168 168 |  | 
| 169 | 
            +
            has_rdoc: false
         |