summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/invidious.cr28
-rw-r--r--src/invidious/playlists.cr31
2 files changed, 30 insertions, 29 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index 9c9049fc..fa28b26f 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -2261,21 +2261,26 @@ get "/api/v1/channels/:ucid" do |env|
author = channel_html.xpath_node(%q(//a[contains(@class, "branded-page-header-title-link")])).not_nil!.content
author_url = channel_html.xpath_node(%q(//a[@class="channel-header-profile-image-container spf-link"])).not_nil!["href"]
author_thumbnail = channel_html.xpath_node(%q(//img[@class="channel-header-profile-image"])).not_nil!["src"]
- description = channel_html.xpath_node(%q(//meta[@itemprop="description"])).not_nil!["content"]
+ description_html = channel_html.xpath_node(%q(//div[contains(@class,"about-description")]))
+ description_html, description = html_to_content(description_html)
paid = channel_html.xpath_node(%q(//meta[@itemprop="paid"])).not_nil!["content"] == "True"
is_family_friendly = channel_html.xpath_node(%q(//meta[@itemprop="isFamilyFriendly"])).not_nil!["content"] == "True"
allowed_regions = channel_html.xpath_node(%q(//meta[@itemprop="regionsAllowed"])).not_nil!["content"].split(",")
- anchor = channel_html.xpath_nodes(%q(//span[@class="about-stat"]))
- if anchor[0].content.includes? "views"
- sub_count = 0
- total_views = anchor[0].content.delete("views •,").to_i64
- joined = Time.parse(anchor[1].content.lchop("Joined "), "%b %-d, %Y", Time::Location.local)
- else
- sub_count = anchor[0].content.delete("subscribers").delete(",").to_i64
- total_views = anchor[1].content.delete("views •,").to_i64
- joined = Time.parse(anchor[2].content.lchop("Joined "), "%b %-d, %Y", Time::Location.local)
+ total_views = 0_i64
+ sub_count = 0_i64
+ joined = Time.epoch(0)
+ metadata = channel_html.xpath_nodes(%q(//span[@class="about-stat"]))
+ metadata.each do |item|
+ case item.content
+ when .includes? "views"
+ total_views = item.content.delete("views •,").to_i64
+ when .includes? "subscribers"
+ sub_count = item.content.delete("subscribers").delete(",").to_i64
+ when .includes? "Joined"
+ joined = Time.parse(item.content.lchop("Joined "), "%b %-d, %Y", Time::Location.local)
+ end
end
channel_info = JSON.build do |json|
@@ -2326,6 +2331,8 @@ get "/api/v1/channels/:ucid" do |env|
json.field "isFamilyFriendly", is_family_friendly
json.field "description", description
+ json.field "descriptionHtml", description_html
+
json.field "allowedRegions", allowed_regions
json.field "latestVideos" do
@@ -2518,6 +2525,7 @@ get "/api/v1/playlists/:plid" do |env|
json.field "authorUrl", "/channel/#{playlist.ucid}"
json.field "description", playlist.description
+ json.field "descriptionHtml", playlist.description_html
json.field "videoCount", playlist.video_count
json.field "viewCount", playlist.views
diff --git a/src/invidious/playlists.cr b/src/invidious/playlists.cr
index bd769759..1df4ffc4 100644
--- a/src/invidious/playlists.cr
+++ b/src/invidious/playlists.cr
@@ -1,13 +1,14 @@
class Playlist
add_mapping({
- title: String,
- id: String,
- author: String,
- ucid: String,
- description: String,
- video_count: Int32,
- views: Int64,
- updated: Time,
+ title: String,
+ id: String,
+ author: String,
+ ucid: String,
+ description: String,
+ description_html: String,
+ video_count: Int32,
+ views: Int64,
+ updated: Time,
})
end
@@ -123,17 +124,8 @@ def fetch_playlist(plid)
title = document.xpath_node(%q(//h1[@class="pl-header-title"])).not_nil!.content
title = title.strip(" \n")
- description = document.xpath_node(%q(//span[@class="pl-header-description-text"]/div/div[1]))
- description ||= document.xpath_node(%q(//span[@class="pl-header-description-text"]))
-
- if description
- description = description.to_xml.strip(" \n")
- description = description.split("<button ")[0]
- description = fill_links(description, "https", "www.youtube.com")
- description = replace_links(description)
- else
- description = ""
- end
+ description_html = document.xpath_node(%q(//span[@class="pl-header-description-text"]/div/div[1]))
+ description, description_html = html_to_content(description_html)
anchor = document.xpath_node(%q(//ul[@class="pl-header-details"])).not_nil!
author = anchor.xpath_node(%q(.//li[1]/a)).not_nil!.content
@@ -151,6 +143,7 @@ def fetch_playlist(plid)
author,
ucid,
description,
+ description_html,
video_count,
views,
updated