remove post view counts, add search counts
This commit is contained in:
@@ -25,7 +25,6 @@
|
|||||||
this.initialize_post_image_resize_links();
|
this.initialize_post_image_resize_links();
|
||||||
this.initialize_post_image_resize_to_window_link();
|
this.initialize_post_image_resize_to_window_link();
|
||||||
this.initialize_similar();
|
this.initialize_similar();
|
||||||
this.initialize_view_count();
|
|
||||||
|
|
||||||
if (Danbooru.meta("always-resize-images") === "true") {
|
if (Danbooru.meta("always-resize-images") === "true") {
|
||||||
$("#image-resize-to-window-link").click();
|
$("#image-resize-to-window-link").click();
|
||||||
@@ -536,25 +535,6 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Danbooru.Post.initialize_view_count = function() {
|
|
||||||
if ($("#views-for-post").length) {
|
|
||||||
$("#views-for-post-li").hide();
|
|
||||||
var current_post_id = $("meta[name=post-id]").attr("content");
|
|
||||||
$.ajax({
|
|
||||||
url: Danbooru.meta("report-server") + "/hits/pv-" + current_post_id,
|
|
||||||
success: function(data) {
|
|
||||||
$("#views-for-post").html(data);
|
|
||||||
$("#views-for-post-li").show();
|
|
||||||
},
|
|
||||||
dataType: "text"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Danbooru.Post.set_view_count = function(count) {
|
|
||||||
$("#views-for-post").html(count);
|
|
||||||
}
|
|
||||||
})();
|
})();
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
|||||||
@@ -8,10 +8,9 @@ module Explore
|
|||||||
respond_with(@posts)
|
respond_with(@posts)
|
||||||
end
|
end
|
||||||
|
|
||||||
def popular_view
|
def searches
|
||||||
@post_set = PostSets::PopularView.new(params[:date], params[:scale])
|
@date = params[:date] ? Date.parse(params[:date]) : Date.today
|
||||||
@posts = @post_set.posts
|
@search_service = PopularSearchService.new(@date, params[:scale] || "day")
|
||||||
respond_with(@posts)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def intro
|
def intro
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
module PostsHelper
|
module PostsHelper
|
||||||
def post_view_count_js
|
def post_search_count_js
|
||||||
return nil unless Danbooru.config.enable_view_counts
|
return nil unless Danbooru.config.enable_post_search_counts
|
||||||
|
|
||||||
if action_name == "index"
|
if action_name == "index" && params[:page].nil?
|
||||||
return nil
|
tags = Tag.scan_query(params[:tags]).sort.join(" ")
|
||||||
elsif action_name == "show"
|
|
||||||
key = "show-#{params[:id]}"
|
if tags.present?
|
||||||
value = session.id
|
key = "ps-#{tags}"
|
||||||
digest = OpenSSL::Digest.new("sha256")
|
value = session.id
|
||||||
sig = OpenSSL::HMAC.hexdigest(digest, Danbooru.config.shared_remote_key, "#{key},#{value}")
|
digest = OpenSSL::Digest.new("sha256")
|
||||||
return render("posts/partials/show/view_count", key: key, value: value, sig: sig)
|
sig = OpenSSL::HMAC.hexdigest(digest, Danbooru.config.shared_remote_key, "#{key},#{value}")
|
||||||
|
return render("posts/partials/index/search_count", key: key, value: value, sig: sig)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
31
app/logical/popular_search_service.rb
Normal file
31
app/logical/popular_search_service.rb
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# queries reportbooru to find popular post searches
|
||||||
|
class PopularSearchService
|
||||||
|
attr_reader :date, :scale
|
||||||
|
|
||||||
|
def initialize(date, scale)
|
||||||
|
@date = date
|
||||||
|
@scale = scale
|
||||||
|
end
|
||||||
|
|
||||||
|
def each_search(&block)
|
||||||
|
fetch_data.scan(/\S+/).in_groups_of(2).each(&block)
|
||||||
|
end
|
||||||
|
|
||||||
|
def fetch_data
|
||||||
|
dates = date.strftime("%Y-%m-%d")
|
||||||
|
|
||||||
|
Cache.get("ps-#{scale}-#{dates}", 1.minute) do
|
||||||
|
url = URI.parse("#{Danbooru.config.report_server}/hits/#{scale}?date=#{dates}")
|
||||||
|
response = []
|
||||||
|
Net::HTTP.start(url.host, url.port, :use_ssl => url.is_a?(URI::HTTPS)) do |http|
|
||||||
|
http.read_timeout = 1
|
||||||
|
http.request_get(url.request_uri) do |res|
|
||||||
|
if res.is_a?(Net::HTTPSuccess)
|
||||||
|
response = res.body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
response
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
module PostSets
|
|
||||||
class PopularView < PostSets::Base
|
|
||||||
attr_reader :date, :scale
|
|
||||||
|
|
||||||
def initialize(date, scale)
|
|
||||||
@date = date.blank? ? Time.zone.now : Time.zone.parse(date)
|
|
||||||
@scale = scale || "Day"
|
|
||||||
end
|
|
||||||
|
|
||||||
def posts
|
|
||||||
@posts ||= begin
|
|
||||||
array = fetch_data.scan(/\S+/).in_groups_of(2)
|
|
||||||
post_ids = array.map(&:first)
|
|
||||||
posts = ::Post.where(id: post_ids).order(arbitrary_sql_order_clause(post_ids, "posts"))
|
|
||||||
posts.each.with_index do |post, i|
|
|
||||||
post.view_count = array[i][1].to_i
|
|
||||||
end
|
|
||||||
posts
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def min_date
|
|
||||||
case scale
|
|
||||||
when "week"
|
|
||||||
date.beginning_of_week
|
|
||||||
|
|
||||||
when "month"
|
|
||||||
date.beginning_of_month
|
|
||||||
|
|
||||||
else
|
|
||||||
date
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def max_date
|
|
||||||
case scale
|
|
||||||
when "week"
|
|
||||||
date.end_of_week
|
|
||||||
|
|
||||||
when "month"
|
|
||||||
date.end_of_month
|
|
||||||
|
|
||||||
else
|
|
||||||
date
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def source
|
|
||||||
"popular_by_#{scale.downcase}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def fetch_data
|
|
||||||
dates = date.strftime('%Y-%m-%d')
|
|
||||||
Cache.get("pv-#{scale}-#{dates}", 1.minute) do
|
|
||||||
url = URI.parse("#{Danbooru.config.report_server}/hits/#{source}?date=#{dates}")
|
|
||||||
response = []
|
|
||||||
Net::HTTP.start(url.host, url.port, :use_ssl => url.is_a?(URI::HTTPS)) do |http|
|
|
||||||
http.read_timeout = 1
|
|
||||||
http.request_get(url.request_uri) do |res|
|
|
||||||
if res.is_a?(Net::HTTPSuccess)
|
|
||||||
response = res.body
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
response
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def presenter
|
|
||||||
::PostSetPresenters::Popular.new(self)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
module PostSetPresenters
|
|
||||||
class PopularView < Popular
|
|
||||||
def initialize(post_set)
|
|
||||||
@post_set = post_set
|
|
||||||
end
|
|
||||||
|
|
||||||
def nav_links_for_scale(template, scale)
|
|
||||||
html = []
|
|
||||||
html << '<span class="period">'
|
|
||||||
html << template.link_to(
|
|
||||||
"«prev".html_safe,
|
|
||||||
template.popular_explore_post_views_path(
|
|
||||||
:date => prev_date_for_scale(scale),
|
|
||||||
:scale => scale.downcase
|
|
||||||
),
|
|
||||||
:rel => (link_rel_for_scale?(template, scale.downcase) ? "prev" : nil)
|
|
||||||
)
|
|
||||||
html << template.link_to(
|
|
||||||
scale,
|
|
||||||
template.popular_explore_post_views_path(
|
|
||||||
:date => date,
|
|
||||||
:scale => scale.downcase
|
|
||||||
),
|
|
||||||
:class => "desc"
|
|
||||||
)
|
|
||||||
html << template.link_to(
|
|
||||||
"next»".html_safe,
|
|
||||||
template.popular_explore_post_views_path(
|
|
||||||
:date => next_date_for_scale(scale),
|
|
||||||
:scale => scale.downcase
|
|
||||||
),
|
|
||||||
:rel => (link_rel_for_scale?(template, scale.downcase) ? "next" : nil)
|
|
||||||
)
|
|
||||||
html << '</span>'
|
|
||||||
html.join("\n").html_safe
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
<div id="c-explore-posts">
|
|
||||||
<div id="a-index">
|
|
||||||
<h1>Popular (by views): <%= @post_set.presenter.range_text %></h1>
|
|
||||||
|
|
||||||
<%= @post_set.presenter.nav_links(self) %>
|
|
||||||
|
|
||||||
<%= render "posts/partials/common/inline_blacklist" %>
|
|
||||||
|
|
||||||
<%= @post_set.presenter.post_previews_html(self) %>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<%= render "posts/partials/common/secondary_links" %>
|
|
||||||
|
|
||||||
<% content_for(:page_title) do %>
|
|
||||||
Popular (by views) - <%= Danbooru.config.app_name %>
|
|
||||||
<% end %>
|
|
||||||
43
app/views/explore/posts/searches.html.erb
Normal file
43
app/views/explore/posts/searches.html.erb
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<div id="c-explore-posts">
|
||||||
|
<div id="a-index">
|
||||||
|
<h1>Popular Searches: <%= @search_service.date %> (by <%= @search_service.scale %>)</h1>
|
||||||
|
|
||||||
|
<table class="striped" width="100%">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Tags</th>
|
||||||
|
<th style="text-align: right;">Count</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<% @search_service.each_search do |tags, count| %>
|
||||||
|
<tr>
|
||||||
|
<td><%= link_to tags, posts_path(:tags => tags) %></td>
|
||||||
|
<td style="text-align: right;"><%= count.to_i %></td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p style="margin-top: 2em;">
|
||||||
|
View by
|
||||||
|
<%= link_to "day", searches_explore_posts_path(:date => params[:date], :scale => "day") %> |
|
||||||
|
<%= link_to "week", searches_explore_posts_path(:date => params[:date], :scale => "week") %> |
|
||||||
|
<%= link_to "year", searches_explore_posts_path(:date => params[:date], :scale => "year") %>.
|
||||||
|
|
||||||
|
Back one
|
||||||
|
<%= link_to "day", searches_explore_posts_path(:date => 1.day.ago(@date), :scale => params[:scale]) %> |
|
||||||
|
<%= link_to "week", searches_explore_posts_path(:date => 1.week.ago(@date), :scale => params[:scale]) %>.
|
||||||
|
|
||||||
|
Forward one
|
||||||
|
<%= link_to "day", searches_explore_posts_path(:date => 1.day.since(@date), :scale => params[:scale]) %> |
|
||||||
|
<%= link_to "week", searches_explore_posts_path(:date => 1.week.since(@date), :scale => params[:scale]) %>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= render "posts/partials/common/secondary_links" %>
|
||||||
|
|
||||||
|
<% content_for(:page_title) do %>
|
||||||
|
Popular Searches - <%= Danbooru.config.app_name %>
|
||||||
|
<% end %>
|
||||||
@@ -50,6 +50,7 @@
|
|||||||
|
|
||||||
<%= render "posts/partials/common/secondary_links" %>
|
<%= render "posts/partials/common/secondary_links" %>
|
||||||
|
|
||||||
|
<%= post_search_count_js %>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -14,9 +14,6 @@
|
|||||||
<li>Source: <%= post_source_tag(post) %></li>
|
<li>Source: <%= post_source_tag(post) %></li>
|
||||||
<li>Rating: <%= post.pretty_rating %></li>
|
<li>Rating: <%= post.pretty_rating %></li>
|
||||||
<li>Score: <span id="score-for-post-<%= post.id %>"><%= post.score %></span> <% if CurrentUser.is_gold? %>(<span id="vote-links-for-post-<%= post.id %>">vote <%= link_to "up", post_votes_path(:post_id => post.id, :score => "up"), :remote => true, :method => :post %>/<%= link_to "down", post_votes_path(:post_id => post.id, :score => "down"), :remote => true, :method => :post %></span><%= link_to "unvote", unvote_post_path(post), :remote => true, :method => :put, :id => "unvote-link-for-post-#{post.id}", :class => "unvote-post-link" %>)<% end %></li>
|
<li>Score: <span id="score-for-post-<%= post.id %>"><%= post.score %></span> <% if CurrentUser.is_gold? %>(<span id="vote-links-for-post-<%= post.id %>">vote <%= link_to "up", post_votes_path(:post_id => post.id, :score => "up"), :remote => true, :method => :post %>/<%= link_to "down", post_votes_path(:post_id => post.id, :score => "down"), :remote => true, :method => :post %></span><%= link_to "unvote", unvote_post_path(post), :remote => true, :method => :put, :id => "unvote-link-for-post-#{post.id}", :class => "unvote-post-link" %>)<% end %></li>
|
||||||
<% if Danbooru.config.enable_view_counts %>
|
|
||||||
<li id="views-for-post-li">Views: <span id="views-for-post"><em>loading...</em></span></li>
|
|
||||||
<% end %>
|
|
||||||
<li>Favorites: <span id="favcount-for-post-<%= post.id %>"><%= post.fav_count %></span>
|
<li>Favorites: <span id="favcount-for-post-<%= post.id %>"><%= post.fav_count %></span>
|
||||||
<% if CurrentUser.is_gold? %>
|
<% if CurrentUser.is_gold? %>
|
||||||
<%= link_to "Show »".html_safe, "#", :id => "show-favlist-link" %>
|
<%= link_to "Show »".html_safe, "#", :id => "show-favlist-link" %>
|
||||||
|
|||||||
@@ -139,8 +139,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<%= post_view_count_js %>
|
|
||||||
|
|
||||||
<% content_for(:page_title) do %>
|
<% content_for(:page_title) do %>
|
||||||
<%= @post.presenter.humanized_essential_tag_string %> - <%= Danbooru.config.app_name %>
|
<%= @post.presenter.humanized_essential_tag_string %> - <%= Danbooru.config.app_name %>
|
||||||
<% end %>
|
<% end %>
|
||||||
@@ -160,7 +158,7 @@
|
|||||||
<meta property="og:description" content="<%= @post.presenter.humanized_tag_string %>">
|
<meta property="og:description" content="<%= @post.presenter.humanized_tag_string %>">
|
||||||
<meta property="og:image" content="http://<%= Danbooru.config.hostname %><%= @post.large_file_url %>">
|
<meta property="og:image" content="http://<%= Danbooru.config.hostname %><%= @post.large_file_url %>">
|
||||||
|
|
||||||
<% if Danbooru.config.enable_view_counts %>
|
<% if Danbooru.config.enable_post_search_counts %>
|
||||||
<meta name="report-server" content="<%= Danbooru.config.report_server %>">
|
<meta name="report-server" content="<%= Danbooru.config.report_server %>">
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
|||||||
@@ -356,7 +356,7 @@ module Danbooru
|
|||||||
"https://isshiki.donmai.us"
|
"https://isshiki.donmai.us"
|
||||||
end
|
end
|
||||||
|
|
||||||
def enable_view_counts
|
def enable_post_search_counts
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ Rails.application.routes.draw do
|
|||||||
resources :posts do
|
resources :posts do
|
||||||
collection do
|
collection do
|
||||||
get :popular
|
get :popular
|
||||||
get :popular_view
|
get :searches
|
||||||
get :hot
|
get :hot
|
||||||
get :intro
|
get :intro
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user