class PirateBay::Search
Attributes
base_url[RW]
caching[RW]
category_id[RW]
page[RW]
results[RW]
search_string[RW]
Public Class Methods
new(search_string, category=0, url='https://thepiratebay.se')
click to toggle source
# File lib/piratebay_api/pirate_bay.rb, line 6 def initialize(search_string, category=0, url='https://thepiratebay.se') @search_string = URI.encode(search_string) @category_id = PirateBay::Categories::IDS[category.upcase.strip.gsub(/S$/, '').to_sym] unless category == 0 @page = -1 @base_url = url @results = PirateBay::ResultSet.new(self) end
Public Instance Methods
cached_filename()
click to toggle source
# File lib/piratebay_api/pirate_bay.rb, line 48 def cached_filename File.join('tmp', 'searches', "#{sanitize_filename(search_string)}_#{category_id}_#{page}.html") end
execute()
click to toggle source
# File lib/piratebay_api/pirate_bay.rb, line 29 def execute return nil if search_string.nil? self.page += 1 doc = '' if @results.size < @results.total_results doc = Nokogiri::HTML(get_search_results) end next_page(doc) end
fetch_search_results()
click to toggle source
# File lib/piratebay_api/pirate_bay.rb, line 78 def fetch_search_results url = "#{@base_url}/search/#{search_string}/#{page}/7/#{category_id}" # highest seeded first open(url, { 'User-Agent' => 'libcurl-agent/1.0' }).read end
get_quality()
click to toggle source
# File lib/piratebay_api/pirate_bay.rb, line 52 def get_quality execute results = @results.map do |result| url = "#{@base_url}/torrent/#{result.id}/" html = open(url).read p = PirateBay::Details.new html, :init, @base_url puts 'Fetching results' result = { :seeds => result.seeds, :size => result.size, :name => result.name, :video => p.video_quality_average, :audio => p.audio_quality_average, :url => url, :video_votes => p.video_scores.size, :audio_votes => p.audio_scores.size, :video_votes_sum => p.video_quality_score_sum, :audio_votes_sum => p.audio_quality_score_sum } puts "Results: #{result}" result end results.reject { |a| a[:video].nan? }.sort_by { |a| a[:video] } end
get_search_results()
click to toggle source
# File lib/piratebay_api/pirate_bay.rb, line 15 def get_search_results if caching && File.exist?(cached_filename) content = File.read(cached_filename) else content = fetch_search_results FileUtils.mkdir_p('tmp/searches') File.open(cached_filename, 'w') do |f| f.write(content) end end content end
sanitize_filename(filename)
click to toggle source
# File lib/piratebay_api/pirate_bay.rb, line 42 def sanitize_filename(filename) filename = filename.gsub(/[^0-9A-Za-z.\-]/, 'x') filename = filename.gsub(/^.*(\\|\/)/, '') filename.strip end
Private Instance Methods
next_page(doc)
click to toggle source
# File lib/piratebay_api/pirate_bay.rb, line 85 def next_page(doc) if @results.total_results.nil? matching_results = doc.css('h2').first.content.match(/Displaying hits from (.*) to (.*) \(approx (.*) found\)/i) if matching_results.nil? @results.total_results = 0 else @results.total_results = matching_results[3].to_i end end doc.css('#searchResult tr').each_with_index do |row, index| next if (index == 0) next if (row.css('td').size <= 1) result = PirateBay::Result.new(row, @base_url) @results << result end @results end