Skip to content

Commit a85a2ab

Browse files
committed
refactor v5
- clean up endpoints - clean up variable naming - refactor methods adding validation - add StreamType and BroadcastType parameters for validation - add comments for v5 documentation
1 parent 58ad4f8 commit a85a2ab

26 files changed

Lines changed: 256 additions & 215 deletions

resources/lib/twitch/api/parameters.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,19 @@ class SortBy(_Parameter):
3838
LOGIN = 'login'
3939

4040
_valid = [CREATED_AT, LAST_BROADCAST, LOGIN]
41+
42+
43+
class BroadcastType(_Parameter):
44+
ARCHIVE = 'archive'
45+
HIGHLIGHT = 'highlight'
46+
UPLOAD = 'upload'
47+
48+
_valid = [ARCHIVE, HIGHLIGHT, UPLOAD]
49+
50+
51+
class StreamType(_Parameter):
52+
LIVE = 'live'
53+
PLAYLIST = 'playlist'
54+
ALL = 'all'
55+
56+
_valid = [LIVE, PLAYLIST, ALL]

resources/lib/twitch/api/usher.py

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,16 @@ def channel_token(channel):
1818

1919

2020
@query
21-
def vod_token(id):
21+
def vod_token(video_id):
2222
q = HiddenApiQuery('vods/{vod}/access_token')
23-
q.add_urlkw(keys.VOD, id)
23+
q.add_urlkw(keys.VOD, video_id)
2424
return q
2525

2626

2727
@query
28-
def _legacy_video(id):
28+
def _legacy_video(video_id):
2929
q = HiddenApiQuery('videos/{id}')
30-
q.add_urlkw(keys.ID, id)
30+
q.add_urlkw(keys.ID, video_id)
3131
return q
3232

3333

@@ -46,23 +46,26 @@ def live(channel):
4646

4747
@m3u8
4848
@query
49-
def _vod(id):
50-
id = id[1:]
49+
def _vod(video_id):
50+
video_id = video_id[1:]
5151

52-
token = vod_token(id)
52+
token = vod_token(video_id)
5353

5454
q = UsherQuery('vod/{id}')
55-
q.add_urlkw(keys.ID, id)
55+
q.add_urlkw(keys.ID, video_id)
5656
q.add_param(keys.NAUTHSIG, token[keys.SIG])
5757
q.add_param(keys.NAUTH, token[keys.TOKEN])
5858
q.add_param(keys.ALLOW_SOURCE, Boolean.TRUE)
5959
return q
6060

6161

62-
def video(id):
63-
if id.startswith('v'):
64-
return _vod(id)
65-
elif id.startswith(('a', 'c')):
66-
return _legacy_video(id)
62+
def video(video_id):
63+
if video_id.startswith('videos'):
64+
video_id = 'v' + video_id[6:]
65+
return _vod(video_id)
66+
elif video_id.startswith('v'):
67+
return _vod(video_id)
68+
elif video_id.startswith(('a', 'c')):
69+
return _legacy_video(video_id)
6770
else:
6871
raise NotImplementedError('Unknown Video Type')

resources/lib/twitch/api/v3/blocks.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,19 @@
66
from twitch.queries import query
77

88

9-
# Needs Authentification
9+
# Needs Authentication
1010
@query
1111
def by_name(user):
1212
raise NotImplementedError
1313

1414

15-
# Needs Authentification, needs PUT
15+
# Needs Authentication, needs PUT
1616
@query
1717
def add_block(user, target):
1818
raise NotImplementedError
1919

2020

21-
# Needs Authentification, needs DELETE
21+
# Needs Authentication, needs DELETE
2222
@query
2323
def del_block(user, target):
2424
raise NotImplementedError

resources/lib/twitch/api/v3/channels.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def editors(name):
3131
raise NotImplementedError
3232

3333

34-
# TODO needs authentification and put requests
34+
# TODO needs Authentication and put requests
3535
@query
3636
def update(name, status=None, game=None, delay=0):
3737
raise NotImplementedError

resources/lib/twitch/api/v3/subscriptions.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,19 @@
77
from twitch.queries import query
88

99

10-
# Needs Authentification
10+
# Needs Authentication
1111
@query
1212
def by_channel(channel, limit=25, offset=0, direction=Direction.ASC):
1313
raise NotImplementedError
1414

1515

16-
# Needs Authentification
16+
# Needs Authentication
1717
@query
1818
def channel_to_user(channel, user):
1919
raise NotImplementedError
2020

2121

22-
# Needs Authentification
22+
# Needs Authentication
2323
@query
2424
def user_to_channel(user, channel):
2525
raise NotImplementedError

resources/lib/twitch/api/v3/users.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@ def by_name(name):
1515
return q
1616

1717

18-
# Needs Authentification
18+
# Needs Authentication
1919
@query
2020
def user():
2121
raise NotImplementedError
2222

2323

24-
# Needs Authentification
24+
# Needs Authentication
2525
@query
2626
def streams():
2727
raise NotImplementedError
2828

2929

30-
# Needs Authentification
30+
# Needs Authentication
3131
@query
3232
def videos():
3333
raise NotImplementedError

resources/lib/twitch/api/v3/videos.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@
44
# https://dev.twitch.tv/docs/v3/reference/videos/
55

66
from twitch import keys
7-
from twitch.api.parameters import Boolean, Period
7+
from twitch.api.parameters import Boolean, BroadcastType, Period
88
from twitch.queries import V3Query as Qry
99
from twitch.queries import query
1010

