track searches that return no results
This commit is contained in:
@@ -99,6 +99,21 @@
|
|||||||
return string.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
|
return string.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Danbooru.get_url_parameter = function(sParam) {
|
||||||
|
var sPageURL = decodeURIComponent(window.location.search.substring(1)),
|
||||||
|
sURLVariables = sPageURL.split('&'),
|
||||||
|
sParameterName,
|
||||||
|
i;
|
||||||
|
|
||||||
|
for (i = 0; i < sURLVariables.length; i++) {
|
||||||
|
sParameterName = sURLVariables[i].split('=');
|
||||||
|
|
||||||
|
if (sParameterName[0] === sParam) {
|
||||||
|
return sParameterName[1] === undefined ? true : sParameterName[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
String.prototype.hash = function() {
|
String.prototype.hash = function() {
|
||||||
var hash = 5381, i = this.length;
|
var hash = 5381, i = this.length;
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ module Explore
|
|||||||
@search_service = PopularSearchService.new(@date, params[:scale] || "day")
|
@search_service = PopularSearchService.new(@date, params[:scale] || "day")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def missed_searches
|
||||||
|
@search_service = MissedSearchService.new
|
||||||
|
end
|
||||||
|
|
||||||
def intro
|
def intro
|
||||||
@presenter = IntroPresenter.new
|
@presenter = IntroPresenter.new
|
||||||
render :layout => "blank"
|
render :layout => "blank"
|
||||||
|
|||||||
@@ -1,4 +1,13 @@
|
|||||||
module PostsHelper
|
module PostsHelper
|
||||||
|
def missed_post_search_count_js
|
||||||
|
return nil unless Danbooru.config.enable_post_search_counts
|
||||||
|
|
||||||
|
session_id = session.id
|
||||||
|
digest = OpenSSL::Digest.new("sha256")
|
||||||
|
sig = OpenSSL::HMAC.hexdigest(digest, Danbooru.config.shared_remote_key, ",#{session_id}")
|
||||||
|
return render("posts/partials/index/missed_search_count", session_id: session_id, sig: sig)
|
||||||
|
end
|
||||||
|
|
||||||
def post_search_count_js
|
def post_search_count_js
|
||||||
return nil unless Danbooru.config.enable_post_search_counts
|
return nil unless Danbooru.config.enable_post_search_counts
|
||||||
|
|
||||||
|
|||||||
22
app/logical/missed_search_service.rb
Normal file
22
app/logical/missed_search_service.rb
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# queries reportbooru to find missed post searches
|
||||||
|
class MissedSearchService
|
||||||
|
def each_search(&block)
|
||||||
|
fetch_data.scan(/(.+?) (\d+)\.0\n/).each(&block)
|
||||||
|
end
|
||||||
|
|
||||||
|
def fetch_data
|
||||||
|
# Cache.get("ms", 1.minute) do
|
||||||
|
url = URI.parse("#{Danbooru.config.report_server}/missed_searches")
|
||||||
|
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
|
||||||
28
app/views/explore/posts/missed_searches.html.erb
Normal file
28
app/views/explore/posts/missed_searches.html.erb
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<div id="c-explore-posts">
|
||||||
|
<div id="a-index">
|
||||||
|
<h1>Missed Searches (past seven days)</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 class="category-<%= Tag.category_for(tags) %>">
|
||||||
|
<td><%= link_to tags, posts_path(:tags => tags) %></td>
|
||||||
|
<td style="text-align: right;"><%= count.to_i %></td>
|
||||||
|
</tr>
|
||||||
|
<% end %>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= render "posts/partials/common/secondary_links" %>
|
||||||
|
|
||||||
|
<% content_for(:page_title) do %>
|
||||||
|
Missed Searches - <%= Danbooru.config.app_name %>
|
||||||
|
<% end %>
|
||||||
@@ -59,4 +59,5 @@
|
|||||||
<% if @post_set.has_wiki? %>
|
<% if @post_set.has_wiki? %>
|
||||||
<meta name="description" content="<%= @post_set.wiki_page.presenter.blurb %>"></meta>
|
<meta name="description" content="<%= @post_set.wiki_page.presenter.blurb %>"></meta>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<%= missed_post_search_count_js %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
<% if params[:random] %>
|
<% if params[:random] %>
|
||||||
<%= hidden_field_tag :random, params[:random] %>
|
<%= hidden_field_tag :random, params[:random] %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<%= hidden_field_tag "ms", "1" %>
|
||||||
<%= submit_tag "Go", :name => nil %>
|
<%= submit_tag "Go", :name => nil %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</section>
|
</section>
|
||||||
|
|||||||
12
app/views/posts/partials/index/_missed_search_count.html.erb
Normal file
12
app/views/posts/partials/index/_missed_search_count.html.erb
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<script type="text/javascript">
|
||||||
|
$(function() {
|
||||||
|
var tags = $("#tags").val();
|
||||||
|
if (Danbooru.get_url_parameter("ms") === "1" && tags && tags.length > 0 && $(".post-preview").size() < 10) {
|
||||||
|
$.post("<%= Danbooru.config.report_server %>/missed_searches", {
|
||||||
|
session_id: "<%= session_id %>",
|
||||||
|
tags: $("#tags").val(),
|
||||||
|
sig: "<%= sig %>"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -46,6 +46,7 @@ Rails.application.routes.draw do
|
|||||||
collection do
|
collection do
|
||||||
get :popular
|
get :popular
|
||||||
get :searches
|
get :searches
|
||||||
|
get :missed_searches
|
||||||
get :hot
|
get :hot
|
||||||
get :intro
|
get :intro
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user