video_info 2.3.3 → 2.4.0

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.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -0
  3. data/lib/video_info.rb +5 -1
  4. data/lib/video_info/provider.rb +16 -10
  5. data/lib/video_info/providers/dailymotion.rb +2 -4
  6. data/lib/video_info/providers/vimeo.rb +1 -3
  7. data/lib/video_info/providers/vimeoplaylist.rb +0 -2
  8. data/lib/video_info/providers/vkontakte.rb +10 -13
  9. data/lib/video_info/providers/wistia.rb +63 -0
  10. data/lib/video_info/providers/youtube.rb +6 -4
  11. data/lib/video_info/version.rb +1 -1
  12. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/_available_/with_This_video_does_not_exist_or_has_been_deleted_/_available_/.yml +11 -7
  13. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/_available_/with_valid_video/_available_/.yml +9 -5
  14. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_date/.yml +12 -8
  15. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_description/.yml +12 -8
  16. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_duration/.yml +12 -8
  17. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_keywords/.yml +12 -8
  18. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_large/.yml +12 -8
  19. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_medium/.yml +12 -8
  20. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_thumbnail_small/.yml +12 -8
  21. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_title/.yml +12 -8
  22. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Dailymotion/with_video_x7lni3/_view_count/.yml +12 -8
  23. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_password_required_video/_available_/.yml +5 -5
  24. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_this_video_does_not_exist_video/_available_/.yml +4 -4
  25. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/_available_/with_valid_video/_available_/.yml +6 -6
  26. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_898029/_date/.yml +10 -10
  27. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_898029/_description/.yml +11 -11
  28. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_898029/_duration/.yml +10 -10
  29. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_898029/_height/.yml +13 -13
  30. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_898029/_keywords/.yml +12 -12
  31. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_898029/_thumbnail_large/.yml +10 -10
  32. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_898029/_thumbnail_medium/.yml +10 -10
  33. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_898029/_thumbnail_small/.yml +13 -13
  34. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_898029/_title/.yml +10 -10
  35. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_898029/_view_count/.yml +12 -12
  36. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vimeo/with_video_898029/_width/.yml +12 -12
  37. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_VimeoPlaylist/_available_/with_invalid_playlist/_available_/.yml +4 -4
  38. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_VimeoPlaylist/_available_/with_valid_playlist/_available_/.yml +4 -4
  39. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_VimeoPlaylist/with_playlist_1921098/_description/.yml +8 -8
  40. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_VimeoPlaylist/with_playlist_1921098/_thumbnail_large/.yml +9 -9
  41. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_VimeoPlaylist/with_playlist_1921098/_thumbnail_medium/.yml +9 -9
  42. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_VimeoPlaylist/with_playlist_1921098/_thumbnail_small/.yml +8 -8
  43. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_VimeoPlaylist/with_playlist_1921098/_title/.yml +8 -8
  44. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_VimeoPlaylist/with_playlist_1921098/_videos/.yml +27 -27
  45. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/_available_/with_invalid_video/_available_/.yml +3 -3
  46. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/_available_/with_valid_video/_available_/.yml +1084 -1058
  47. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video-54799401_165822734/_title/.yml +1383 -1272
  48. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_108370515/_description/.yml +1085 -1059
  49. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_108370515/_duration/.yml +1085 -1059
  50. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_108370515/_embed_code/.yml +1084 -1058
  51. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_108370515/_embed_url/.yml +1085 -1059
  52. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_108370515/_height/.yml +1085 -1059
  53. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_108370515/_keywords/.yml +1085 -1059
  54. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_108370515/_title/.yml +1085 -1059
  55. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_108370515/_view_count/.yml +1085 -1059
  56. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Vkontakte/with_video_video39576223_108370515/_width/.yml +1084 -1058
  57. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/_available_/with_invalid_video/_available_/.yml +65 -0
  58. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/_available_/with_valid_video/_available_/.yml +67 -0
  59. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_duration/.yml +73 -0
  60. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_height/.yml +73 -0
  61. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_large/.yml +73 -0
  62. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_medium/.yml +73 -0
  63. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_thumbnail_small/.yml +73 -0
  64. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_title/.yml +73 -0
  65. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_pxonqr42is/_width/.yml +73 -0
  66. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_duration/.yml +73 -0
  67. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_height/.yml +73 -0
  68. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_large/.yml +73 -0
  69. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_medium/.yml +73 -0
  70. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_thumbnail_small/.yml +73 -0
  71. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_title/.yml +73 -0
  72. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Wistia/with_video_rs1me54mpw/_width/.yml +73 -0
  73. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_valid_video/_available_/.yml +4 -4
  74. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_video_is_unavailable_video/_available_/.yml +4 -4
  75. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/_available_/with_video_no_longer_available_due_to_a_copyright_claim_video/_available_/.yml +4 -4
  76. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_date/.yml +6 -6
  77. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_description/.yml +6 -6
  78. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_duration/.yml +6 -6
  79. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_keywords/.yml +6 -6
  80. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_thumbnail_large/.yml +6 -6
  81. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_thumbnail_medium/.yml +6 -6
  82. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_thumbnail_small/.yml +6 -6
  83. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_title/.yml +11 -9
  84. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_Youtube/with_video_mZqGqE0D0n4/_view_count/.yml +6 -6
  85. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_invalid_playlist/_available_/.yml +4 -4
  86. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/_available_/with_valid_playlist/_available_/.yml +5 -5
  87. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL0E8117603D70E10A_in_embed_path/_videos/.yml +5 -5
  88. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_description/.yml +10 -10
  89. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_large/.yml +13 -15
  90. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_medium/.yml +10 -10
  91. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_thumbnail_small/.yml +10 -10
  92. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_title/.yml +10 -10
  93. data/spec/fixtures/vcr_cassettes/VideoInfo_Providers_YoutubePlaylist/with_playlist_PL9hW1uS6HUftLdHI6RIsaf/_videos/.yml +11 -11
  94. data/spec/lib/video_info/providers/wistia_spec.rb +168 -0
  95. data/video_info.gemspec +1 -1
  96. metadata +37 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 72c245255365b08898efdbbb934299fb28d7cde7
