Преглед изворни кода

[youtube] Fix ytsearch* when cookies are provided

Closes #11924

The API with `page` is no longer used in browsers, and YouTube always
returns {'reload': 'now'} when cookies are provided.

See http://youtube.github.io/spfjs/documentation/start/ for how SPF
works. Basically appending static link with a `spf` parameter yields the
corresponding dynamic link.
tags/2017.02.04
Yen Chi Hsuan пре 7 година
родитељ
комит
a22b2fd19b
No known key found for this signature in database GPG Key ID: 7F902A182457CA23
2 измењених фајлова са 15 додато и 8 уклоњено
  1. +1
    -0
      ChangeLog
  2. +14
    -8
      youtube_dl/extractor/youtube.py

+ 1
- 0
ChangeLog Прегледај датотеку

@@ -1,6 +1,7 @@
version <unreleased>

Extractors
* [youtube] Fix ytsearch when cookies are provided (#11924)
+ [bilibili] Support new Bangumi URLs (#11845)

version 2017.02.01


+ 14
- 8
youtube_dl/extractor/youtube.py Прегледај датотеку

@@ -2348,18 +2348,18 @@ class YoutubeSearchIE(SearchInfoExtractor, YoutubePlaylistIE):
videos = []
limit = n

url_query = {
'search_query': query.encode('utf-8'),
}
url_query.update(self._EXTRA_QUERY_ARGS)
result_url = 'https://www.youtube.com/results?' + compat_urllib_parse_urlencode(url_query)

for pagenum in itertools.count(1):
url_query = {
'search_query': query.encode('utf-8'),
'page': pagenum,
'spf': 'navigate',
}
url_query.update(self._EXTRA_QUERY_ARGS)
result_url = 'https://www.youtube.com/results?' + compat_urllib_parse_urlencode(url_query)
data = self._download_json(
result_url, video_id='query "%s"' % query,
note='Downloading page %s' % pagenum,
errnote='Unable to download API page')
errnote='Unable to download API page',
query={'spf': 'navigate'})
html_content = data[1]['body']['content']

if 'class="search-message' in html_content:
@@ -2371,6 +2371,12 @@ class YoutubeSearchIE(SearchInfoExtractor, YoutubePlaylistIE):
videos += new_videos
if not new_videos or len(videos) > limit:
break
next_link = self._html_search_regex(
r'href="(/results\?[^"]*\bsp=[^"]+)"[^>]*>\s*<span[^>]+class="[^"]*\byt-uix-button-content\b[^"]*"[^>]*>Next',
html_content, 'next link', default=None)
if next_link is None:
break
result_url = compat_urlparse.urljoin('https://www.youtube.com/', next_link)

if len(videos) > n:
videos = videos[:n]


Loading…
Откажи
Сачувај