# coding: utf-8 from __future__ import unicode_literals import re import json import xml.etree.ElementTree as etree import zlib from hashlib import sha1 from math import pow, sqrt, floor from .common import InfoExtractor from .vrv import VRVIE from ..compat import ( compat_b64decode, compat_etree_fromstring, compat_urllib_parse_urlencode, compat_urllib_request, compat_urlparse, ) from ..utils import ( ExtractorError, bytes_to_intlist, extract_attributes, float_or_none, intlist_to_bytes, int_or_none, lowercase_escape, remove_end, sanitized_Request, unified_strdate, urlencode_postdata, xpath_text, ) from ..aes import ( aes_cbc_decrypt, ) class CrunchyrollBaseIE(InfoExtractor): _LOGIN_URL = 'https://www.crunchyroll.com/login' _LOGIN_FORM = 'login_form' _NETRC_MACHINE = 'crunchyroll' def _call_rpc_api(self, method, video_id, note=None, data=None): data = data or {} data['req'] = 'RpcApi' + method data = compat_urllib_parse_urlencode(data).encode('utf-8') return self._download_xml( 'https://www.crunchyroll.com/xml/', video_id, note, fatal=False, data=data, headers={ 'Content-Type': 'application/x-www-form-urlencoded', }) def _login(self): username, password = self._get_login_info() if username is None: return self._download_webpage( 'https://www.crunchyroll.com/?a=formhandler', None, 'Logging in', 'Wrong login info', data=urlencode_postdata({ 'formname': 'RpcApiUser_Login', 'next_url': 'https://www.crunchyroll.com/acct/membership', 'name': username, 'password': password, })) ''' login_page = self._download_webpage( self._LOGIN_URL, None, 'Downloading login page') def is_logged(webpage): return '