4
- data.tar.gz: 4f22d1a8c36481e6443da20e3c9c7654fa4696cc
3
+ metadata.gz: f40dace9501dc0754efd519f98cf23d6eb037281
4
+ data.tar.gz: d486727f7fc75c2246d80686d9ccf44c1f8aa15b
5
5
  SHA512:
6
- metadata.gz: 30e74b2e1ebece18597776a137ad4b4e9de2bd634a36022c7b25d86f5248ab63c6e7229e512b5f09d73bd948286ad324d0cbc768559d1ef17b1751af6ca6efe0
7
- data.tar.gz: 406f49ea05c3c540640472ba6d02a1d68b1184b163f72e891c85b4899a252b64b321806fc65d60f707cdee93101f505f2b78d15205f62efaf11442c8a6c62c08
6
+ metadata.gz: faad587f1bfea1c7a37a9d134521b13e3ba7bfd892eda1e6dce7ab3a5b44510f3f7770957206a9139105fa77f3c664daef9134f52e1148a094b13e638b935d5d
7
+ data.tar.gz: f0d1f569b0ddafab94d51b0ebef7f0e8a4ec0f1f47cbde0f1fead7a68ee9ceb052b7908c65f053679959e274d72868d63be79a5c0062bbfbb790ded3efab8db3
data/README.md CHANGED
@@ -48,6 +48,20 @@ video = VideoInfo.new("http://vimeo.com/898029")
48
48
  # video.embed_url => "http://player.vimeo.com/video/898029"
49
49
  # video.embed_code => "'<iframe src="//player.vimeo.com/video/898029?title=0&amp;byline=0&amp;portrait=0&amp;autoplay=0" frameborder="0"></iframe>'"
50
50
 
51
+ video = VideoInfo.new("http://fast.wistia.com/embed/medias/pxonqr42is")
52
+ # video.available? => true
53
+ # video.provider => "Wistia"
54
+ # video.video_id => "pxonqr42is"
55
+ # video.title => "Understanding Analytics"
56
+ # video.duration => 250 (in seconds)
57
+ # video.width => 960
58
+ # video.height => 568
59
+ # video.thumbnail_small => "https://embed-ssl.wistia.com/deliveries/0fccbdc60ade35723f79f1c002bc61b135b610fa.jpg?image_crop_resized=960x540"
60
+ # video.thumbnail_medium => "https://embed-ssl.wistia.com/deliveries/0fccbdc60ade35723f79f1c002bc61b135b610fa.jpg?image_crop_resized=960x540"
61
+ # video.thumbnail_large => "https://embed-ssl.wistia.com/deliveries/0fccbdc60ade35723f79f1c002bc61b135b610fa.jpg?image_crop_resized=960x540"
62
+ # video.embed_url => "//fast.wistia.net/embed/iframe/pxonqr42is"
63
+ # video.embed_code => "'<iframe src="//fast.wistia.net/embed/iframe/pxonqr42is" frameborder="0"></iframe>'"
64
+
51
65
  video = VideoInfo.new("http://www.youtube.com/watch?v=mZqGqE0D0n4")
