1
0
mirror of https://github.com/l1ving/youtube-dl synced 2025-03-10 07:19:57 +08:00

Implement cfscrape for Crunchyroll extractor and check version for cfscrape

This commit is contained in:
kidburglar 2019-03-02 13:46:40 +01:00
parent a8f83f0c56
commit 7d718bbeea

View File

@ -5,6 +5,11 @@ import re
import json
import xml.etree.ElementTree as etree
import zlib
try:
import cfscrape
cfscrape_available = True
except ImportError:
cfscrape_available = False
from hashlib import sha1
from math import pow, sqrt, floor
@ -27,6 +32,7 @@ from ..utils import (
lowercase_escape,
remove_end,
sanitized_Request,
std_headers,
unified_strdate,
urlencode_postdata,
xpath_text,
@ -56,6 +62,18 @@ class CrunchyrollBaseIE(InfoExtractor):
if username is None:
return
if cfscrape_available:
if cfscrape.__version__ >= '1.9.0':
# Scrape cookie from cloudflare and insert them
scraper = cfscrape.create_scraper()
tokens = scraper.get_tokens(self._LOGIN_URL, std_headers['User-Agent'])
self._set_crunchyroll_cookie('cf_clearance', tokens[0]['cf_clearance'])
self._set_crunchyroll_cookie('__cfduid', tokens[0]['__cfduid'])
else:
self.report_warning('cfscrape version is bellow 1.9.0 please update cfscrape.')
else:
self.report_warning('cfscrape not found. Please install it if you want use login function for CrunchyRoll.')
login_page = self._download_webpage(
self._LOGIN_URL, None, 'Downloading login page')
@ -116,6 +134,9 @@ class CrunchyrollBaseIE(InfoExtractor):
request.add_header('Accept-Language', '*')
return super(CrunchyrollBaseIE, self)._download_webpage(request, *args, **kwargs)
def _set_crunchyroll_cookie(self, name, value):
self._set_cookie('crunchyroll.com', name, value)
@staticmethod
def _add_skip_wall(url):
parsed_url = compat_urlparse.urlparse(url)