rarbg 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/rarbg.rb +99 -0
  3. metadata +72 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3c84c6db4f3317404bb4abd142e84a9ff5575e57
4
+ data.tar.gz: 8452389a0daacf7c16d9ff045b9905a927923759
5
+ SHA512:
6
+ metadata.gz: f3bb207abc310e70ec1ad5c78b909adb241ce4a2097f9fca6f8dfdece641729b1c52593fd0111bb8602a6cd4eb29e86eaf7712e6f794b8c14c3b7108b0224691
7
+ data.tar.gz: d59605f3f328d6c7cc8a389aeca5dbd670095f8fd8e19cdcb6cad256fd08a1a6f0cddfce30d257b226108491b1e0705a79c2d2394b0f5ffba620e126138b3802
data/lib/rarbg.rb ADDED
@@ -0,0 +1,99 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'json'
4
+ require 'time'
5
+
6
+ module RARBG
7
+ VERSION = '0.1.1'.freeze
8
+ APP_ID = 'rarbg-rubygem'.freeze
9
+ API_ENDPOINT = 'https://torrentapi.org/pubapi_v2.php'.freeze
10
+ TOKEN_EXPIRATION = 800
11
+
12
+ class RequestError < StandardError; end
13
+ class APIError < StandardError; end
14
+
15
+ class API
16
+ attr_reader :token, :token_time
17
+ attr_accessor :default_params
18
+
19
+ def initialize(params = {})
20
+ @default_params = {
21
+ 'limit' => 25,
22
+ 'sort' => 'last',
23
+ 'format' => 'json_extended'
24
+ }.merge!(params)
25
+ end
26
+
27
+ # list torrents
28
+ def list(params = {})
29
+ call({ 'mode' => 'list' }, params)
30
+ end
31
+
32
+ # search torrents
33
+ def search_string(string, params = {})
34
+ call({ 'mode' => 'search', 'search_string' => string }, params)
35
+ end
36
+
37
+ # search by imdb
38
+ def search_imdb(imdbid, params = {})
39
+ imdbid = "tt#{imdbid}" unless imdbid =~ /^tt\d+$/
40
+ call({ 'mode' => 'search', 'search_imdb' => imdbid }, params)
41
+ end
42
+
43
+ # search by tvdb
44
+ def search_tvdb(tvdbid, params = {})
45
+ call({ 'mode' => 'search', 'search_tvdb' => tvdbid }, params)
46
+ end
47
+
48
+ # search by themoviedb
49
+ def search_themoviedb(themoviedbid, params = {})
50
+ call({ 'mode' => 'search', 'search_themoviedb' => themoviedbid }, params)
51
+ end
52
+
53
+ private
54
+
55
+ # perform API call
56
+ def call(method_params, custom_params)
57
+ raise ArgumentError, 'not an Hash' unless custom_params.is_a?(Hash)
58
+ check_token
59
+
60
+ res = request.get do |req|
61
+ req.params['token'] = @token
62
+ req.params.merge!(@default_params)
63
+ req.params.merge!(custom_params)
64
+ req.params.merge!(method_params)
65
+ end
66
+ raise RequestError, res.reason_phrase unless res.success?
67
+ raise APIError, res.body['error'] if res.body['error']
68
+
69
+ res.body['torrent_results']
70
+ end
71
+
72
+ # check if token is empty or expired
73
+ def check_token
74
+ get_token if @token.nil? || (Time.now - @token_time) >= TOKEN_EXPIRATION
75
+ end
76
+
77
+ # get api token
78
+ def get_token
79
+ res = request.get do |req|
80
+ req.params['get_token'] = 'get_token'
81
+ end
82
+ raise RequestError, res.reason_phrase unless res.success?
83
+ raise APIError, res.body['error'] if res.body['error']
84
+
85
+ @token_time = Time.now
86
+ @token = res.body['token']
87
+ end
88
+
89
+ # setup faraday request
90
+ def request
91
+ Faraday.new(url: API_ENDPOINT) do |faraday|
92
+ faraday.adapter Faraday.default_adapter
93
+ faraday.request :url_encoded
94
+ faraday.response :json
95
+ faraday.params['app_id'] = APP_ID
96
+ end
97
+ end
98
+ end
99
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rarbg
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Tommaso Barbato
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.10'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday_middleware
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.10'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.10'
41
+ description: A ruby wrapper for RARBG torrentapi.
42
+ email: epistrephein@gmail.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/rarbg.rb
48
+ homepage: https://github.com/epistrephein/rarbg
49
+ licenses:
50
+ - MIT
51
+ metadata: {}
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ requirements: []
67
+ rubyforge_project:
68
+ rubygems_version: 2.6.8
69
+ signing_key:
70
+ specification_version: 4
71
+ summary: Ruby wrapper for RARBG torrentapi
72
+ test_files: []