Sha256: 0b5a7d8362fdbe5d71fbc2aaab2522bb8ba388a46099455425b2a8cc0de3fc54

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

require 'erb'
require 'open-uri'
require 'nokogiri'
require 'yaml'

module TpbSearch
  ##
  # Extract a list of results from your search
  # TpbSearch::Search.new("Suits s05e16")
  class Search
    NUMBER_OF_LINKS = 5
    BASE_URL = 'https://thepiratebay.org'.freeze

    attr_accessor :url

    def initialize(search)
      @url = "#{BASE_URL}/search/#{ERB::Util.url_encode(search)}/0/7/200"
    end

    def results_found?
      @results_found ||= page.at(':contains("No hits. Try adding an asterisk in you search phrase.")').nil?
    rescue OpenURI::HTTPError
      @results_found = false
    end

    def links
      @links ||= generate_links
    end

    private

    def page
      @page ||= Nokogiri::HTML(open(@url))
    end

    def generate_links
      links = []
      return links unless results_found?

      link_nodes = page.css('#searchResult tr:not(.header)')
      link_nodes.each { |link| links << crawl_link(link) }

      links.first(NUMBER_OF_LINKS)
    end

    def crawl_link(link)
      cells = link.css('td')

      Link.new(
        filename: cells[1].at('a').text,
        size: cells[1].at('.detDesc').text[/\d+\.\d+ MiB|GiB/],
        magnet: cells[1].at('a[href^=magnet]')['href'],
        seeders: cells[2].text,
        leechers: cells[3].text
      )
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tpb_search-0.1.0 lib/tpb_search/search.rb