lib/onebox/engine/youtube_onebox.rb in onebox-1.8.68 vs lib/onebox/engine/youtube_onebox.rb in onebox-1.8.69
- old
+ new
@@ -56,107 +56,107 @@
end
end
private
- def video_id
- @video_id ||= begin
- # http://youtu.be/afyK1HSFfgw
- if uri.host["youtu.be"]
- id = uri.path[/\/([\w\-]+)/, 1]
- return id if id
- end
-
- # https://www.youtube.com/embed/vsF0K3Ou1v0
- if uri.path["/embed/"]
- id = uri.path[/\/embed\/([\w\-]+)/, 1]
- return id if id
- end
-
- # https://www.youtube.com/watch?v=Z0UISCEe52Y
- params['v']
+ def video_id
+ @video_id ||= begin
+ # http://youtu.be/afyK1HSFfgw
+ if uri.host["youtu.be"]
+ id = uri.path[/\/([\w\-]+)/, 1]
+ return id if id
end
- end
- def list_id
- @list_id ||= params['list']
- end
-
- def list_thumbnail_url
- @list_thumbnail_url ||= begin
- url = "https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/playlist?list=#{list_id}"
- response = Onebox::Helpers.fetch_response(url) rescue "{}"
- data = Onebox::Helpers.symbolize_keys(::MultiJson.load(response))
- data[:thumbnail_url]
- rescue
- nil
+ # https://www.youtube.com/embed/vsF0K3Ou1v0
+ if uri.path["/embed/"]
+ id = uri.path[/\/embed\/([\w\-]+)/, 1]
+ return id if id
end
- end
- def video_oembed_data
- url = "https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/watch?v=#{video_id}"
- response = Onebox::Helpers.fetch_response(url) rescue "{}"
- Onebox::Helpers.symbolize_keys(::MultiJson.load(response))
+ # https://www.youtube.com/watch?v=Z0UISCEe52Y
+ params['v']
end
+ end
- def list_oembed_data
+ def list_id
+ @list_id ||= params['list']
+ end
+
+ def list_thumbnail_url
+ @list_thumbnail_url ||= begin
url = "https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/playlist?list=#{list_id}"
response = Onebox::Helpers.fetch_response(url) rescue "{}"
- Onebox::Helpers.symbolize_keys(::MultiJson.load(response))
+ data = Onebox::Helpers.symbolize_keys(::MultiJson.load(response))
+ data[:thumbnail_url]
+ rescue
+ nil
end
+ end
- def embed_params
- p = { 'feature' => 'oembed', 'wmode' => 'opaque' }
+ def video_oembed_data
+ url = "https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/watch?v=#{video_id}"
+ response = Onebox::Helpers.fetch_response(url) rescue "{}"
+ Onebox::Helpers.symbolize_keys(::MultiJson.load(response))
+ end
- p['list'] = list_id if list_id
+ def list_oembed_data
+ url = "https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/playlist?list=#{list_id}"
+ response = Onebox::Helpers.fetch_response(url) rescue "{}"
+ Onebox::Helpers.symbolize_keys(::MultiJson.load(response))
+ end
- # Parse timestrings, and assign the result as a start= parameter
- start = if params['start']
- params['start']
- elsif params['t']
- params['t']
- elsif uri.fragment && uri.fragment.start_with?('t=')
- # referencing uri is safe here because any throws were already caught by video_id returning nil
- # remove the t= from the start
- uri.fragment[2..-1]
- end
+ def embed_params
+ p = { 'feature' => 'oembed', 'wmode' => 'opaque' }
- p['start'] = parse_timestring(start) if start
- p['end'] = parse_timestring params['end'] if params['end']
+ p['list'] = list_id if list_id
- # Official workaround for looping videos
- # https://developers.google.com/youtube/player_parameters#loop
- # use params.include? so that you can just add "&loop"
- if params.include?('loop')
- p['loop'] = 1
- p['playlist'] = video_id
- end
+ # Parse timestrings, and assign the result as a start= parameter
+ start = if params['start']
+ params['start']
+ elsif params['t']
+ params['t']
+ elsif uri.fragment && uri.fragment.start_with?('t=')
+ # referencing uri is safe here because any throws were already caught by video_id returning nil
+ # remove the t= from the start
+ uri.fragment[2..-1]
+ end
- URI.encode_www_form(p)
+ p['start'] = parse_timestring(start) if start
+ p['end'] = parse_timestring params['end'] if params['end']
+
+ # Official workaround for looping videos
+ # https://developers.google.com/youtube/player_parameters#loop
+ # use params.include? so that you can just add "&loop"
+ if params.include?('loop')
+ p['loop'] = 1
+ p['playlist'] = video_id
end
- def parse_timestring(string)
- if string =~ /(\d+h)?(\d+m)?(\d+s?)?/
- ($1.to_i * 3600) + ($2.to_i * 60) + $3.to_i
- end
+ URI.encode_www_form(p)
+ end
+
+ def parse_timestring(string)
+ if string =~ /(\d+h)?(\d+m)?(\d+s?)?/
+ ($1.to_i * 3600) + ($2.to_i * 60) + $3.to_i
end
+ end
- def params
- return {} unless uri.query
- # This mapping is necessary because CGI.parse returns a hash of keys to arrays.
- # And *that* is necessary because querystrings support arrays, so they
- # force you to deal with it to avoid security issues that would pop up
- # if one day it suddenly gave you an array.
- #
- # However, we aren't interested. Just take the first one.
- @params ||= begin
- p = {}
- CGI.parse(uri.query).each { |k, v| p[k] = v.first }
- p
- end
- rescue
- {}
+ def params
+ return {} unless uri.query
+ # This mapping is necessary because CGI.parse returns a hash of keys to arrays.
+ # And *that* is necessary because querystrings support arrays, so they
+ # force you to deal with it to avoid security issues that would pop up
+ # if one day it suddenly gave you an array.
+ #
+ # However, we aren't interested. Just take the first one.
+ @params ||= begin
+ p = {}
+ CGI.parse(uri.query).each { |k, v| p[k] = v.first }
+ p
end
+ rescue
+ {}
+ end
end
end
end