52
66
  # video.available? => true
53
67
  # video.video_id => "mZqGqE0D0n4"
data/lib/video_info.rb CHANGED
@@ -7,7 +7,11 @@ class VideoInfo
7
7
  class UrlError < StandardError; end
8
8
  extend Forwardable
9
9
 
10
- PROVIDERS = %w[Vimeo VimeoPlaylist Vkontakte Youtube YoutubePlaylist Dailymotion]
10
+ PROVIDERS = %w[
11
+ Dailymotion Vkontakte Wistia
12
+ Vimeo VimeoPlaylist
13
+ Youtube YoutubePlaylist
14
+ ]
11
15
  PROVIDERS.each { |p| require "video_info/providers/#{p.downcase}" }
12
16
 
13
17
  def_delegators :@provider, :provider, :video_id, :video_owner, :url, :data
@@ -13,13 +13,17 @@ class VideoInfo
13
13
  end
14
14
 
15
15
  def self.usable?(url)
16
- raise NotImplementedError.new('Provider class must implement .usable? public method')
16
+ raise NotImplementedError.new(
17
+ 'Provider class must implement .usable? public method'
18
+ )
17
19
  end
18
20
 
19
21
  def embed_code(options = {})
20
22
  iframe_attributes = options.fetch(:iframe_attributes, {})
21
23
  iframe_attrs = ["src=\"#{_embed_url(options)}\"", "frameborder=\"0\""]
22
- iframe_attrs << _hash_to_attributes(_default_iframe_attributes.merge(iframe_attributes))
24
+ iframe_attrs << _hash_to_attributes(
25
+ _default_iframe_attributes.merge(iframe_attributes)
26
+ )
23
27
 
24
28
  "<iframe #{iframe_attrs.reject(&:empty?).join(" ")}></iframe>"
25
29
  end
@@ -28,7 +32,6 @@ class VideoInfo
28
32
  @data ||= _set_data_from_api
29
33
  end
30
34
 
31
-
32
35
  def available?
33
36
  !%w[403 404].include?(_response_code)
34
37
  end
@@ -37,14 +40,13 @@ class VideoInfo
37
40
 
38
41
  def _response_code
39
42
  response = nil
40
- Net::HTTP.start(_api_base, 80) {|http|
41
- response = http.head(_api_path)
42
- }
43
+ Net::HTTP.start(_api_base, 80) { |http| response = http.head(_api_path) }
43
44
  response.code
44
45
  end
45
46
 
46
47
  def _clean_options(options)
47
- options = { 'User-Agent' => "VideoInfo/#{VideoInfo::VERSION}" }.merge(options)
48
+ options =
49
+ { 'User-Agent' => "VideoInfo/#{VideoInfo::VERSION}" }.merge(options)
48
50
  options.dup.each do |key, value|
49
51
  if _not_openuri_option_symbol?(key)
50
52
  options[_http_header_field(key)] = value
@@ -79,11 +81,15 @@ class VideoInfo
79
81
  end
80
82
 
81
83
  def _url_regex
82
- raise NotImplementedError.new('Provider class must implement #_url_regex private method')
84
+ raise NotImplementedError.new(
85
+ 'Provider class must implement #_url_regex private method'
86
+ )
83
87
  end
84
88
 
85
89
  def _api_url
86
- raise NotImplementedError.new('Provider class must implement #_api_url private method')
90
+ raise NotImplementedError.new(
91
+ 'Provider class must implement #_api_url private method'
92
+ )
87
93
  end
88
94
 
89
95
  def _embed_url(options)
@@ -97,7 +103,7 @@ class VideoInfo
97
103
 
98
104
  def _hash_to_attributes(hash)
99
105
  return unless hash.is_a?(Hash)
