Spin parts into components
This commit is contained in:
parent
a2e23f7022
commit
e865a801aa
@ -13,6 +13,10 @@ macro templated(filename)
|
||||
render "src/views/#{{{filename}}}.ecr", "src/views/layout.ecr"
|
||||
end
|
||||
|
||||
macro rendered(filename)
|
||||
render "src/views/#{{{filename}}}.ecr"
|
||||
end
|
||||
|
||||
class Config
|
||||
YAML.mapping({
|
||||
crawl_threads: Int32,
|
||||
|
@ -386,34 +386,32 @@ get "/search" do |env|
|
||||
html = client.get("/results?q=#{URI.escape(query)}&page=#{page}&sp=EgIQAVAU").body
|
||||
html = XML.parse_html(html)
|
||||
|
||||
videos = Array(Hash(String, String)).new
|
||||
videos = [] of Video
|
||||
|
||||
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
|
||||
|
||||
id = root.xpath_node(%q(div[contains(@class,"yt-lockup-thumbnail")]/a/@href))
|
||||
if id
|
||||
id = id.content.lchop("/watch?v=")
|
||||
end
|
||||
id ||= ""
|
||||
video["id"] = id
|
||||
|
||||
title = root.xpath_node(%q(div[@class="yt-lockup-content"]/h3/a))
|
||||
if title
|
||||
video["title"] = title.content
|
||||
title = title.content
|
||||
end
|
||||
video["title"] ||= ""
|
||||
title ||= ""
|
||||
|
||||
author = root.xpath_node(%q(div[@class="yt-lockup-content"]/div/a))
|
||||
if author
|
||||
video["author"] = author.content
|
||||
video["ucid_url"] = author["href"]
|
||||
ucid = author["href"].rpartition("/")[-1]
|
||||
author = author.content
|
||||
end
|
||||
video["author"] ||= ""
|
||||
video["ucid_url"] ||= ""
|
||||
author ||= ""
|
||||
ucid ||= ""
|
||||
|
||||
video = Video.new(id, HTTP::Params.parse(""), Time.now, title, 0_i64, 0, 0, 0.0, Time.now, "", nil, author, ucid)
|
||||
videos << video
|
||||
end
|
||||
end
|
||||
|
14
src/views/components/subscription_video.ecr
Normal file
14
src/views/components/subscription_video.ecr
Normal file
@ -0,0 +1,14 @@
|
||||
<div class="pure-u-1 pure-u-md-1-4">
|
||||
<div class="h-box">
|
||||
<a style="width:100%;" href="/watch?v=<%= video.id %>">
|
||||
<img style="width:100%;" src="https://i.ytimg.com/vi/<%= video.id %>/mqdefault.jpg"/>
|
||||
<p style="height:100%"><%= video.title %></p>
|
||||
</a>
|
||||
<p>
|
||||
<b><a style="width:100%;" href="/channel/<%= video.ucid %>"><%= video.author %></a></b>
|
||||
</p>
|
||||
<p>
|
||||
<h5>Shared <%= video.published.to_s("%B %-d, %Y at %r UTC") %></h5>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
11
src/views/components/video.ecr
Normal file
11
src/views/components/video.ecr
Normal file
@ -0,0 +1,11 @@
|
||||
<div class="pure-u-1 pure-u-md-1-4">
|
||||
<div class="h-box">
|
||||
<a style="width:100%;" href="/watch?v=<%= video.id %>">
|
||||
<img style="width:100%;" src="https://i.ytimg.com/vi/<%= video.id %>/mqdefault.jpg"/>
|
||||
<p><%= video.title %></p>
|
||||
</a>
|
||||
<p>
|
||||
<b><a style="width:100%;" href="/channel/<%= video.ucid %>"><%= video.author %></a></b>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
@ -3,19 +3,9 @@
|
||||
<% end %>
|
||||
|
||||
<% top_videos.each_slice(4) do |slice| %>
|
||||
<div class="pure-g">
|
||||
<% slice.each do |video| %>
|
||||
<div class="pure-u-1 pure-u-md-1-4">
|
||||
<div class="h-box">
|
||||
<a style="width:100%;" href="/watch?v=<%= video.id %>">
|
||||
<img style="width:100%;" src="https://i.ytimg.com/vi/<%= video.id %>/mqdefault.jpg"/>
|
||||
<p><%= video.title %></p>
|
||||
</a>
|
||||
<p>
|
||||
<b><a style="width:100%;" href="https://youtube.com/channel/<%= video.info["ucid"] %>"><%= video.info["author"] %></a></b>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pure-g">
|
||||
<% slice.each do |video| %>
|
||||
<%= rendered "components/video" %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
@ -5,17 +5,7 @@
|
||||
<% videos.each_slice(4) do |slice| %>
|
||||
<div class="pure-g">
|
||||
<% slice.each do |video| %>
|
||||
<div class="pure-u-1 pure-u-md-1-4">
|
||||
<div class="h-box">
|
||||
<a style="width:100%;" href="/watch?v=<%= video["id"] %>">
|
||||
<img style="width:100%;" src="https://i.ytimg.com/vi/<%= video["id"] %>/mqdefault.jpg"/>
|
||||
<p><%= video["title"] %></p>
|
||||
</a>
|
||||
<p>
|
||||
<b><a style="width:100%;" href="https://youtube.com<%= video["ucid_url"]%>"><%= video["author"] %></a></b>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<%= rendered "components/video" %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
@ -3,48 +3,22 @@
|
||||
<% end %>
|
||||
|
||||
<% if !notifications.empty? %>
|
||||
<% notifications.each_slice(4) do |slice| %>
|
||||
<div class="pure-g">
|
||||
<% notifications.each_slice(4) do |slice| %>
|
||||
<div class="pure-g">
|
||||
<% slice.each do |video| %>
|
||||
<div class="pure-u-1 pure-u-md-1-4">
|
||||
<div class="h-box">
|
||||
<a style="width:100%;" href="/watch?v=<%= video.id %>">
|
||||
<img style="width:100%;" src="https://i.ytimg.com/vi/<%= video.id %>/mqdefault.jpg"/>
|
||||
<p style="height:100%"><%= video.title %></p>
|
||||
</a>
|
||||
<p>
|
||||
<b><a style="width:100%;" href="https://youtube.com/channel/<%= video.ucid %>"><%= video.author %></a></b>
|
||||
</p>
|
||||
<p>
|
||||
<h5>Shared <%= video.published.to_s("%B %-d, %Y at %r UTC") %></h5>
|
||||
</p>
|
||||
</div>
|
||||
<%= rendered "components/subscription_video" %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
<hr style="margin-left:1em; margin-right:1em;">
|
||||
<hr style="margin-left:1em; margin-right:1em;">
|
||||
<% end %>
|
||||
|
||||
<% videos.each_slice(4) do |slice| %>
|
||||
<div class="pure-g">
|
||||
<div class="pure-g">
|
||||
<% slice.each do |video| %>
|
||||
<div class="pure-u-1 pure-u-md-1-4">
|
||||
<div class="h-box">
|
||||
<a style="width:100%;" href="/watch?v=<%= video.id %>">
|
||||
<img style="width:100%;" src="https://i.ytimg.com/vi/<%= video.id %>/mqdefault.jpg"/>
|
||||
<p style="height:100%"><%= video.title %></p>
|
||||
</a>
|
||||
<p>
|
||||
<b><a style="width:100%;" href="https://youtube.com/channel/<%= video.ucid %>"><%= video.author %></a></b>
|
||||
</p>
|
||||
<p>
|
||||
<h5>Shared <%= video.published.to_s("%B %-d, %Y at %r UTC") %></h5>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<%= rendered "components/subscription_video" %>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<div class="pure-g">
|
||||
|
Loading…
Reference in New Issue
Block a user