diff --git a/.env b/.env index 5a7e0f1ab..08f7601dc 100644 --- a/.env +++ b/.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= \ No newline at end of file +# export DANBOORU_CLOUDFLARE_ZONE= +# export DANBOORU_RECOMMENDER_KEY= +# export DANBOORU_RECOMMENDER_SERVER= diff --git a/app/logical/post_sets/similar.rb b/app/logical/post_sets/similar.rb new file mode 100644 index 000000000..65ab49c85 --- /dev/null +++ b/app/logical/post_sets/similar.rb @@ -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 diff --git a/app/models/recommender_service.rb b/app/models/recommender_service.rb new file mode 100644 index 000000000..999da429b --- /dev/null +++ b/app/models/recommender_service.rb @@ -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 diff --git a/app/views/posts/partials/index/_similar.html.erb b/app/views/posts/partials/index/_similar.html.erb new file mode 100644 index 000000000..ab2b750df --- /dev/null +++ b/app/views/posts/partials/index/_similar.html.erb @@ -0,0 +1,7 @@ +
You might also like:
+ +