remove post view counts, add search counts

This commit is contained in:
r888888888
2015-07-27 17:21:17 -07:00
parent fdc62b0e07
commit f87c71cf23
14 changed files with 93 additions and 170 deletions

View File

@@ -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() {

View File

@@ -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

View File

@@ -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

View 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

View File

@@ -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

View File

@@ -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(
"&laquo;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&raquo;".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

View File

@@ -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 %>

View 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 %>

View File

@@ -50,6 +50,7 @@
<%= render "posts/partials/common/secondary_links" %>
<%= post_search_count_js %>
</div>
</div>

View File

@@ -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 &raquo;".html_safe, "#", :id => "show-favlist-link" %>

View File

@@ -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 %>

View File

@@ -356,7 +356,7 @@ module Danbooru
"https://isshiki.donmai.us"
end
def enable_view_counts
def enable_post_search_counts
false
end
end

View File

@@ -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