motion-tube 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -11
- data/lib/motion-tube/parser.rb +52 -15
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d3d75ebbbd4ee6e24b09712dd114249a7d0bb616
|
4
|
+
data.tar.gz: 922b857a2fbf0c9b1e562b28881a1223682679e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b13730c9afa0f147d4a30e41d5c42179e4ce46e558e1d163a2840edca0c03a90b1b7c519b67679fda3742c067fa461571124af6bfd0442e44b1c824f79b47f9
|
7
|
+
data.tar.gz: dd50d23856bd84c51e1b4e103b573a86786f9b5226b1f311ec3af6854504d32e700d5ae5445b51b0b870ef4acc4f2d2357e2b99f0bb82638718d30ca8786f7e7
|
data/README.md
CHANGED
@@ -22,17 +22,20 @@ Or install it yourself as:
|
|
22
22
|
To play a youtube video can be as simple as:
|
23
23
|
|
24
24
|
```
|
25
|
-
|
26
|
-
"https://www.youtube.com/watch?v=_S1S1gGS3lU"
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
25
|
+
parser = MotionTube::Parser.new
|
26
|
+
parser.parse(source: {url: "https://www.youtube.com/watch?v=_S1S1gGS3lU"} ) do |result|
|
27
|
+
puts result[:title]
|
28
|
+
BW::Media.play_modal result[:media]["mp4"].last
|
29
|
+
end
|
30
|
+
```
|
31
|
+
|
32
|
+
To get back a playlist
|
33
|
+
|
34
|
+
```
|
35
|
+
parser = MotionTube::Parser.new
|
36
|
+
parser.parse(source: {playlist: "PL7QBhjs24ko_dq2Nm1NovIqIAr7kAuWJb"}) do |result|
|
37
|
+
puts result
|
38
|
+
end
|
36
39
|
```
|
37
40
|
|
38
41
|
## Contributing
|
data/lib/motion-tube/parser.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
1
|
module MotionTube
|
2
2
|
class Parser
|
3
|
-
attr_accessor :rest_client, :url, :response
|
4
|
-
def initialize(
|
5
|
-
|
6
|
-
|
7
|
-
header "Accept", "application/json"
|
8
|
-
response_serializer :json
|
9
|
-
end
|
3
|
+
attr_accessor :rest_client, :url, :response, :options
|
4
|
+
def initialize(options = {})
|
5
|
+
self.options = options
|
6
|
+
set_rest_client "http://www.youtube.com"
|
10
7
|
end
|
11
8
|
|
12
|
-
def parse(&block)
|
9
|
+
def parse(options, &block)
|
10
|
+
self.options.merge! options
|
13
11
|
if block
|
14
12
|
get_response(&block)
|
15
13
|
else
|
@@ -20,6 +18,7 @@ module MotionTube
|
|
20
18
|
private
|
21
19
|
|
22
20
|
def id
|
21
|
+
url = options[:source][:url]
|
23
22
|
if url =~ /(?:v=|youtu\.be\/|youtube\.com\/v\/)([^.|&]+)/
|
24
23
|
url.scan(/(?:v=|youtu\.be\/|youtube\.com\/v\/)([^.|&]+)/)[0][0]
|
25
24
|
elsif url =~ /\/embed\//
|
@@ -34,7 +33,7 @@ module MotionTube
|
|
34
33
|
end
|
35
34
|
|
36
35
|
def title
|
37
|
-
|
36
|
+
response.scan(/title=([^&]+)/)[0][0].unescape_url
|
38
37
|
end
|
39
38
|
|
40
39
|
|
@@ -61,17 +60,55 @@ module MotionTube
|
|
61
60
|
end
|
62
61
|
|
63
62
|
def get_response(&result_callback)
|
63
|
+
if options[:source][:url]
|
64
|
+
get_video_info_from_id id, &result_callback
|
65
|
+
elsif playlist = options[:source][:playlist]
|
66
|
+
set_rest_client("http://gdata.youtube.com")
|
67
|
+
get_video_info_from_playlist playlist, &result_callback
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def set_rest_client(url)
|
72
|
+
self.rest_client = AFMotion::Client.build(url) do
|
73
|
+
header "Accept", "application/json"
|
74
|
+
response_serializer :json
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def get_video_info_from_playlist(playlist, &result_callback)
|
79
|
+
path = "/feeds/api/playlists/#{playlist}?v=2&alt=json&max-results=50"
|
80
|
+
rest_client.get(path) do |result|
|
81
|
+
self.response = result.body
|
82
|
+
|
83
|
+
hash = result.object
|
84
|
+
entry = hash["feed"]["entry"]
|
85
|
+
youtube_playlist_title = hash["feed"]["title"]["$t"]
|
86
|
+
|
87
|
+
video_list = entry.map do |e|
|
88
|
+
e_hash = {}
|
89
|
+
e_hash["title"] = e["title"]["$t"]
|
90
|
+
e_hash["href"] = e["link"][0]["href"]
|
91
|
+
e_hash
|
92
|
+
end
|
64
93
|
|
65
|
-
|
66
|
-
|
94
|
+
result_hash = {}
|
95
|
+
result_hash[youtube_playlist_title] = video_list
|
96
|
+
result_callback.call result_hash
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def get_video_info_from_id(video_id, &result_callback)
|
101
|
+
rest_client.post("get_video_info", video_id: video_id) do |result|
|
102
|
+
self.response = result.body
|
67
103
|
hash = {
|
68
|
-
id
|
69
|
-
title
|
70
|
-
cover
|
71
|
-
media
|
104
|
+
"id" => id,
|
105
|
+
"title" => title,
|
106
|
+
"cover" => cover,
|
107
|
+
"media" => media
|
72
108
|
}
|
73
109
|
result_callback.call hash
|
74
110
|
end
|
75
111
|
end
|
112
|
+
|
76
113
|
end
|
77
114
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-tube
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Ruan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: motion-cocoapods
|