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_to_window_link();
|
||||
this.initialize_similar();
|
||||
this.initialize_view_count();
|
||||
|
||||
if (Danbooru.meta("always-resize-images") === "true") {
|
||||
$("#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() {
|
||||
|
||||
@@ -8,10 +8,9 @@ module Explore
|
||||
respond_with(@posts)
|
||||
end
|
||||
|
||||
def popular_view
|
||||
@post_set = PostSets::PopularView.new(params[:date], params[:scale])
|
||||
@posts = @post_set.posts
|
||||
respond_with(@posts)
|
||||
def searches
|
||||
@date = params[:date] ? Date.parse(params[:date]) : Date.today
|
||||
@search_service = PopularSearchService.new(@date, params[:scale] || "day")
|
||||
end
|
||||
|
||||
def intro
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
module PostsHelper
|
||||
def post_view_count_js
|
||||
return nil unless Danbooru.config.enable_view_counts
|
||||
def post_search_count_js
|
||||
return nil unless Danbooru.config.enable_post_search_counts
|
||||
|
||||
if action_name == "index"
|
||||
return nil
|
||||
elsif action_name == "show"
|
||||
key = "show-#{params[:id]}"
|
||||
value = session.id
|
||||
digest = OpenSSL::Digest.new("sha256")
|
||||
sig = OpenSSL::HMAC.hexdigest(digest, Danbooru.config.shared_remote_key, "#{key},#{value}")
|
||||
return render("posts/partials/show/view_count", key: key, value: value, sig: sig)
|
||||
if action_name == "index" && params[:page].nil?
|
||||
tags = Tag.scan_query(params[:tags]).sort.join(" ")
|
||||
|
||||
if tags.present?
|
||||
key = "ps-#{tags}"
|
||||
value = session.id
|
||||
digest = OpenSSL::Digest.new("sha256")
|
||||
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
|
||||
|
||||
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" %>
|
||||
|
||||
<%= post_search_count_js %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -14,9 +14,6 @@
|
||||
<li>Source: <%= post_source_tag(post) %></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>
|
||||
<% 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>
|
||||
<% if CurrentUser.is_gold? %>
|
||||
<%= link_to "Show »".html_safe, "#", :id => "show-favlist-link" %>
|
||||
|
||||
@@ -139,8 +139,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%= post_view_count_js %>
|
||||
|
||||
<% content_for(:page_title) do %>
|
||||
<%= @post.presenter.humanized_essential_tag_string %> - <%= Danbooru.config.app_name %>
|
||||
<% end %>
|
||||
@@ -160,7 +158,7 @@
|
||||
<meta property="og:description" content="<%= @post.presenter.humanized_tag_string %>">
|
||||
<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 %>">
|
||||
<% end %>
|
||||
|
||||
|
||||
@@ -356,7 +356,7 @@ module Danbooru
|
||||
"https://isshiki.donmai.us"
|
||||
end
|
||||
|
||||
def enable_view_counts
|
||||
def enable_post_search_counts
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
@@ -45,7 +45,7 @@ Rails.application.routes.draw do
|
||||
resources :posts do
|
||||
collection do
|
||||
get :popular
|
||||
get :popular_view
|
||||
get :searches
|
||||
get :hot
|
||||
get :intro
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user