diff --git a/src/invidious.cr b/src/invidious.cr index f47ebda7..24bcbdf6 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -178,35 +178,44 @@ get "/search" do |env| client = get_client - html = client.get("https://www.youtube.com/results?q=#{URI.escape(query)}&page=#{page}").body + html = client.get("https://www.youtube.com/results?q=#{URI.escape(query)}&page=#{page}&sp=EgIQAVAU").body html = XML.parse_html(html) videos = Array(Hash(String, String)).new - html.xpath_nodes(%q(//div[contains(@class,"yt-lockup-video")]/div)).each do |item| - video = {} of String => String + html.xpath_nodes(%q(//ol[@class="item-section"]/li)).each do |item| + root = item.xpath_node(%q(div[contains(@class,"yt-lockup-video")]/div)) + if root + video = {} of String => String - link = item.xpath_node(%q(div/div[@class="yt-lockup-content"]/h3/a/@href)) - if link - video["link"] = link.content - else - link = item.xpath_node(%q(div[@class="yt-lockup-content"]/h3/a/@href)) + link = root.xpath_node(%q(div[contains(@class,"yt-lockup-thumbnail")]/a/@href)) if link video["link"] = link.content + else + video["link"] = "#" end - end - title = item.xpath_node(%q(div/div[@class="yt-lockup-content"]/h3/a)) - if title - video["title"] = title.content - else - title = item.xpath_node(%q(div[@class="yt-lockup-content"]/h3/a)) + title = root.xpath_node(%q(div[@class="yt-lockup-content"]/h3/a)) if title video["title"] = title.content + else + video["title"] = "Something went wrong" end - end - videos << video + thumbnail = root.xpath_node(%q(div[contains(@class,"yt-lockup-thumbnail")]/a/div/span/img/@src)) + if thumbnail && !thumbnail.content.ends_with?(".gif") + video["thumbnail"] = thumbnail.content + else + thumbnail = root.xpath_node(%q(div[contains(@class,"yt-lockup-thumbnail")]/a/div/span/img/@data-thumb)) + if thumbnail + video["thumbnail"] = thumbnail.content + else + video["thumbnail"] = "http://via.placeholder.com/246x138" + end + end + + videos << video + end end POOL << client diff --git a/src/views/search.ecr b/src/views/search.ecr index 45eb4caf..d64a5cc0 100644 --- a/src/views/search.ecr +++ b/src/views/search.ecr @@ -3,7 +3,23 @@ <% end %> <% videos.each do |item| %> -
++
+ Next page +
\ No newline at end of file