100
- hash.map{|k,v| "#{k}=\"#{v}\""}.join(' ')
106
+ hash.map { |k, v| "#{k}=\"#{v}\"" }.join(' ')
101
107
  end
102
108
 
103
109
  def _hash_to_params(hash)
@@ -1,7 +1,6 @@
1
1
  class VideoInfo
2
2
  module Providers
3
3
  class Dailymotion < Provider
4
-
5
4
  def self.usable?(url)
6
5
  url =~ /(dai(?:\.ly|lymotion\.com))/
7
6
  end
@@ -50,9 +49,9 @@ class VideoInfo
50
49
 
51
50
  def _response_code
52
51
  response = nil
53
- Net::HTTP.start(_api_base, 443, use_ssl: true) {|http|
52
+ Net::HTTP.start(_api_base, 443, use_ssl: true) do |http|
54
53
  response = http.get(_api_path)
55
- }
54
+ end
56
55
  response.code
57
56
  end
58
57
 
@@ -79,7 +78,6 @@ class VideoInfo
79
78
  def _default_url_attributes
80
79
  { autoplay: 0 }
81
80
  end
82
-
83
81
  end
84
82
  end
85
83
  end
@@ -1,7 +1,6 @@
1
1
  class VideoInfo
2
2
  module Providers
3
3
  class Vimeo < Provider
4
-
5
4
  def self.usable?(url)
6
5
  url =~ /(vimeo\.com\/(?!album|hubnut\/album).*)/
7
6
  end
@@ -45,7 +44,7 @@ class VideoInfo
45
44
  end
46
45
 
47
46
  def _api_base
48
- "vimeo.com"
47
+ 'vimeo.com'
49
48
  end
50
49
 
51
50
  def _api_path
@@ -66,7 +65,6 @@ class VideoInfo
66
65
  portrait: 0,
67
66
  autoplay: 0 }
68
67
  end
69
-
70
68
  end
71
69
  end
72
70
  end
@@ -1,7 +1,6 @@
1
1
  class VideoInfo
2
2
  module Providers
3
3
  class VimeoPlaylist < Vimeo
4
-
5
4
  alias_method :playlist_id, :video_id
6
5
 
7
6
  def self.usable?(url)
@@ -58,7 +57,6 @@ class VideoInfo
58
57
  entry['id']
59
58
  end
60
59
  end
61
-
62
60
  end
63
61
  end
64
62
  end
@@ -16,7 +16,7 @@ class VideoInfo
16
16
  end
17
17
 
18
18
  def description
19
- content = data[/<meta name="description" content="(.*)" \/>/,1]
19
+ content = data[/<meta name="description" content="(.*)" \/>/, 1]
20
20
  HTMLEntities.new.decode(content)
21
21
  end
22
22
  alias_method :keywords, :description
@@ -34,11 +34,11 @@ class VideoInfo
34
34
  end
35
35
 
36
36
  def title
37
- data[/<title>(.*)<\/title>/,1].gsub(" | ВКонтакте", "")
37
+ data[/<title>(.*)<\/title>/, 1].gsub(' | ВКонтакте', '')
38
38
  end
39
39
 
40
40
  def view_count
