mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	[youtube] Use a cookie for seeting the language
This way, we don't have to do an aditional request
This commit is contained in:
		| @@ -13,6 +13,7 @@ import time | ||||
| import xml.etree.ElementTree | ||||
|  | ||||
| from ..compat import ( | ||||
|     compat_cookiejar, | ||||
|     compat_http_client, | ||||
|     compat_urllib_error, | ||||
|     compat_urllib_parse_urlparse, | ||||
| @@ -817,6 +818,11 @@ class InfoExtractor(object): | ||||
|                 self._downloader.report_warning(msg) | ||||
|         return res | ||||
|  | ||||
|     def _set_cookie(self, domain, name, value, expire_time=None): | ||||
|         cookie = compat_cookiejar.Cookie(0, name, value, None, None, domain, None, | ||||
|             None, '/', True, False, expire_time, '', None, None, None) | ||||
|         self._downloader.cookiejar.set_cookie(cookie) | ||||
|  | ||||
|  | ||||
| class SearchInfoExtractor(InfoExtractor): | ||||
|     """ | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import itertools | ||||
| import json | ||||
| import os.path | ||||
| import re | ||||
| import time | ||||
| import traceback | ||||
|  | ||||
| from .common import InfoExtractor, SearchInfoExtractor | ||||
| @@ -38,16 +39,14 @@ class YoutubeBaseInfoExtractor(InfoExtractor): | ||||
|     """Provide base functions for Youtube extractors""" | ||||
|     _LOGIN_URL = 'https://accounts.google.com/ServiceLogin' | ||||
|     _TWOFACTOR_URL = 'https://accounts.google.com/SecondFactor' | ||||
|     _LANG_URL = r'https://www.youtube.com/?hl=en&persist_hl=1&gl=US&persist_gl=1&opt_out_ackd=1' | ||||
|     _NETRC_MACHINE = 'youtube' | ||||
|     # If True it will raise an error if no login info is provided | ||||
|     _LOGIN_REQUIRED = False | ||||
|  | ||||
|     def _set_language(self): | ||||
|         return bool(self._download_webpage( | ||||
|             self._LANG_URL, None, | ||||
|             note='Setting language', errnote='unable to set language', | ||||
|             fatal=False)) | ||||
|         self._set_cookie('.youtube.com', 'PREF', 'f1=50000000&hl=en', | ||||
|             # YouTube sets the expire time to about two months | ||||
|             expire_time=time.time() + 60*24*3600) | ||||
|  | ||||
|     def _login(self): | ||||
|         """ | ||||
| @@ -178,9 +177,7 @@ class YoutubeBaseInfoExtractor(InfoExtractor): | ||||
|     def _real_initialize(self): | ||||
|         if self._downloader is None: | ||||
|             return | ||||
|         if self._get_login_info()[0] is not None: | ||||
|             if not self._set_language(): | ||||
|                 return | ||||
|         self._set_language() | ||||
|         if not self._login(): | ||||
|             return | ||||
|  | ||||
| @@ -667,16 +664,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor): | ||||
|  | ||||
|         # Get video webpage | ||||
|         url = proto + '://www.youtube.com/watch?v=%s&gl=US&hl=en&has_verified=1&bpctr=9999999999' % video_id | ||||
|         pref_cookies = [ | ||||
|             c for c in self._downloader.cookiejar | ||||
|             if c.domain == '.youtube.com' and c.name == 'PREF'] | ||||
|         for pc in pref_cookies: | ||||
|             if 'hl=' in pc.value: | ||||
|                 pc.value = re.sub(r'hl=[^&]+', 'hl=en', pc.value) | ||||
|             else: | ||||
|                 if pc.value: | ||||
|                     pc.value += '&' | ||||
|                 pc.value += 'hl=en' | ||||
|         video_webpage = self._download_webpage(url, video_id) | ||||
|  | ||||
|         # Attempt to extract SWF player URL | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jaime Marquínez Ferrándiz
					Jaime Marquínez Ferrándiz