|
|
|
@ -8,7 +8,6 @@ import json
|
|
|
|
|
|
|
|
|
|
from .common import InfoExtractor
|
|
|
|
|
from ..compat import (
|
|
|
|
|
compat_HTTPError,
|
|
|
|
|
compat_kwargs,
|
|
|
|
|
compat_parse_qs,
|
|
|
|
|
compat_str,
|
|
|
|
@ -39,7 +38,7 @@ class TwitchBaseIE(InfoExtractor):
|
|
|
|
|
_USHER_BASE = 'https://usher.ttvnw.net'
|
|
|
|
|
_LOGIN_FORM_URL = 'https://www.twitch.tv/login'
|
|
|
|
|
_LOGIN_POST_URL = 'https://passport.twitch.tv/login'
|
|
|
|
|
_CLIENT_ID = 'jzkbprff40iqj646a697cyrvl0zt2m6'
|
|
|
|
|
_CLIENT_ID = 'kimne78kx3ncx6brgo4mv6wki5h1ko'
|
|
|
|
|
_NETRC_MACHINE = 'twitch'
|
|
|
|
|
|
|
|
|
|
def _handle_error(self, response):
|
|
|
|
@ -84,20 +83,15 @@ class TwitchBaseIE(InfoExtractor):
|
|
|
|
|
headers = {
|
|
|
|
|
'Referer': page_url,
|
|
|
|
|
'Origin': page_url,
|
|
|
|
|
'Content-Type': 'text/plain;charset=UTF-8'
|
|
|
|
|
'Content-Type': 'text/plain;charset=UTF-8',
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
response = self._download_json(
|
|
|
|
|
post_url, None, note,
|
|
|
|
|
data=json.dumps(form).encode(),
|
|
|
|
|
headers=headers)
|
|
|
|
|
except ExtractorError as e:
|
|
|
|
|
if isinstance(e.cause, compat_HTTPError) and e.cause.code == 400:
|
|
|
|
|
response = self._parse_json(
|
|
|
|
|
e.cause.read().decode('utf-8'), None)
|
|
|
|
|
fail(response.get('error_description') or response.get('error_code'))
|
|
|
|
|
raise
|
|
|
|
|
response = self._download_json(
|
|
|
|
|
post_url, None, note, data=json.dumps(form).encode(),
|
|
|
|
|
headers=headers, expected_status=400)
|
|
|
|
|
error = response.get('error_description') or response.get('error_code')
|
|
|
|
|
if error:
|
|
|
|
|
fail(error)
|
|
|
|
|
|
|
|
|
|
if 'Authenticated successfully' in response.get('message', ''):
|
|
|
|
|
return None, None
|
|
|
|
|