# 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 login_page = self._download_webpage( self._LOGIN_URL, None, 'Downloading login page') def is_logged(webpage): return 'href="/logout"' in webpage # Already logged in if is_logged(login_page): return login_form_str = self._search_regex( r'(?P