forked from midou/invidious
Fix Reddit comments and add links to author channels/profiles
This commit is contained in:
parent
3dcb6766fc
commit
d7ed7b90be
@ -73,7 +73,7 @@ PG_URL = URI.new(
|
|||||||
|
|
||||||
PG_DB = DB.open PG_URL
|
PG_DB = DB.open PG_URL
|
||||||
YT_URL = URI.parse("https://www.youtube.com")
|
YT_URL = URI.parse("https://www.youtube.com")
|
||||||
REDDIT_URL = URI.parse("https://api.reddit.com")
|
REDDIT_URL = URI.parse("https://www.reddit.com")
|
||||||
LOGIN_URL = URI.parse("https://accounts.google.com")
|
LOGIN_URL = URI.parse("https://accounts.google.com")
|
||||||
|
|
||||||
crawl_threads.times do
|
crawl_threads.times do
|
||||||
@ -690,7 +690,7 @@ get "/api/v1/comments/:id" do |env|
|
|||||||
end
|
end
|
||||||
elsif source == "reddit"
|
elsif source == "reddit"
|
||||||
client = make_client(REDDIT_URL)
|
client = make_client(REDDIT_URL)
|
||||||
headers = HTTP::Headers{"User-Agent" => "web:invidio.us:v0.1.0 (by /u/omarroth)"}
|
headers = HTTP::Headers{"User-Agent" => "web:invidio.us:v0.2.0 (by /u/omarroth)"}
|
||||||
begin
|
begin
|
||||||
comments, reddit_thread = get_reddit_comments(id, client, headers)
|
comments, reddit_thread = get_reddit_comments(id, client, headers)
|
||||||
content_html = template_reddit_comments(comments)
|
content_html = template_reddit_comments(comments)
|
||||||
@ -706,6 +706,7 @@ get "/api/v1/comments/:id" do |env|
|
|||||||
halt env, status_code: 404
|
halt env, status_code: 404
|
||||||
end
|
end
|
||||||
|
|
||||||
|
env.response.content_type = "application/json"
|
||||||
{"title" => reddit_thread.title,
|
{"title" => reddit_thread.title,
|
||||||
"permalink" => reddit_thread.permalink,
|
"permalink" => reddit_thread.permalink,
|
||||||
"content_html" => content_html}.to_json
|
"content_html" => content_html}.to_json
|
||||||
|
@ -356,22 +356,22 @@ def search(query, page = 1)
|
|||||||
root = item.xpath_node(%q(div[contains(@class,"yt-lockup-video")]/div))
|
root = item.xpath_node(%q(div[contains(@class,"yt-lockup-video")]/div))
|
||||||
if !root
|
if !root
|
||||||
next
|
next
|
||||||
end
|
end
|
||||||
|
|
||||||
id = root.xpath_node(%q(.//div[contains(@class,"yt-lockup-thumbnail")]/a/@href)).not_nil!.content.lchop("/watch?v=")
|
id = root.xpath_node(%q(.//div[contains(@class,"yt-lockup-thumbnail")]/a/@href)).not_nil!.content.lchop("/watch?v=")
|
||||||
|
|
||||||
title = root.xpath_node(%q(.//div[@class="yt-lockup-content"]/h3/a)).not_nil!.content
|
title = root.xpath_node(%q(.//div[@class="yt-lockup-content"]/h3/a)).not_nil!.content
|
||||||
|
|
||||||
author = root.xpath_node(%q(.//div[@class="yt-lockup-content"]/div/a)).not_nil!
|
author = root.xpath_node(%q(.//div[@class="yt-lockup-content"]/div/a)).not_nil!
|
||||||
ucid = author["href"].rpartition("/")[-1]
|
ucid = author["href"].rpartition("/")[-1]
|
||||||
author = author.content
|
author = author.content
|
||||||
|
|
||||||
published = root.xpath_node(%q(.//ul[@class="yt-lockup-meta-info"]/li[1])).not_nil!.content
|
published = root.xpath_node(%q(.//ul[@class="yt-lockup-meta-info"]/li[1])).not_nil!.content
|
||||||
published = decode_date(published)
|
published = decode_date(published)
|
||||||
|
|
||||||
video = ChannelVideo.new(id, title, published, Time.now, ucid, author)
|
video = ChannelVideo.new(id, title, published, Time.now, ucid, author)
|
||||||
videos << video
|
videos << video
|
||||||
end
|
end
|
||||||
|
|
||||||
return videos
|
return videos
|
||||||
end
|
end
|
||||||
@ -524,7 +524,7 @@ def get_reddit_comments(id, client, headers)
|
|||||||
thread = search_results.data.as(RedditListing).children.sort_by { |child| child.data.as(RedditLink).score }[-1]
|
thread = search_results.data.as(RedditListing).children.sort_by { |child| child.data.as(RedditLink).score }[-1]
|
||||||
thread = thread.data.as(RedditLink)
|
thread = thread.data.as(RedditLink)
|
||||||
|
|
||||||
result = client.get("/r/#{thread.subreddit}/comments/#{thread.id}?limit=100&sort=top", headers).body
|
result = client.get("/r/#{thread.subreddit}/comments/#{thread.id}.json?limit=100&sort=top", headers).body
|
||||||
result = Array(RedditThing).from_json(result)
|
result = Array(RedditThing).from_json(result)
|
||||||
elsif search_results.status_code == 302
|
elsif search_results.status_code == 302
|
||||||
result = client.get(search_results.headers["Location"], headers).body
|
result = client.get(search_results.headers["Location"], headers).body
|
||||||
@ -562,7 +562,9 @@ def template_youtube_comments(comments)
|
|||||||
<div class="pure-g">
|
<div class="pure-g">
|
||||||
<div class="pure-u-1">
|
<div class="pure-u-1">
|
||||||
<p>
|
<p>
|
||||||
<a href="javascript:void(0)" onclick="toggle(this)">[ - ]</a> <i class="icon ion-ios-thumbs-up"></i> #{child["likeCount"]} <b>#{child["author"]}</b>
|
<a href="javascript:void(0)" onclick="toggle(this)">[ - ]</a>
|
||||||
|
<i class="icon ion-ios-thumbs-up"></i> #{child["likeCount"]}
|
||||||
|
<b><a href="#{child["authorUrl"]}">#{child["author"]}</a></b>
|
||||||
</p>
|
</p>
|
||||||
<div>
|
<div>
|
||||||
#{child["content"]}
|
#{child["content"]}
|
||||||
@ -606,7 +608,9 @@ def template_reddit_comments(root)
|
|||||||
|
|
||||||
content = <<-END_HTML
|
content = <<-END_HTML
|
||||||
<p>
|
<p>
|
||||||
<a href="javascript:void(0)" onclick="toggle(this)">[ - ]</a> <i class="icon ion-ios-thumbs-up"></i> #{score} <b>#{author}</b>
|
<a href="javascript:void(0)" onclick="toggle(this)">[ - ]</a>
|
||||||
|
<i class="icon ion-ios-thumbs-up"></i> #{score}
|
||||||
|
<b><a href="https://www.reddit.com/user/#{author}">#{author}</a></b>
|
||||||
</p>
|
</p>
|
||||||
<div>
|
<div>
|
||||||
#{body_html}
|
#{body_html}
|
||||||
@ -721,7 +725,13 @@ def fill_links(html, scheme, host)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
html = html.xpath_node(%q(//p[@id="eow-description"])).not_nil!.to_xml
|
if host == "www.youtube.com"
|
||||||
|
html = html.xpath_node(%q(//p[@id="eow-description"])).not_nil!.to_xml
|
||||||
|
else
|
||||||
|
html = html.to_xml(options: XML::SaveOptions::NO_DECL)
|
||||||
|
end
|
||||||
|
|
||||||
|
html
|
||||||
end
|
end
|
||||||
|
|
||||||
def login_req(login_form, f_req)
|
def login_req(login_form, f_req)
|
||||||
|
Loading…
Reference in New Issue
Block a user