Add support for anonymous playlists

This commit is contained in:
Omar Roth 2019-05-01 08:03:58 -05:00
parent 6fb44083ec
commit 22b9bbe702
No known key found for this signature in database
GPG key ID: B8254FB7EC3D37F2

View file

@ -190,23 +190,27 @@ def fetch_playlist(plid, locale)
description_html ||= document.xpath_node(%q(//span[@class="pl-header-description-text"])) description_html ||= document.xpath_node(%q(//span[@class="pl-header-description-text"]))
description_html, description = html_to_content(description_html) description_html, description = html_to_content(description_html)
anchor = document.xpath_node(%q(//ul[@class="pl-header-details"])).not_nil! # YouTube allows anonymous playlists, so most of this can be empty or optional
author = anchor.xpath_node(%q(.//li[1]/a)).not_nil!.content anchor = document.xpath_node(%q(//ul[@class="pl-header-details"]))
author = anchor.try &.xpath_node(%q(.//li[1]/a)).try &.content
author ||= ""
author_thumbnail = document.xpath_node(%q(//img[@class="channel-header-profile-image"])).try &.["src"] author_thumbnail = document.xpath_node(%q(//img[@class="channel-header-profile-image"])).try &.["src"]
author_thumbnail ||= "" author_thumbnail ||= ""
ucid = anchor.xpath_node(%q(.//li[1]/a)).not_nil!["href"].split("/")[-1] ucid = anchor.try &.xpath_node(%q(.//li[1]/a)).try &.["href"].split("/")[-1]
ucid ||= ""
video_count = anchor.xpath_node(%q(.//li[2])).not_nil!.content.gsub(/\D/, "").to_i video_count = anchor.try &.xpath_node(%q(.//li[2])).try &.content.gsub(/\D/, "").to_i?
views = anchor.xpath_node(%q(.//li[3])).not_nil!.content.delete("No views, ") video_count ||= 0
if views.empty? views = anchor.try &.xpath_node(%q(.//li[3])).try &.content.delete("No views, ").to_i64?
views = 0_i64 views ||= 0_i64
updated = anchor.try &.xpath_node(%q(.//li[4])).try &.content.lchop("Last updated on ").lchop("Updated ")
if updated
updated = decode_date(updated)
else else
views = views.to_i64 updated = Time.now
end end
updated = anchor.xpath_node(%q(.//li[4])).not_nil!.content.lchop("Last updated on ").lchop("Updated ")
updated = decode_date(updated)
playlist = Playlist.new( playlist = Playlist.new(
title: title, title: title,
id: plid, id: plid,