kappa 1.0.1 → 1.0.2
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.
- checksums.yaml +7 -0
- data/.yardopts +6 -6
- data/LICENSE +19 -19
- data/README.md +285 -285
- data/lib/kappa.rb +15 -15
- data/lib/kappa/channel.rb +214 -214
- data/lib/kappa/configuration.rb +88 -88
- data/lib/kappa/connection.rb +139 -139
- data/lib/kappa/errors.rb +43 -43
- data/lib/kappa/game.rb +216 -216
- data/lib/kappa/id_equality.rb +17 -17
- data/lib/kappa/images.rb +44 -44
- data/lib/kappa/proxy.rb +32 -32
- data/lib/kappa/query.rb +22 -22
- data/lib/kappa/status.rb +16 -16
- data/lib/kappa/stream.rb +289 -288
- data/lib/kappa/team.rb +132 -132
- data/lib/kappa/user.rb +159 -159
- data/lib/kappa/version.rb +3 -3
- data/lib/kappa/video.rb +229 -229
- metadata +23 -44
data/lib/kappa/team.rb
CHANGED
@@ -1,132 +1,132 @@
|
|
1
|
-
require 'cgi'
|
2
|
-
require 'time'
|
3
|
-
|
4
|
-
module Twitch::V2
|
5
|
-
# Teams are an organization of channels.
|
6
|
-
# @see Teams#get Teams#get
|
7
|
-
# @see Teams#all Teams#all
|
8
|
-
# @see Teams
|
9
|
-
# @see Channel
|
10
|
-
class Team
|
11
|
-
include Twitch::IdEquality
|
12
|
-
|
13
|
-
# @private
|
14
|
-
def initialize(hash)
|
15
|
-
@id = hash['_id']
|
16
|
-
@info = hash['info']
|
17
|
-
@background_url = hash['background']
|
18
|
-
@banner_url = hash['banner']
|
19
|
-
@logo_url = hash['logo']
|
20
|
-
@name = hash['name']
|
21
|
-
@display_name = hash['display_name']
|
22
|
-
@updated_at = Time.parse(hash['updated_at']).utc
|
23
|
-
@created_at = Time.parse(hash['created_at']).utc
|
24
|
-
|
25
|
-
name = CGI.escape(@name)
|
26
|
-
@url = "http://www.twitch.tv/team/#{name}"
|
27
|
-
end
|
28
|
-
|
29
|
-
# @example
|
30
|
-
# 12
|
31
|
-
# @return [Fixnum] Unique Twitch ID.
|
32
|
-
attr_reader :id
|
33
|
-
|
34
|
-
# @example
|
35
|
-
# "TeamLiquid is awesome. and esports. video games. \n\n"
|
36
|
-
# @return [String] Info about the team. This is displayed on the team's page and can contain HTML.
|
37
|
-
attr_reader :info
|
38
|
-
|
39
|
-
# @example
|
40
|
-
# "http://static-cdn.jtvnw.net/jtv_user_pictures/team-eg-background_image-da36973b6d829ac6.png"
|
41
|
-
# @return [String] URL for background image.
|
42
|
-
attr_reader :background_url
|
43
|
-
|
44
|
-
# @example
|
45
|
-
# "http://static-cdn.jtvnw.net/jtv_user_pictures/team-eg-banner_image-1ad9c4738f4698b1-640x125.png"
|
46
|
-
# @return [String] URL for banner image.
|
47
|
-
attr_reader :banner_url
|
48
|
-
|
49
|
-
# @example
|
50
|
-
# "http://static-cdn.jtvnw.net/jtv_user_pictures/team-eg-team_logo_image-9107b874d4c3fc3b-300x300.jpeg"
|
51
|
-
# @return [String] URL for the logo image.
|
52
|
-
attr_reader :logo_url
|
53
|
-
|
54
|
-
# @example
|
55
|
-
# "teamliquid"
|
56
|
-
# @see #display_name
|
57
|
-
# @return [String] Unique Twitch name.
|
58
|
-
attr_reader :name
|
59
|
-
|
60
|
-
# @example
|
61
|
-
# "TeamLiquid"
|
62
|
-
# @see #name
|
63
|
-
# @return [String] User-friendly display name. This name is used for the team's page title.
|
64
|
-
attr_reader :display_name
|
65
|
-
|
66
|
-
# @example
|
67
|
-
# 2013-05-24 00:17:10 UTC
|
68
|
-
# @return [Time] When the team was last updated (UTC).
|
69
|
-
attr_reader :updated_at
|
70
|
-
|
71
|
-
# @example
|
72
|
-
# 2011-10-27 01:00:44 UTC
|
73
|
-
# @return [Time] When the team was created (UTC).
|
74
|
-
attr_reader :created_at
|
75
|
-
|
76
|
-
# @example
|
77
|
-
# "http://www.twitch.tv/team/teamliquid"
|
78
|
-
# @return [String] URL for the team's Twitch landing page.
|
79
|
-
attr_reader :url
|
80
|
-
end
|
81
|
-
|
82
|
-
# Query class for finding all active teams.
|
83
|
-
# @see Team
|
84
|
-
class Teams
|
85
|
-
# @private
|
86
|
-
def initialize(query)
|
87
|
-
@query = query
|
88
|
-
end
|
89
|
-
|
90
|
-
# Get a team by name.
|
91
|
-
# @example
|
92
|
-
# Twitch.teams.get('teamliquid')
|
93
|
-
# @param team_name [String] The name of the team to get.
|
94
|
-
# @return [Team] A valid `Team` object if the team exists, `nil` otherwise.
|
95
|
-
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/teams.md#get-teamsteam GET /teams/:team
|
96
|
-
def get(team_name)
|
97
|
-
name = CGI.escape(team_name)
|
98
|
-
Twitch::Status.map(404 => nil) do
|
99
|
-
json = @query.connection.get("teams/#{name}")
|
100
|
-
Team.new(json)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
# Get the list of all active teams.
|
105
|
-
# @example
|
106
|
-
# Twitch.teams.all
|
107
|
-
# @example
|
108
|
-
# Twitch.teams.all(:limit => 10)
|
109
|
-
# @example
|
110
|
-
# Twitch.teams do |team|
|
111
|
-
# next if (Time.now - team.updated_at) > (60 * 60 * 24)
|
112
|
-
# puts team.url
|
113
|
-
# end
|
114
|
-
# @param options [Hash] Filter criteria.
|
115
|
-
# @option options [Fixnum] :limit (nil) Limit on the number of results returned.
|
116
|
-
# @yield Optional. If a block is given, each team is yielded.
|
117
|
-
# @yieldparam [Team] team Current team.
|
118
|
-
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/teams.md#get-teams GET /teams
|
119
|
-
# @return [Array<Team>] All active teams, if no block is given.
|
120
|
-
# @return [nil] If a block is given.
|
121
|
-
def all(options = {}, &block)
|
122
|
-
return @query.connection.accumulate(
|
123
|
-
:path => 'teams',
|
124
|
-
:json => 'teams',
|
125
|
-
:create => Team,
|
126
|
-
:limit => options[:limit],
|
127
|
-
:offset => options[:offset],
|
128
|
-
&block
|
129
|
-
)
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
1
|
+
require 'cgi'
|
2
|
+
require 'time'
|
3
|
+
|
4
|
+
module Twitch::V2
|
5
|
+
# Teams are an organization of channels.
|
6
|
+
# @see Teams#get Teams#get
|
7
|
+
# @see Teams#all Teams#all
|
8
|
+
# @see Teams
|
9
|
+
# @see Channel
|
10
|
+
class Team
|
11
|
+
include Twitch::IdEquality
|
12
|
+
|
13
|
+
# @private
|
14
|
+
def initialize(hash)
|
15
|
+
@id = hash['_id']
|
16
|
+
@info = hash['info']
|
17
|
+
@background_url = hash['background']
|
18
|
+
@banner_url = hash['banner']
|
19
|
+
@logo_url = hash['logo']
|
20
|
+
@name = hash['name']
|
21
|
+
@display_name = hash['display_name']
|
22
|
+
@updated_at = Time.parse(hash['updated_at']).utc
|
23
|
+
@created_at = Time.parse(hash['created_at']).utc
|
24
|
+
|
25
|
+
name = CGI.escape(@name)
|
26
|
+
@url = "http://www.twitch.tv/team/#{name}"
|
27
|
+
end
|
28
|
+
|
29
|
+
# @example
|
30
|
+
# 12
|
31
|
+
# @return [Fixnum] Unique Twitch ID.
|
32
|
+
attr_reader :id
|
33
|
+
|
34
|
+
# @example
|
35
|
+
# "TeamLiquid is awesome. and esports. video games. \n\n"
|
36
|
+
# @return [String] Info about the team. This is displayed on the team's page and can contain HTML.
|
37
|
+
attr_reader :info
|
38
|
+
|
39
|
+
# @example
|
40
|
+
# "http://static-cdn.jtvnw.net/jtv_user_pictures/team-eg-background_image-da36973b6d829ac6.png"
|
41
|
+
# @return [String] URL for background image.
|
42
|
+
attr_reader :background_url
|
43
|
+
|
44
|
+
# @example
|
45
|
+
# "http://static-cdn.jtvnw.net/jtv_user_pictures/team-eg-banner_image-1ad9c4738f4698b1-640x125.png"
|
46
|
+
# @return [String] URL for banner image.
|
47
|
+
attr_reader :banner_url
|
48
|
+
|
49
|
+
# @example
|
50
|
+
# "http://static-cdn.jtvnw.net/jtv_user_pictures/team-eg-team_logo_image-9107b874d4c3fc3b-300x300.jpeg"
|
51
|
+
# @return [String] URL for the logo image.
|
52
|
+
attr_reader :logo_url
|
53
|
+
|
54
|
+
# @example
|
55
|
+
# "teamliquid"
|
56
|
+
# @see #display_name
|
57
|
+
# @return [String] Unique Twitch name.
|
58
|
+
attr_reader :name
|
59
|
+
|
60
|
+
# @example
|
61
|
+
# "TeamLiquid"
|
62
|
+
# @see #name
|
63
|
+
# @return [String] User-friendly display name. This name is used for the team's page title.
|
64
|
+
attr_reader :display_name
|
65
|
+
|
66
|
+
# @example
|
67
|
+
# 2013-05-24 00:17:10 UTC
|
68
|
+
# @return [Time] When the team was last updated (UTC).
|
69
|
+
attr_reader :updated_at
|
70
|
+
|
71
|
+
# @example
|
72
|
+
# 2011-10-27 01:00:44 UTC
|
73
|
+
# @return [Time] When the team was created (UTC).
|
74
|
+
attr_reader :created_at
|
75
|
+
|
76
|
+
# @example
|
77
|
+
# "http://www.twitch.tv/team/teamliquid"
|
78
|
+
# @return [String] URL for the team's Twitch landing page.
|
79
|
+
attr_reader :url
|
80
|
+
end
|
81
|
+
|
82
|
+
# Query class for finding all active teams.
|
83
|
+
# @see Team
|
84
|
+
class Teams
|
85
|
+
# @private
|
86
|
+
def initialize(query)
|
87
|
+
@query = query
|
88
|
+
end
|
89
|
+
|
90
|
+
# Get a team by name.
|
91
|
+
# @example
|
92
|
+
# Twitch.teams.get('teamliquid')
|
93
|
+
# @param team_name [String] The name of the team to get.
|
94
|
+
# @return [Team] A valid `Team` object if the team exists, `nil` otherwise.
|
95
|
+
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/teams.md#get-teamsteam GET /teams/:team
|
96
|
+
def get(team_name)
|
97
|
+
name = CGI.escape(team_name)
|
98
|
+
Twitch::Status.map(404 => nil) do
|
99
|
+
json = @query.connection.get("teams/#{name}")
|
100
|
+
Team.new(json)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# Get the list of all active teams.
|
105
|
+
# @example
|
106
|
+
# Twitch.teams.all
|
107
|
+
# @example
|
108
|
+
# Twitch.teams.all(:limit => 10)
|
109
|
+
# @example
|
110
|
+
# Twitch.teams do |team|
|
111
|
+
# next if (Time.now - team.updated_at) > (60 * 60 * 24)
|
112
|
+
# puts team.url
|
113
|
+
# end
|
114
|
+
# @param options [Hash] Filter criteria.
|
115
|
+
# @option options [Fixnum] :limit (nil) Limit on the number of results returned.
|
116
|
+
# @yield Optional. If a block is given, each team is yielded.
|
117
|
+
# @yieldparam [Team] team Current team.
|
118
|
+
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/teams.md#get-teams GET /teams
|
119
|
+
# @return [Array<Team>] All active teams, if no block is given.
|
120
|
+
# @return [nil] If a block is given.
|
121
|
+
def all(options = {}, &block)
|
122
|
+
return @query.connection.accumulate(
|
123
|
+
:path => 'teams',
|
124
|
+
:json => 'teams',
|
125
|
+
:create => Team,
|
126
|
+
:limit => options[:limit],
|
127
|
+
:offset => options[:offset],
|
128
|
+
&block
|
129
|
+
)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
data/lib/kappa/user.rb
CHANGED
@@ -1,159 +1,159 @@
|
|
1
|
-
require 'cgi'
|
2
|
-
require 'time'
|
3
|
-
|
4
|
-
module Twitch::V2
|
5
|
-
# These are members of the Twitch community who have a Twitch account. If broadcasting,
|
6
|
-
# they can own a stream that they can broadcast on their channel. If mainly viewing,
|
7
|
-
# they might follow or subscribe to channels.
|
8
|
-
# @see Users#get Users#get
|
9
|
-
# @see Users
|
10
|
-
# @see Channel
|
11
|
-
# @see Stream
|
12
|
-
class User
|
13
|
-
include Twitch::IdEquality
|
14
|
-
|
15
|
-
# @private
|
16
|
-
def initialize(hash, query)
|
17
|
-
@query = query
|
18
|
-
@id = hash['_id']
|
19
|
-
@created_at = Time.parse(hash['created_at']).utc
|
20
|
-
@display_name = hash['display_name']
|
21
|
-
@logo_url = hash['logo']
|
22
|
-
@name = hash['name']
|
23
|
-
@staff = hash['staff'] || false
|
24
|
-
@updated_at = Time.parse(hash['updated_at']).utc
|
25
|
-
end
|
26
|
-
|
27
|
-
# Get the `Channel` associated with this user.
|
28
|
-
# @note This incurs an additional web request.
|
29
|
-
# @return [Channel] The `Channel` associated with this user, or `nil` if this is a Justin.tv account.
|
30
|
-
# @see Channel#get Channel#get
|
31
|
-
def channel
|
32
|
-
@query.channels.get(@name)
|
33
|
-
end
|
34
|
-
|
35
|
-
# Get the live stream associated with this user.
|
36
|
-
# @note This incurs an additional web request.
|
37
|
-
# @return [Stream] Live stream object for this user, or `nil` if the user is not currently streaming.
|
38
|
-
# @see #streaming?
|
39
|
-
def stream
|
40
|
-
@query.streams.get(@name)
|
41
|
-
end
|
42
|
-
|
43
|
-
# Is this user currently streaming?
|
44
|
-
# @note This makes a separate request to get the user's stream. If you want to actually use the stream object, you should call `#stream` instead.
|
45
|
-
# @return [Boolean] `true` if the user currently has a live stream, `false` otherwise.
|
46
|
-
# @see #stream
|
47
|
-
def streaming?
|
48
|
-
!stream.nil?
|
49
|
-
end
|
50
|
-
|
51
|
-
# @return [Boolean] `true` if the user is a member of the Twitch.tv staff, `false` otherwise.
|
52
|
-
def staff?
|
53
|
-
@staff
|
54
|
-
end
|
55
|
-
|
56
|
-
# Get the channels the user is currently following.
|
57
|
-
# @example
|
58
|
-
# user.following(:limit => 10)
|
59
|
-
# @example
|
60
|
-
# user.following do |channel|
|
61
|
-
# next if channel.game_name !~ /starcraft/i
|
62
|
-
# puts channel.display_name
|
63
|
-
# end
|
64
|
-
# @param options [Hash] Filter criteria.
|
65
|
-
# @option options [Fixnum] :limit (nil) Limit on the number of results returned.
|
66
|
-
# @option options [Fixnum] :offset (0) Offset into the result set to begin enumeration.
|
67
|
-
# @yield Optional. If a block is given, each followed channel is yielded.
|
68
|
-
# @yieldparam [Channel] channel Current channel.
|
69
|
-
# @see #following?
|
70
|
-
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/follows.md#get-usersuserfollowschannels GET /users/:user/follows/channels
|
71
|
-
# @return [Array<Channel>] Channels the user is currently following, if no block is given.
|
72
|
-
# @return [nil] If a block is given.
|
73
|
-
def following(options = {}, &block)
|
74
|
-
name = CGI.escape(@name)
|
75
|
-
return @query.connection.accumulate(
|
76
|
-
:path => "users/#{name}/follows/channels",
|
77
|
-
:json => 'follows',
|
78
|
-
:sub_json => 'channel',
|
79
|
-
:create => -> hash { Channel.new(hash, @query) },
|
80
|
-
:limit => options[:limit],
|
81
|
-
:offset => options[:offset],
|
82
|
-
&block
|
83
|
-
)
|
84
|
-
end
|
85
|
-
|
86
|
-
# @param target [String, Channel, User, Stream, #name] The name of the channel to check.
|
87
|
-
# @return [Boolean] `true` if the user is following the channel, `false` otherwise.
|
88
|
-
# @see #following
|
89
|
-
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/follows.md#get-usersuserfollowschannelstarget GET /users/:user/follows/channels/:target
|
90
|
-
def following?(target)
|
91
|
-
name = if target.respond_to?(:name)
|
92
|
-
target.name
|
93
|
-
else
|
94
|
-
target.to_s
|
95
|
-
end
|
96
|
-
|
97
|
-
user_name = CGI.escape(@name)
|
98
|
-
channel_name = CGI.escape(name)
|
99
|
-
|
100
|
-
Twitch::Status.map(404 => false) do
|
101
|
-
@query.connection.get("users/#{user_name}/follows/channels/#{channel_name}")
|
102
|
-
true
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
# @example
|
107
|
-
# 23945610
|
108
|
-
# @return [Fixnum] Unique Twitch ID.
|
109
|
-
attr_reader :id
|
110
|
-
|
111
|
-
# @example
|
112
|
-
# 2011-08-08 21:03:44 UTC
|
113
|
-
# @return [Time] When the user account was created (UTC).
|
114
|
-
attr_reader :created_at
|
115
|
-
|
116
|
-
# @example
|
117
|
-
# 2013-07-19 23:51:43 UTC
|
118
|
-
# @return [Time] When the user account was last updated (UTC).
|
119
|
-
attr_reader :updated_at
|
120
|
-
|
121
|
-
# @example
|
122
|
-
# "LAGTVMaximusBlack"
|
123
|
-
# @return [String] User-friendly display name.
|
124
|
-
attr_reader :display_name
|
125
|
-
|
126
|
-
# @example
|
127
|
-
# "http://static-cdn.jtvnw.net/jtv_user_pictures/lagtvmaximusblack-profile_image-4b77a2305f5d85c8-300x300.png"
|
128
|
-
# @return [String] URL for the logo image.
|
129
|
-
attr_reader :logo_url
|
130
|
-
|
131
|
-
# @example
|
132
|
-
# "lagtvmaximusblack"
|
133
|
-
# @return [String] Unique Twitch name.
|
134
|
-
attr_reader :name
|
135
|
-
end
|
136
|
-
|
137
|
-
# Query class for finding users.
|
138
|
-
# @see User
|
139
|
-
class Users
|
140
|
-
# @private
|
141
|
-
def initialize(query)
|
142
|
-
@query = query
|
143
|
-
end
|
144
|
-
|
145
|
-
# Get a user by name.
|
146
|
-
# @example
|
147
|
-
# Twitch.users.get('totalbiscuit')
|
148
|
-
# @param user_name [String] The name of the user to get. This is the same as the channel or stream name.
|
149
|
-
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/users.md#get-usersuser GET /users/:user
|
150
|
-
# @return [User] A valid `User` object if the user exists, `nil` otherwise.
|
151
|
-
def get(user_name)
|
152
|
-
name = CGI.escape(user_name)
|
153
|
-
Twitch::Status.map(404 => nil) do
|
154
|
-
json = @query.connection.get("users/#{name}")
|
155
|
-
User.new(json, @query)
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
1
|
+
require 'cgi'
|
2
|
+
require 'time'
|
3
|
+
|
4
|
+
module Twitch::V2
|
5
|
+
# These are members of the Twitch community who have a Twitch account. If broadcasting,
|
6
|
+
# they can own a stream that they can broadcast on their channel. If mainly viewing,
|
7
|
+
# they might follow or subscribe to channels.
|
8
|
+
# @see Users#get Users#get
|
9
|
+
# @see Users
|
10
|
+
# @see Channel
|
11
|
+
# @see Stream
|
12
|
+
class User
|
13
|
+
include Twitch::IdEquality
|
14
|
+
|
15
|
+
# @private
|
16
|
+
def initialize(hash, query)
|
17
|
+
@query = query
|
18
|
+
@id = hash['_id']
|
19
|
+
@created_at = Time.parse(hash['created_at']).utc
|
20
|
+
@display_name = hash['display_name']
|
21
|
+
@logo_url = hash['logo']
|
22
|
+
@name = hash['name']
|
23
|
+
@staff = hash['staff'] || false
|
24
|
+
@updated_at = Time.parse(hash['updated_at']).utc
|
25
|
+
end
|
26
|
+
|
27
|
+
# Get the `Channel` associated with this user.
|
28
|
+
# @note This incurs an additional web request.
|
29
|
+
# @return [Channel] The `Channel` associated with this user, or `nil` if this is a Justin.tv account.
|
30
|
+
# @see Channel#get Channel#get
|
31
|
+
def channel
|
32
|
+
@query.channels.get(@name)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Get the live stream associated with this user.
|
36
|
+
# @note This incurs an additional web request.
|
37
|
+
# @return [Stream] Live stream object for this user, or `nil` if the user is not currently streaming.
|
38
|
+
# @see #streaming?
|
39
|
+
def stream
|
40
|
+
@query.streams.get(@name)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Is this user currently streaming?
|
44
|
+
# @note This makes a separate request to get the user's stream. If you want to actually use the stream object, you should call `#stream` instead.
|
45
|
+
# @return [Boolean] `true` if the user currently has a live stream, `false` otherwise.
|
46
|
+
# @see #stream
|
47
|
+
def streaming?
|
48
|
+
!stream.nil?
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Boolean] `true` if the user is a member of the Twitch.tv staff, `false` otherwise.
|
52
|
+
def staff?
|
53
|
+
@staff
|
54
|
+
end
|
55
|
+
|
56
|
+
# Get the channels the user is currently following.
|
57
|
+
# @example
|
58
|
+
# user.following(:limit => 10)
|
59
|
+
# @example
|
60
|
+
# user.following do |channel|
|
61
|
+
# next if channel.game_name !~ /starcraft/i
|
62
|
+
# puts channel.display_name
|
63
|
+
# end
|
64
|
+
# @param options [Hash] Filter criteria.
|
65
|
+
# @option options [Fixnum] :limit (nil) Limit on the number of results returned.
|
66
|
+
# @option options [Fixnum] :offset (0) Offset into the result set to begin enumeration.
|
67
|
+
# @yield Optional. If a block is given, each followed channel is yielded.
|
68
|
+
# @yieldparam [Channel] channel Current channel.
|
69
|
+
# @see #following?
|
70
|
+
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/follows.md#get-usersuserfollowschannels GET /users/:user/follows/channels
|
71
|
+
# @return [Array<Channel>] Channels the user is currently following, if no block is given.
|
72
|
+
# @return [nil] If a block is given.
|
73
|
+
def following(options = {}, &block)
|
74
|
+
name = CGI.escape(@name)
|
75
|
+
return @query.connection.accumulate(
|
76
|
+
:path => "users/#{name}/follows/channels",
|
77
|
+
:json => 'follows',
|
78
|
+
:sub_json => 'channel',
|
79
|
+
:create => -> hash { Channel.new(hash, @query) },
|
80
|
+
:limit => options[:limit],
|
81
|
+
:offset => options[:offset],
|
82
|
+
&block
|
83
|
+
)
|
84
|
+
end
|
85
|
+
|
86
|
+
# @param target [String, Channel, User, Stream, #name] The name of the channel to check.
|
87
|
+
# @return [Boolean] `true` if the user is following the channel, `false` otherwise.
|
88
|
+
# @see #following
|
89
|
+
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/follows.md#get-usersuserfollowschannelstarget GET /users/:user/follows/channels/:target
|
90
|
+
def following?(target)
|
91
|
+
name = if target.respond_to?(:name)
|
92
|
+
target.name
|
93
|
+
else
|
94
|
+
target.to_s
|
95
|
+
end
|
96
|
+
|
97
|
+
user_name = CGI.escape(@name)
|
98
|
+
channel_name = CGI.escape(name)
|
99
|
+
|
100
|
+
Twitch::Status.map(404 => false) do
|
101
|
+
@query.connection.get("users/#{user_name}/follows/channels/#{channel_name}")
|
102
|
+
true
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# @example
|
107
|
+
# 23945610
|
108
|
+
# @return [Fixnum] Unique Twitch ID.
|
109
|
+
attr_reader :id
|
110
|
+
|
111
|
+
# @example
|
112
|
+
# 2011-08-08 21:03:44 UTC
|
113
|
+
# @return [Time] When the user account was created (UTC).
|
114
|
+
attr_reader :created_at
|
115
|
+
|
116
|
+
# @example
|
117
|
+
# 2013-07-19 23:51:43 UTC
|
118
|
+
# @return [Time] When the user account was last updated (UTC).
|
119
|
+
attr_reader :updated_at
|
120
|
+
|
121
|
+
# @example
|
122
|
+
# "LAGTVMaximusBlack"
|
123
|
+
# @return [String] User-friendly display name.
|
124
|
+
attr_reader :display_name
|
125
|
+
|
126
|
+
# @example
|
127
|
+
# "http://static-cdn.jtvnw.net/jtv_user_pictures/lagtvmaximusblack-profile_image-4b77a2305f5d85c8-300x300.png"
|
128
|
+
# @return [String] URL for the logo image.
|
129
|
+
attr_reader :logo_url
|
130
|
+
|
131
|
+
# @example
|
132
|
+
# "lagtvmaximusblack"
|
133
|
+
# @return [String] Unique Twitch name.
|
134
|
+
attr_reader :name
|
135
|
+
end
|
136
|
+
|
137
|
+
# Query class for finding users.
|
138
|
+
# @see User
|
139
|
+
class Users
|
140
|
+
# @private
|
141
|
+
def initialize(query)
|
142
|
+
@query = query
|
143
|
+
end
|
144
|
+
|
145
|
+
# Get a user by name.
|
146
|
+
# @example
|
147
|
+
# Twitch.users.get('totalbiscuit')
|
148
|
+
# @param user_name [String] The name of the user to get. This is the same as the channel or stream name.
|
149
|
+
# @see https://github.com/justintv/Twitch-API/blob/master/v2_resources/users.md#get-usersuser GET /users/:user
|
150
|
+
# @return [User] A valid `User` object if the user exists, `nil` otherwise.
|
151
|
+
def get(user_name)
|
152
|
+
name = CGI.escape(user_name)
|
153
|
+
Twitch::Status.map(404 => nil) do
|
154
|
+
json = @query.connection.get("users/#{name}")
|
155
|
+
User.new(json, @query)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|