forked from e621ng/e621ng
Recommend posts on /posts/show based on voting patterns
This commit is contained in:
parent
93f52adc81
commit
d9a1eeacc9
6
.env
6
.env
@ -80,8 +80,8 @@
|
||||
# export DANBOORU_AWS_SQS_REGION=
|
||||
# export DANBOORU_IQDBS_AUTH_KEY=
|
||||
# export DANBOORU_IQDBS_SERVER=
|
||||
# export DANBOORU_CCS_SERVER=
|
||||
# export DANBOORU_CCS_KEY=
|
||||
# export DANBOORU_CLOUDFLARE_KEY=
|
||||
# export DANBOORU_CLOUDFLARE_EMAIL=
|
||||
# export DANBOORU_CLOUDFLARE_ZONE=
|
||||
# export DANBOORU_CLOUDFLARE_ZONE=
|
||||
# export DANBOORU_RECOMMENDER_KEY=
|
||||
# export DANBOORU_RECOMMENDER_SERVER=
|
||||
|
19
app/logical/post_sets/similar.rb
Normal file
19
app/logical/post_sets/similar.rb
Normal file
@ -0,0 +1,19 @@
|
||||
module PostSets
|
||||
class Similar < PostSets::Post
|
||||
def initialize(post)
|
||||
super(tags)
|
||||
end
|
||||
|
||||
def posts
|
||||
@posts ||= begin
|
||||
post_ids, scores = RecommenderService.similar(post)
|
||||
post_ids = post_ids.reject {|x| x == post.id}.slice(0, 5)
|
||||
Post.find(post_ids)
|
||||
end
|
||||
end
|
||||
|
||||
def presenter
|
||||
::Presenters::PostSetPresenters::Post.new(self)
|
||||
end
|
||||
end
|
||||
end
|
26
app/models/recommender_service.rb
Normal file
26
app/models/recommender_service.rb
Normal file
@ -0,0 +1,26 @@
|
||||
module RecommenderService
|
||||
extend self
|
||||
|
||||
def enabled?
|
||||
Danbooru.config.recommender_server.present?
|
||||
end
|
||||
|
||||
def available?(post)
|
||||
enabled? && CurrentUser.id == 1 && post.created_at > 6.months.ago && post.score >= 10
|
||||
end
|
||||
|
||||
def similar(post)
|
||||
Cache.get("rss:#{post.id}", 1.day) do
|
||||
resp = HTTParty.get(
|
||||
"#{Danbooru.config.recommender_server}/similar/#{post.id}",
|
||||
Danbooru.config.httparty_options.merge(
|
||||
basic_auth: {
|
||||
username: "danbooru",
|
||||
password: Danbooru.config.recommender_key
|
||||
}
|
||||
)
|
||||
)
|
||||
JSON.parse(resp.body)
|
||||
end
|
||||
end
|
||||
end
|
7
app/views/posts/partials/index/_similar.html.erb
Normal file
7
app/views/posts/partials/index/_similar.html.erb
Normal file
@ -0,0 +1,7 @@
|
||||
<div class="recent-posts">
|
||||
<p>You might also like:</p>
|
||||
|
||||
<div>
|
||||
<%= PostSets::Similar.new(post).presenter.post_previews_html(self) %>
|
||||
</div>
|
||||
</div>
|
@ -82,6 +82,10 @@
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if RecommenderService.available?(@post) %>
|
||||
<%= render "posts/partials/index/similar", post: @post %>
|
||||
<% end %>
|
||||
|
||||
<% if @post.presenter.has_nav_links?(self) %>
|
||||
<%= render "posts/partials/show/nav_links", :post => @post, :position => "bottom" %>
|
||||
<% end %>
|
||||
|
Loading…
Reference in New Issue
Block a user