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'] }