Skip to content

Commit be1896e

Browse files
authored
Merge pull request #43 from anxdpanic/dev
add helix clips, games, videos and update streams
2 parents 5629279 + d38fcf0 commit be1896e

File tree

6 files changed

+126
-8
lines changed

6 files changed

+126
-8
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# -*- encoding: utf-8 -*-
2+
# https://dev.twitch.tv/docs/api/reference
3+
4+
from twitch import keys, methods
5+
from twitch.queries import HelixQuery as Qry
6+
from twitch.queries import query
7+
8+
9+
# required scope: none
10+
@query
11+
def get_clip(clip_id, use_app_token=False):
12+
q = Qry('clips', use_app_token=use_app_token)
13+
q.add_param(keys.ID, clip_id, '')
14+
15+
return q
16+
17+
18+
# required scope: clips:edit
19+
@query
20+
def create_clip(broadcaster_id, use_app_token=False):
21+
q = Qry('clips', use_app_token=use_app_token, method=methods.POST)
22+
q.add_param(keys.BROADCASTER_ID, broadcaster_id, '')
23+
24+
return q
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# -*- encoding: utf-8 -*-
2+
# https://dev.twitch.tv/docs/api/reference
3+
4+
from twitch import keys
5+
from twitch.api.parameters import Cursor
6+
from twitch.queries import HelixQuery as Qry
7+
from twitch.queries import query
8+
9+
10+
# required scope: none
11+
@query
12+
def get_games(game_id=list(), game_name=list(), use_app_token=False):
13+
q = Qry('games', use_app_token=use_app_token)
14+
q.add_param(keys.ID, game_id, list())
15+
q.add_param(keys.NAME, game_name, list())
16+
return q
17+
18+
19+
# required scope: none
20+
@query
21+
def get_top(after='MA==', before='MA==', first=20, use_app_token=False):
22+
q = Qry('games/top', use_app_token=use_app_token)
23+
q.add_param(keys.AFTER, Cursor.validate(after), 'MA==')
24+
q.add_param(keys.BEFORE, Cursor.validate(before), 'MA==')
25+
q.add_param(keys.FIRST, first, 20)
26+
27+
return q

resources/lib/twitch/api/helix/streams.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,25 @@
22
# https://dev.twitch.tv/docs/api/reference
33

44
from twitch import keys
5-
from twitch.api.parameters import Cursor, Language, StreamTypes
5+
from twitch.api.parameters import Cursor, Language, StreamTypeHelix
66
from twitch.queries import HelixQuery as Qry
77
from twitch.queries import query
88

99

1010
# required scope: none
1111
@query
1212
def get_streams(community_id=list(), game_id=list(), user_id=list(),
13-
user_login=list(), stream_type=StreamTypes.ALL, language=list(),
14-
after='MA==', first=20, use_app_token=False):
13+
user_login=list(), stream_type=StreamTypeHelix.ALL, language=list(),
14+
after='MA==', before='MA==', first=20, use_app_token=False):
1515
q = Qry('streams', use_app_token=use_app_token)
1616
q.add_param(keys.AFTER, Cursor.validate(after), 'MA==')
17+
q.add_param(keys.BEFORE, Cursor.validate(before), 'MA==')
1718
q.add_param(keys.FIRST, first, 20)
1819
q.add_param(keys.COMMUNITY_ID, community_id, list())
1920
q.add_param(keys.GAME_ID, game_id, list())
2021
q.add_param(keys.USER_ID, user_id, list())
2122
q.add_param(keys.USER_LOGIN, user_login, list())
22-
q.add_param(keys.TYPE, StreamTypes.validate(stream_type), StreamTypes.ALL)
23+
q.add_param(keys.TYPE, StreamTypeHelix.validate(stream_type), StreamTypeHelix.ALL)
2324
if isinstance(language, list):
2425
_language = [lang for lang in language if lang in Language.valid()]
2526
q.add_param(keys.LANGUAGE, _language, list())
@@ -32,16 +33,17 @@ def get_streams(community_id=list(), game_id=list(), user_id=list(),
3233
# required scope: none
3334
@query
3435
def get_metadata(community_id=list(), game_id=list(), user_id=list(),
35-
user_login=list(), stream_type=StreamTypes.ALL, language=list(),
36-
after='MA==', first=20, use_app_token=False):
36+
user_login=list(), stream_type=StreamTypeHelix.ALL, language=list(),
37+
after='MA==', before='MA==', first=20, use_app_token=False):
3738
q = Qry('streams/metadata', use_app_token=use_app_token)
3839
q.add_param(keys.AFTER, Cursor.validate(after), 'MA==')
40+
q.add_param(keys.BEFORE, Cursor.validate(before), 'MA==')
3941
q.add_param(keys.FIRST, first, 20)
4042
q.add_param(keys.COMMUNITY_ID, community_id, list())
4143
q.add_param(keys.GAME_ID, game_id, list())
4244
q.add_param(keys.USER_ID, user_id, list())
4345
q.add_param(keys.USER_LOGIN, user_login, list())
44-
q.add_param(keys.TYPE, StreamTypes.validate(stream_type), StreamTypes.ALL)
46+
q.add_param(keys.TYPE, StreamTypeHelix.validate(stream_type), StreamTypeHelix.ALL)
4547
if isinstance(language, list):
4648
_language = [lang for lang in language if lang in Language.valid()]
4749
q.add_param(keys.LANGUAGE, _language, list())
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# -*- encoding: utf-8 -*-
2+
# https://dev.twitch.tv/docs/api/reference
3+
4+
from twitch import keys
5+
from twitch.api.parameters import Cursor, Language, BroadcastTypeHelix, VideoSortHelix, PeriodHelix
6+
from twitch.queries import HelixQuery as Qry
7+
from twitch.queries import query
8+
9+
10+
# required scope: none
11+
@query
12+
def get_videos(video_id=list(), game_id=list(), user_id=list(),
13+
broadcast_type=BroadcastTypeHelix.ALL, language='',
14+
after='MA==', before='MA==', first=20,
15+
sort_order=VideoSortHelix.TIME, period=PeriodHelix.ALL, use_app_token=False):
16+
q = Qry('videos', use_app_token=use_app_token)
17+
if not video_id:
18+
q.add_param(keys.AFTER, Cursor.validate(after), 'MA==')
19+
q.add_param(keys.BEFORE, Cursor.validate(before), 'MA==')
20+
q.add_param(keys.FIRST, first, 20)
21+
q.add_param(keys.GAME_ID, game_id, list())
22+
q.add_param(keys.USER_ID, user_id, list())
23+
q.add_param(keys.TYPE, BroadcastTypeHelix.validate(broadcast_type), BroadcastTypeHelix.ALL)
24+
q.add_param(keys.SORT, VideoSortHelix.validate(sort_order), VideoSortHelix.TIME)
25+
q.add_param(keys.PERIOD, PeriodHelix.validate(period), PeriodHelix.ALL)
26+
if language:
27+
q.add_param(keys.LANGUAGE, Language.validate(language), '')
28+
else:
29+
q.add_param(keys.ID, video_id, list())
30+
31+
return q

