22
33from six .moves .urllib .parse import urljoin
44
5- from twitch import CLIENT_ID , OAUTH_TOKEN
5+ from twitch import CLIENT_ID , OAUTH_TOKEN , APP_TOKEN
66from twitch .exceptions import ResourceUnavailableException
77from twitch .logging import log
8- from twitch .scraper import download , get_json
8+ from twitch .scraper import download , get_json , get_json_and_headers
99from twitch import methods
1010
1111_kraken_baseurl = 'https://api.twitch.tv/kraken/'
12+ _helix_baseurl = 'https://api.twitch.tv/helix/'
1213_hidden_baseurl = 'https://api.twitch.tv/api/'
1314_usher_baseurl = 'https://usher.ttvnw.net/'
1415_clips_baseurl = 'https://clips.twitch.tv/'
@@ -104,6 +105,12 @@ def execute(self):
104105 return super (JsonQuery , self ).execute (get_json )
105106
106107
108+ class HelixJsonQuery (_Query ):
109+ def execute (self ):
110+ # TODO implement get_json completely here
111+ return super (HelixJsonQuery , self ).execute (get_json_and_headers )
112+
113+
107114class ApiQuery (JsonQuery ):
108115 def __init__ (self , path , headers = {}, data = {}, use_token = True , method = methods .GET ):
109116 headers .setdefault ('Client-ID' , CLIENT_ID )
@@ -113,6 +120,29 @@ def __init__(self, path, headers={}, data={}, use_token=True, method=methods.GET
113120 self .add_path (path )
114121
115122
123+ class HelixApiQuery (HelixJsonQuery ):
124+ def __init__ (self , path , headers = {}, data = {}, use_app_token = False , method = methods .GET ):
125+ headers .setdefault ('Client-ID' , CLIENT_ID )
126+ if use_app_token and APP_TOKEN :
127+ headers .setdefault ('Authorization' , 'Bearer {access_token}' .format (access_token = APP_TOKEN ))
128+ elif OAUTH_TOKEN :
129+ headers .setdefault ('Authorization' , 'Bearer {access_token}' .format (access_token = OAUTH_TOKEN ))
130+ super (HelixApiQuery , self ).__init__ (_helix_baseurl , headers , data , method )
131+ self ._params = list ()
132+ self .add_path (path )
133+
134+ def add_param (self , key , value , default = None ):
135+ if value != default :
136+ if isinstance (value , list ):
137+ _params = []
138+ for val in value :
139+ _params += [(key , val )]
140+ self ._params += _params
141+ elif (key , value ) not in self ._params :
142+ self ._params += [(key , value )]
143+ return self
144+
145+
116146class HiddenApiQuery (JsonQuery ):
117147 def __init__ (self , path , headers = {}, data = {}, use_token = True , method = methods .GET ):
118148 headers .setdefault ('Client-ID' , CLIENT_ID )
@@ -148,6 +178,11 @@ def __init__(self, path, use_token=True, method=methods.GET):
148178 super (V5Query , self ).__init__ (path , _v5_headers , use_token = use_token , method = method )
149179
150180
181+ class HelixQuery (HelixApiQuery ):
182+ def __init__ (self , path , use_app_token = False , method = methods .GET ):
183+ super (HelixQuery , self ).__init__ (path , use_app_token = use_app_token , method = method )
184+
185+
151186def assert_new (d , k ):
152187 if k in d :
153188 v = d .get (k )
0 commit comments