lib/download_tv/grabbers/torrentapi.rb in download_tv-2.4.7 vs lib/download_tv/grabbers/torrentapi.rb in download_tv-2.5.0

- old
+ new

@@ -1,15 +1,19 @@ +# frozen_string_literal: true + module DownloadTV ## # TorrentAPI.org grabber # Interfaces with http://torrentapi.org/apidocs_v2.txt 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&sort=seeders') + super('https://torrentapi.org/pubapi_v2.php?'\ + 'mode=search&search_string=%s&token=%s&'\ + 'app_id=DownloadTV&sort=seeders') @wait = 0.1 end ## # Specific implementation for TorrentAPI (requires token) @@ -25,39 +29,43 @@ false end end ## + # Makes a get request tp the given url. + # Returns the JSON response parsed into a hash + def request_and_parse(url) + page = @agent.get(url).content + JSON.parse(page) + end + + ## # Connects to Torrentapi.org and requests a token, returning it # Tokens automatically expire every 15 minutes def renew_token - page = @agent.get('https://torrentapi.org/pubapi_v2.php?get_token=get_token&app_id=DownloadTV').content + obj = request_and_parse('https://torrentapi.org/pubapi_v2'\ + '.php?get_token=get_token&app_id='\ + 'DownloadTV') - obj = JSON.parse(page) - @token = obj['token'] end - def get_links(s) + def get_links(show) @token ||= renew_token - # Format the url - search = format(@url, s, @token) + search = format(@url, show, @token) - page = @agent.get(search).content - obj = JSON.parse(page) + obj = request_and_parse(search) if obj['error_code'] == 4 # Token expired renew_token - search = format(@url, s, @token) - page = @agent.get(search).content - obj = JSON.parse(page) + search = format(@url, show, @token) + obj = request_and_parse(search) end while obj['error_code'] == 5 # Violate 1req/2s limit sleep(@wait) - page = @agent.get(search).content - obj = JSON.parse(page) + obj = request_and_parse(search) end raise NoTorrentsError if obj['error'] names = obj['torrent_results'].collect { |i| i['filename'] }