1111
from .users import videos
1212

1313

1414
@query
15-
def by_id(identification):
15+
def by_id(video_id):
1616
q = Qry('videos/{id}')
17-
q.add_urlkw(keys.ID, identification)
17+
q.add_urlkw(keys.ID, video_id)
1818
return q
1919

2020

@@ -30,12 +30,12 @@ def top(limit=10, offset=0, game=None, period=Period.WEEK):
3030

3131
@query
3232
def by_channel(name, limit=10, offset=0,
33-
broadcast_type=keys.ARCHIVE, hls=Boolean.FALSE):
33+
broadcast_type=BroadcastType.ARCHIVE, hls=Boolean.FALSE):
3434
q = Qry('channels/{channel}/videos')
3535
q.add_urlkw(keys.CHANNEL, name)
3636
q.add_param(keys.LIMIT, limit, 10)
3737
q.add_param(keys.OFFSET, offset, 0)
38-
q.add_param(keys.BROADCAST_TYPE, broadcast_type, keys.ARCHIVE)
38+
q.add_param(keys.BROADCAST_TYPE, BroadcastType.validate(broadcast_type), BroadcastType.ARCHIVE)
3939
q.add_param(keys.HLS, Boolean.validate(hls), Boolean.FALSE)
4040
return q
4141

resources/lib/twitch/api/v5/__init__.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
# -*- encoding: utf-8 -*-
2-
# https://github.com/justintv/Twitch-API/blob/master/v3_resources/
2+
# https://dev.twitch.tv/docs/
33

4-
from twitch.api.v5 import blocks # NOQA
54
from twitch.api.v5 import channels # NOQA
6-
from twitch.api.v5 import follows # NOQA
75
from twitch.api.v5 import games # NOQA
86
from twitch.api.v5 import ingests # NOQA
97
from twitch.api.v5 import search # NOQA
108
from twitch.api.v5 import streams # NOQA
11-
from twitch.api.v5 import subscriptions # NOQA
129
from twitch.api.v5 import teams # NOQA
1310
from twitch.api.v5 import users # NOQA
1411
from twitch.api.v5 import videos # NOQA

resources/lib/twitch/api/v5/blocks.py

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
# -*- encoding: utf-8 -*-
2-
# https://github.com/justintv/Twitch-API/blob/master/v3_resources/channels.md
2+
# https://dev.twitch.tv/docs/v5/reference/channels/
33

44
from twitch import keys
55
from twitch.queries import V5Query as Qry
66
from twitch.queries import query
7-
8-
from .videos import by_channel
7+
from twitch.api.parameters import Boolean, BroadcastType, Direction
98

109

1110
@query
12-
def by_name(name):
13-
q = Qry('channels/{channel}')
14-
q.add_urlkw(keys.CHANNEL, name)
11+
def by_id(channel_id):
12+
q = Qry('channels/{id}')
13+
q.add_urlkw(keys.ID, channel_id)
1514
return q
1615

1716

@@ -20,16 +19,12 @@ def channel():
2019
raise NotImplementedError
2120

2221

23-
def get_videos(name, **kwargs):
24-
return by_channel(name, **kwargs)
25-
26-
2722
@query
2823
def editors(name):
2924
raise NotImplementedError
3025

3126

32-
# TODO needs authentification and put requests
27+
# TODO needs Authentication and put requests
3328
@query
3429
def update(name, status=None, game=None, delay=0):
3530
raise NotImplementedError
@@ -48,7 +43,41 @@ def commercial(name, length=30):
4843

4944

5045
@query
51-
def teams(name):
52-
q = Qry('channels/{channel}/teams')
53-
q.add_urlkw('channel', name)
46+
def teams(channel_id):
47+
q = Qry('channels/{id}/teams')
48+
q.add_urlkw(keys.ID, channel_id)
49+
return q
50+
51+
52+
@query
53+
def followers(channel_id, limit=25, offset=0, direction=Direction.DESC):
54+
q = Qry('channels/{id}/follows')
55+
q.add_urlkw(keys.ID, channel_id)
56+
q.add_param(keys.LIMIT, limit, 25)
57+
q.add_param(keys.OFFSET, offset, 0)
58+
q.add_param(keys.DIRECTION, direction, Direction.DESC)
59+
return q
60+
61+
62+
# Needs Authentication
63+
@query
64+
def subscribers(channel_id, limit=25, offset=0, direction=Direction.ASC):
65+
raise NotImplementedError
66+
67+
68+
# Needs Authentication
69+
@query
70+
def subscription_status(channel_id, user_id):
71+
raise NotImplementedError
72+
73+
74+
@query
75+
def videos(channel_id, limit=10, offset=0,
76+
broadcast_type=BroadcastType.ARCHIVE, hls=Boolean.FALSE):
77+
q = Qry('channels/{id}/videos')
78+
q.add_urlkw(keys.ID, channel_id)
79+
q.add_param(keys.LIMIT, limit, 10)
80+
q.add_param(keys.OFFSET, offset, 0)
81+
q.add_param(keys.BROADCAST_TYPE, BroadcastType.validate(broadcast_type), BroadcastType.ARCHIVE)
82+
q.add_param(keys.HLS, Boolean.validate(hls), Boolean.FALSE)
5483
return q

0 commit comments

Comments
 (0)