kappa 0.2.0 → 0.3.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.
- data/README.md +184 -148
- data/lib/kappa.rb +12 -11
- data/lib/kappa/channel.rb +143 -184
- data/lib/kappa/connection.rb +129 -142
- data/lib/kappa/game.rb +147 -161
- data/lib/kappa/id_equality.rb +17 -17
- data/lib/kappa/images.rb +34 -36
- data/lib/kappa/proxy.rb +32 -0
- data/lib/kappa/stream.rb +185 -175
- data/lib/kappa/team.rb +99 -99
- data/lib/kappa/twitch.rb +13 -11
- data/lib/kappa/user.rb +124 -132
- data/lib/kappa/version.rb +3 -1
- data/lib/kappa/video.rb +150 -100
- metadata +100 -38
data/lib/kappa/version.rb
CHANGED
data/lib/kappa/video.rb
CHANGED
@@ -1,100 +1,150 @@
|
|
1
|
-
require 'cgi'
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
#
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
#
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
# @
|
55
|
-
# @
|
56
|
-
#
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
# @
|
71
|
-
|
72
|
-
|
73
|
-
# @return [String]
|
74
|
-
attr_reader :
|
75
|
-
|
76
|
-
# @return [
|
77
|
-
attr_reader :
|
78
|
-
|
79
|
-
# @return [
|
80
|
-
attr_reader :
|
81
|
-
|
82
|
-
# @return [String] URL of
|
83
|
-
attr_reader :
|
84
|
-
|
85
|
-
# @return [
|
86
|
-
attr_reader :
|
87
|
-
|
88
|
-
#
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
1
|
+
require 'cgi'
|
2
|
+
require 'time'
|
3
|
+
|
4
|
+
module Kappa::V2
|
5
|
+
# @private
|
6
|
+
class ChannelProxy
|
7
|
+
def initialize(name, display_name)
|
8
|
+
@name = name
|
9
|
+
@display_name = display_name
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :name
|
13
|
+
attr_reader :display_name
|
14
|
+
|
15
|
+
include Proxy
|
16
|
+
|
17
|
+
proxy {
|
18
|
+
Channel.get(@name)
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
# Videos are broadcasts or highlights owned by a channel. Broadcasts are unedited
|
23
|
+
# videos that are saved after a streaming session. Highlights are videos edited from
|
24
|
+
# broadcasts by the channel's owner.
|
25
|
+
# @see .get Video.get
|
26
|
+
# @see Videos
|
27
|
+
# @see Channel
|
28
|
+
class Video
|
29
|
+
include Connection
|
30
|
+
include Kappa::IdEquality
|
31
|
+
|
32
|
+
# @private
|
33
|
+
def initialize(hash)
|
34
|
+
@id = hash['_id']
|
35
|
+
@title = hash['title']
|
36
|
+
@recorded_at = Time.parse(hash['recorded_at']).utc
|
37
|
+
@url = hash['url']
|
38
|
+
@view_count = hash['views']
|
39
|
+
@description = hash['description']
|
40
|
+
@length = hash['length']
|
41
|
+
@game_name = hash['game']
|
42
|
+
@preview_url = hash['preview']
|
43
|
+
|
44
|
+
@channel = ChannelProxy.new(
|
45
|
+
hash['channel']['name'],
|
46
|
+
hash['channel']['display_name']
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Get a video by ID.
|
51
|
+
# @example
|
52
|
+
# v = Video.get('a396294648')
|
53
|
+
# v.title # => "DreamHack Open Stockholm 26-27 April"
|
54
|
+
# @param id [String] The ID of the video to get.
|
55
|
+
# @raise [ArgumentError] If `id` is `nil` or blank.
|
56
|
+
# @return [Video] A valid `Video` object if the video exists, `nil` otherwise.
|
57
|
+
def self.get(id)
|
58
|
+
raise ArgumentError if !id || id.strip.empty?
|
59
|
+
|
60
|
+
encoded_id = CGI.escape(id)
|
61
|
+
json = connection.get("videos/#{encoded_id}")
|
62
|
+
if !json || json['status'] == 404
|
63
|
+
nil
|
64
|
+
else
|
65
|
+
new(json)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# @note This is a `String`, not a `Fixnum` like most other object IDs.
|
70
|
+
# @example
|
71
|
+
# v = Video.get('a396294648')
|
72
|
+
# v.id # => "a396294648"
|
73
|
+
# @return [String] Unique Twitch ID for this video.
|
74
|
+
attr_reader :id
|
75
|
+
|
76
|
+
# @return [String] Title of this video. This is seen on the video's page.
|
77
|
+
attr_reader :title
|
78
|
+
|
79
|
+
# @return [Time] When this video was recorded (UTC).
|
80
|
+
attr_reader :recorded_at
|
81
|
+
|
82
|
+
# @return [String] URL of this video on Twitch.
|
83
|
+
attr_reader :url
|
84
|
+
|
85
|
+
# @return [Fixnum] The number of views this video has received all-time.
|
86
|
+
attr_reader :view_count
|
87
|
+
|
88
|
+
# @return [String] Description of this video.
|
89
|
+
attr_reader :description
|
90
|
+
|
91
|
+
# @example
|
92
|
+
# v.length # => 4205 (1 hour, 10 minutes, 5 seconds)
|
93
|
+
# @return [Fixnum] The length of this video (seconds).
|
94
|
+
attr_reader :length
|
95
|
+
|
96
|
+
# @return [String] The name of the game played in this video.
|
97
|
+
attr_reader :game_name
|
98
|
+
|
99
|
+
# @return [String] URL of a preview screenshot taken from the video stream.
|
100
|
+
attr_reader :preview_url
|
101
|
+
|
102
|
+
# @return [Channel] The channel on which this video was originally streamed.
|
103
|
+
attr_reader :channel
|
104
|
+
end
|
105
|
+
|
106
|
+
# Query class used for finding top videos.
|
107
|
+
# @see Video
|
108
|
+
class Videos
|
109
|
+
include Connection
|
110
|
+
|
111
|
+
# Get the list of most popular videos based on view count.
|
112
|
+
# @note The number of videos returned is potentially very large, so it's recommended that you specify a `:limit`.
|
113
|
+
# @example
|
114
|
+
# Videos.top
|
115
|
+
# @example
|
116
|
+
# Videos.top(:period => :month, :game => 'Super Meat Boy')
|
117
|
+
# @example
|
118
|
+
# Videos.top(:period => :all, :limit => 10)
|
119
|
+
# @param options [Hash] Filter criteria.
|
120
|
+
# @option options [Symbol] :period (:week) Return videos only in this time period. Supported values are `:week`, `:month`, `:all`.
|
121
|
+
# @option options [String] :game (nil) Return videos only for this game.
|
122
|
+
# @option options [Fixnum] :limit (none) Limit on the number of results returned.
|
123
|
+
# @option options [Fixnum] :offset (0) Offset into the result set to begin enumeration.
|
124
|
+
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/videos.md#get-videostop GET /videos/top
|
125
|
+
# @return [Array<Video>] List of top videos.
|
126
|
+
def self.top(options = {})
|
127
|
+
params = {}
|
128
|
+
|
129
|
+
if options[:game]
|
130
|
+
params[:game] = options[:game]
|
131
|
+
end
|
132
|
+
|
133
|
+
period = options[:period] || :week
|
134
|
+
if ![:week, :month, :all].include?(period)
|
135
|
+
raise ArgumentError, 'period'
|
136
|
+
end
|
137
|
+
|
138
|
+
params[:period] = period.to_s
|
139
|
+
|
140
|
+
return connection.accumulate(
|
141
|
+
:path => 'videos/top',
|
142
|
+
:params => params,
|
143
|
+
:json => 'videos',
|
144
|
+
:class => Video,
|
145
|
+
:limit => options[:limit],
|
146
|
+
:offset => options[:offset]
|
147
|
+
)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kappa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,99 +9,155 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-07-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
21
|
version: 0.9.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.9.0
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: addressable
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
|
-
- -
|
35
|
+
- - ~>
|
31
36
|
- !ruby/object:Gem::Version
|
32
37
|
version: 2.3.3
|
33
38
|
type: :runtime
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 2.3.3
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: rake
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
|
-
- -
|
51
|
+
- - ~>
|
42
52
|
- !ruby/object:Gem::Version
|
43
53
|
version: '0.9'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.9'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: webmock
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
|
-
- -
|
67
|
+
- - ~>
|
53
68
|
- !ruby/object:Gem::Version
|
54
69
|
version: 1.11.0
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 1.11.0
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: rspec
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
|
-
- -
|
83
|
+
- - ~>
|
64
84
|
- !ruby/object:Gem::Version
|
65
85
|
version: 2.13.0
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 2.13.0
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: launchy
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
|
-
- -
|
99
|
+
- - ~>
|
75
100
|
- !ruby/object:Gem::Version
|
76
101
|
version: 2.3.0
|
77
102
|
type: :development
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 2.3.0
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: yard
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
|
-
- -
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.8.6
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
86
124
|
- !ruby/object:Gem::Version
|
87
125
|
version: 0.8.6
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: markdown
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ~>
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: 1.1.1
|
88
134
|
type: :development
|
89
135
|
prerelease: false
|
90
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ~>
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 1.1.1
|
91
142
|
- !ruby/object:Gem::Dependency
|
92
143
|
name: simplecov
|
93
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
94
145
|
none: false
|
95
146
|
requirements:
|
96
|
-
- -
|
147
|
+
- - ~>
|
97
148
|
- !ruby/object:Gem::Version
|
98
149
|
version: 0.7.1
|
99
150
|
type: :development
|
100
151
|
prerelease: false
|
101
|
-
version_requirements:
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ~>
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: 0.7.1
|
102
158
|
- !ruby/object:Gem::Dependency
|
103
159
|
name: coveralls
|
104
|
-
requirement:
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
105
161
|
none: false
|
106
162
|
requirements:
|
107
163
|
- - ! '>='
|
@@ -109,7 +165,12 @@ dependencies:
|
|
109
165
|
version: '0'
|
110
166
|
type: :development
|
111
167
|
prerelease: false
|
112
|
-
version_requirements:
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
113
174
|
description: ! " A Ruby library for interfacing with the Twitch.tv API\n including
|
114
175
|
users, channels, streams, and followers.\n"
|
115
176
|
email: schmch@gmail.com
|
@@ -117,18 +178,19 @@ executables: []
|
|
117
178
|
extensions: []
|
118
179
|
extra_rdoc_files: []
|
119
180
|
files:
|
120
|
-
- lib/kappa
|
121
|
-
- lib/kappa/
|
122
|
-
- lib/kappa/game.rb
|
123
|
-
- lib/kappa/id_equality.rb
|
124
|
-
- lib/kappa/images.rb
|
181
|
+
- lib/kappa.rb
|
182
|
+
- lib/kappa/version.rb
|
125
183
|
- lib/kappa/stream.rb
|
184
|
+
- lib/kappa/video.rb
|
126
185
|
- lib/kappa/team.rb
|
127
|
-
- lib/kappa/
|
186
|
+
- lib/kappa/images.rb
|
128
187
|
- lib/kappa/user.rb
|
129
|
-
- lib/kappa/
|
130
|
-
- lib/kappa/
|
131
|
-
- lib/kappa.rb
|
188
|
+
- lib/kappa/id_equality.rb
|
189
|
+
- lib/kappa/twitch.rb
|
190
|
+
- lib/kappa/channel.rb
|
191
|
+
- lib/kappa/proxy.rb
|
192
|
+
- lib/kappa/game.rb
|
193
|
+
- lib/kappa/connection.rb
|
132
194
|
- README.md
|
133
195
|
homepage: https://github.com/schmich/kappa
|
134
196
|
licenses: []
|
@@ -150,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
212
|
version: '0'
|
151
213
|
requirements: []
|
152
214
|
rubyforge_project:
|
153
|
-
rubygems_version: 1.8.
|
215
|
+
rubygems_version: 1.8.23
|
154
216
|
signing_key:
|
155
217
|
specification_version: 3
|
156
218
|
summary: Ruby library for interfacing with the Twitch.tv API.
|