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 |