resources/lib/twitch/api/parameters.py

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ class Period(_Parameter):
2323
_valid = [WEEK, MONTH, ALL]
2424

2525

26+
class PeriodHelix(_Parameter):
27+
DAY = 'day'
28+
WEEK = 'week'
29+
MONTH = 'month'
30+
ALL = 'all'
31+
_valid = [DAY, WEEK, MONTH, ALL]
32+
33+
2634
class ClipPeriod(_Parameter):
2735
DAY = 'day'
2836
WEEK = 'week'
@@ -60,6 +68,14 @@ class VideoSort(_Parameter):
6068
_valid = [VIEWS, TIME]
6169

6270

71+
class VideoSortHelix(_Parameter):
72+
VIEWS = 'views'
73+
TIME = 'time'
74+
TRENDING = 'trending'
75+
76+
_valid = [VIEWS, TIME, TRENDING]
77+
78+
6379
class BroadcastType(_Parameter):
6480
ARCHIVE = 'archive'
6581
HIGHLIGHT = 'highlight'
@@ -76,6 +92,23 @@ def validate(cls, value):
7692
return value
7793

7894

95+
class BroadcastTypeHelix(_Parameter):
96+
ARCHIVE = 'archive'
97+
HIGHLIGHT = 'highlight'
98+
UPLOAD = 'upload'
99+
ALL = 'all'
100+
101+
_valid = [ALL, ARCHIVE, HIGHLIGHT, UPLOAD]
102+
103+
@classmethod
104+
def validate(cls, value):
105+
split_values = value.split(',')
106+
for val in split_values:
107+
if val not in cls._valid:
108+
raise ValueError(value)
109+
return value
110+
111+
79112
class StreamType(_Parameter):
80113
LIVE = 'live'
81114
PLAYLIST = 'playlist'
@@ -84,7 +117,7 @@ class StreamType(_Parameter):
84117
_valid = [LIVE, PLAYLIST, ALL]
85118

86119

87-
class StreamTypes(_Parameter):
120+
class StreamTypeHelix(_Parameter):
88121
LIVE = 'live'
89122
VODCAST = 'vodcast'
90123
ALL = 'all'

resources/lib/twitch/keys.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
AVATAR_IMAGE = 'avatar_image'
1313
BEFORE = 'before'
1414
BROADCAST_TYPE = 'broadcast_type'
15+
BROADCASTER_ID = 'broadcaster_id'
1516
BROADCASTER_LANGUAGE = 'broadcaster_language'
1617
BROADCASTS = 'broadcasts'
1718
CHANNEL = 'channel'

0 commit comments

Comments
 (0)