track searches that return no results
This commit is contained in:
@@ -99,6 +99,21 @@
|
||||
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() {
|
||||
var hash = 5381, i = this.length;
|
||||
|
||||
|
||||
@@ -13,6 +13,10 @@ module Explore
|
||||
@search_service = PopularSearchService.new(@date, params[:scale] || "day")
|
||||
end
|
||||
|
||||
def missed_searches
|
||||
@search_service = MissedSearchService.new
|
||||
end
|
||||
|
||||
def intro
|
||||
@presenter = IntroPresenter.new
|
||||
render :layout => "blank"
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
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
|
||||
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? %>
|
||||
<meta name="description" content="<%= @post_set.wiki_page.presenter.blurb %>"></meta>
|
||||
<% end %>
|
||||
<%= missed_post_search_count_js %>
|
||||
<% end %>
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
<% if params[:random] %>
|
||||
<%= hidden_field_tag :random, params[:random] %>
|
||||
<% end %>
|
||||
<%= hidden_field_tag "ms", "1" %>
|
||||
<%= submit_tag "Go", :name => nil %>
|
||||
<% end %>
|
||||
</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
|
||||
get :popular
|
||||
get :searches
|
||||
get :missed_searches
|
||||
get :hot
|
||||
get :intro
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user