41
- data[/mv_num_views\\">.*?(\d+)/,1].to_i
41
+ data[/mv_num_views\\">.*?(\d+)/, 1].to_i
42
42
  end
43
43
 
44
44
  def embed_url
@@ -46,7 +46,7 @@ class VideoInfo
46
46
  end
47
47
 
48
48
  def duration
49
- data[/"duration":(\d+)/,1].to_i
49
+ data[/"duration":(\d+)/, 1].to_i
50
50
  end
51
51
 
52
52
  private
@@ -56,28 +56,26 @@ class VideoInfo
56
56
  if RUBY_VERSION.to_i < 2
57
57
  Iconv.iconv('utf-8', 'cp1251', uri.read)[0]
58
58
  else
59
- uri.read.encode("UTF-8")
59
+ uri.read.encode('UTF-8')
60
60
  end
61
61
  end
62
62
 
63
63
  def _response_code
64
64
  response = nil
65
- Net::HTTP.start(_api_base, 80) {|http|
66
- response = http.get(_api_path)
67
- }
65
+ Net::HTTP.start(_api_base, 80) { |http| response = http.get(_api_path) }
68
66
  response.code
69
67
  end
70
68
 
71
69
  def _api_base
72
- URI::parse(url).host
70
+ URI.parse(url).host
73
71
  end
74
72
 
75
73
  def _api_path
76
- URI::parse(url).path
74
+ URI.parse(url).path
77
75
  end
78
76
 
79
77
  def _data_hash
80
- data[/hash2\\":\\"(\w+)/,1]
78
+ data[/hash2\\":\\"(\w+)/, 1]
81
79
  end
82
80
 
83
81
  def _set_video_id_from_url
@@ -89,13 +87,12 @@ class VideoInfo
89
87
  end
90
88
 
91
89
  def _default_iframe_attributes
92
- { allowfullscreen: "allowfullscreen" }
90
+ { allowfullscreen: 'allowfullscreen' }
93
91
  end
94
92
 
95
93
  def _default_url_attributes
96
94
  {}
97
95
  end
98
-
99
96
  end
100
97
  end
101
98
  end
@@ -0,0 +1,63 @@
1
+ class VideoInfo
2
+ module Providers
3
+ class Wistia < Provider
4
+ def self.usable?(url)
5
+ url =~ /(.*)(wistia.com|wistia.net|wi.st)/
6
+ end
7
+
8
+ def provider
9
+ 'Wistia'
10
+ end
11
+
12
+ %w[title duration width height].each do |method|
13
+ define_method(method) { data[method] }
14
+ end
15
+
16
+ %w[description keywords view_count date].each do |method|
17
+ define_method(method) { nil }
18
+ end
19
+
20
+ def embed_url
21
+ "//fast.wistia.net/embed/iframe/#{video_id}"
22
+ end
23
+
24
+ def thumbnail_small
25
+ data['thumbnail_url']
26
+ end
27
+
28
+ def thumbnail_medium
29
+ data['thumbnail_url']
30
+ end
31
+
32
+ def thumbnail_large
33
+ data['thumbnail_url']
34
+ end
35
+
36
+ private
37
+
38
+ def _url_regex
39
+ /(?:.*)(?:wistia.com|wi.st|wistia.net)\/(?:embed\/)?(?:medias\/)?(?:iframe\/)?(.+)/
40
+ end
41
+
42
+ def _api_base
43
+ 'fast.wistia.com'
44
+ end
45
+
46
+ def _api_path
47
+ "/oembed?url=http%3A%2F%2Fhome.wistia.com%2Fmedias%2F#{video_id}"
48
+ end
49
+
50
+ def _api_url
51
+ "http://#{_api_base}#{_api_path}"
52
+ end
53
+
54
+ def _default_iframe_attributes
55
+ {}
56
+ end
57
+
58
+ def _default_url_attributes
59
+ {}
60
+ end
61
+ end
62
+ end
63
+ end
@@ -1,7 +1,6 @@
1
1
  class VideoInfo
2
2
  module Providers
3
3
  class Youtube < Provider
4
-
5
4
  def self.usable?(url)
6
5
  url =~ /(youtube\.com\/(?!playlist|embed\/videoseries).*)|(youtu\.be)/
7
6
  end
@@ -47,7 +46,11 @@ class VideoInfo
47
46
  end
48
47
 
49
48
  def view_count
50
- _video_entry['yt$statistics'] ? _video_entry['yt$statistics']['viewCount'].to_i : 0
49
+ if _video_entry['yt$statistics']
50
+ _video_entry['yt$statistics']['viewCount'].to_i
51
+ else
52
+ 0
53
+ end
51
54
  end
52
55
 
53
56
  private
@@ -69,7 +72,7 @@ class VideoInfo
69
72
  end
70
73
 
71
74
  def _default_iframe_attributes
72
- { allowfullscreen: "allowfullscreen" }
75
+ { allowfullscreen: 'allowfullscreen' }
73
76
  end
74
77
 
75
78
  def _default_url_attributes
@@ -87,7 +90,6 @@ class VideoInfo
87
90
  def _video_thumbnail(id)
88
91
  _video_entry['media$group']['media$thumbnail'][id]['url']
89
92
  end
90
-
91
93
  end
92
94
  end
93
95
  end
@@ -1,3 +1,3 @@
1
1
  class VideoInfo
2
- VERSION = '2.3.3'
2
+ VERSION = '2.4.0'
3
3
  end
@@ -21,28 +21,32 @@ http_interactions:
21
21
  Server:
22
22
  - DMS/1.0.42
23
23
  X-Dm-Backnode:
24
- - web-047.adm.dailymotion.com:80
24
+ - web-051.adm.dailymotion.com:80
25
25
  Vary:
26
26
  - Authorization,Accept-Encoding
27
27
  Cache-Control:
28
28
  - private, max-age=900
29
29
  Content-Type:
30
- - application/json
30
+ - application/json; charset=UTF-8
31
31
  P3p:
32
32
  - policyref="http://www.dailymotion.com/w3c/p3p.xml", CP="IDC DSP CURa ADMa
33
33
  DEVa TAIa OUR BUS IND UNI COM NAV INT"
34
34
  Date:
35
- - Wed, 29 Oct 2014 20:36:04 GMT
35
+ - Tue, 09 Dec 2014 19:27:23 GMT
36
36
  X-Dm-Lb:
37
37
  - 195.8.215.129
38
38
  Access-Control-Allow-Origin:
39
39
  - "*"
40
40
  Etag:
41
- - W/"p3bf5_k0DFScFYlnTb63Ug"
41
+ - W/"bQdj-tf3xQT_eEdX1mjrEQ"
42
42
  X-Response-Time:
43
- - 0.058677 seconds
43
+ - 0.056163 seconds
44
44
  Last-Modified:
45
- - Wed, 29 Oct 2014 15:28:54 GMT
45
+ - Thu, 27 Nov 2014 15:31:39 GMT
46
+ Access-Control-Allow-Headers:
47
+ - Authorization
48
+ Access-Control-Allow-Methods:
49
+ - GET, POST, DELETE
46
50
  X-Dm-Page:
47
51
  - ch-fr.rest.rest_api
48
52
  Content-Length:
@@ -52,5 +56,5 @@ http_interactions:
52
56
  string: '{"error":{"code":404,"message":"This video does not exist or has been
53
57
  deleted.","type":"not_found"}}'
54
58
  http_version:
55
- recorded_at: Wed, 29 Oct 2014 20:36:04 GMT
59
+ recorded_at: Tue, 09 Dec 2014 19:27:23 GMT
56
60
  recorded_with: VCR 2.9.3
@@ -21,18 +21,18 @@ http_interactions:
21
21
  Server:
22
22
  - DMS/1.0.42
23
23
  X-Dm-Backnode:
24
- - web-025.adm.dailymotion.com:80
24
+ - web-042.adm.dailymotion.com:80
25
25
  Vary:
26
26
  - Authorization,Accept-Encoding
27
27
  Cache-Control:
28
28
  - private, max-age=900
29
29
  Content-Type:
30
- - application/json
30
+ - application/json; charset=UTF-8
31
31
  P3p:
32
32
  - policyref="http://www.dailymotion.com/w3c/p3p.xml", CP="IDC DSP CURa ADMa
33
33
  DEVa TAIa OUR BUS IND UNI COM NAV INT"
34
34
  Date:
35
- - Wed, 29 Oct 2014 20:36:04 GMT
35
+ - Tue, 09 Dec 2014 19:27:23 GMT
36
36
  X-Dm-Lb:
37
37
  - 195.8.215.129
38
38
  Access-Control-Allow-Origin:
@@ -40,9 +40,13 @@ http_interactions:
40
40
  Etag:
41
41
  - W/"O1DJzTYSf9K1Wvn1OkaB4Q"
42
42
  X-Response-Time:
43
- - 0.043934 seconds
43
+ - 0.055371 seconds
44
44
  Last-Modified:
45
45
  - Sat, 06 Jul 2013 19:32:30 GMT
46
+ Access-Control-Allow-Headers:
47
+ - Authorization
48
+ Access-Control-Allow-Methods:
49
+ - GET, POST, DELETE
46
50
  X-Dm-Page:
47
51
  - ch-fr.rest.rest_api
48
52
  Content-Length:
@@ -51,5 +55,5 @@ http_interactions:
51
55
  encoding: UTF-8
52
56
  string: '{"id":"x7lni3","title":"Mario Kart (R\u00e9mi Gaillard)","channel":"fun","owner":"x4r137"}'
53
57
  http_version:
54
- recorded_at: Wed, 29 Oct 2014 20:36:04 GMT
58
+ recorded_at: Tue, 09 Dec 2014 19:27:23 GMT
55
59
  recorded_with: VCR 2.9.3