Sha256: 16d016aabe1fa0eb79cd5c4c14936b1fa490f5e37397f9d91f79c176a61447f5

Contents?: true

Size: 1.76 KB

Versions: 1

Compression:

Stored size: 1.76 KB

Contents

module DownloadTV
  ##
  # TorrentAPI.org grabber
  class TorrentAPI < LinkGrabber
    attr_accessor :token
    attr_reader :wait

    def initialize
      super('https://torrentapi.org/pubapi_v2.php?mode=search&search_string=%s&token=%s&app_id=DownloadTV')
      @wait = 2.1
    end

    ##
    # Specific implementation for TorrentAPI (requires token)
    def online?
      @agent.read_timeout = 2
      @agent.get(format(@url, 'test', 'test'))
      true
    rescue Mechanize::ResponseCodeError, Net::HTTP::Persistent::Error
      false
    end

    ##
    # Connects to Torrentapi.org and requests a token.
    # Returns said token.
    def renew_token
      page = @agent.get('https://torrentapi.org/pubapi_v2.php?get_token=get_token&app_id=DownloadTV').content

      obj = JSON.parse(page)

      @token = obj['token']
      # Tokens automaticly expire in 15 minutes.
      # The api has a 1req/2s limit.
      # http://torrentapi.org/apidocs_v2.txt
    end

    def get_links(s)
      @token ||= renew_token

      # Format the url
      search = format(@url, s, @token)

      page = @agent.get(search).content
      obj = JSON.parse(page)

      if obj['error_code'] == 4 # Token expired
        renew_token
        search = format(@url, s, @token)
        page = @agent.get(search).content
        obj = JSON.parse(page)
      end

      while obj['error_code'] == 5 # Violate 1req/2s limit
        # puts 'Torrentapi request limit hit. Wait a few seconds...'
        sleep(@wait)
        page = @agent.get(search).content
        obj = JSON.parse(page)

      end

      raise NoTorrentsError if obj['error']

      names = obj['torrent_results'].collect { |i| i['filename'] }
      links = obj['torrent_results'].collect { |i| i['download'] }

      names.zip(links)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
download_tv-2.3.0 lib/download_tv/grabbers/torrentapi.rb