Class: TwoCaptcha::Client
- Inherits:
-
Object
- Object
- TwoCaptcha::Client
- Defined in:
- lib/two_captcha/client.rb
Overview
TwoCaptcha::Client is a client that communicates with the TwoCaptcha API: 2captcha.com/.
Constant Summary collapse
- BASE_URL =
'http://2captcha.com/:action.php'
Instance Attribute Summary collapse
-
#key ⇒ Object
Returns the value of attribute key.
-
#polling ⇒ Object
Returns the value of attribute polling.
-
#timeout ⇒ Object
Returns the value of attribute timeout.
Instance Method Summary collapse
-
#balance ⇒ Float
Get balance from your account.
-
#captcha(captcha_id) ⇒ TwoCaptcha::Captcha
Retrieve information from an uploaded captcha.
-
#decode(options = {}) ⇒ TwoCaptcha::Captcha
Decode the text from an image (i.e. solve a captcha).
-
#decode!(options = {}) ⇒ TwoCaptcha::Captcha
Decode the text from an image (i.e. solve a captcha).
-
#initialize(key, options = {}) ⇒ TwoCaptcha::Client
constructor
Create a TwoCaptcha API client.
-
#load ⇒ String
Get current load from 2Captcha.
-
#report!(captcha_id) ⇒ Boolean
Report incorrectly solved captcha for refund.
-
#stats(date) ⇒ String
Get statistics from your account.
-
#upload(options = {}) ⇒ TwoCaptcha::Captcha
Upload a captcha to 2Captcha.
Constructor Details
#initialize(key, options = {}) ⇒ TwoCaptcha::Client
Create a TwoCaptcha API client.
20 21 22 23 24 |
# File 'lib/two_captcha/client.rb', line 20 def initialize(key, = {}) self.key = key self.timeout = [:timeout] || 60 self.polling = [:polling] || 5 end |
Instance Attribute Details
#key ⇒ Object
Returns the value of attribute key.
8 9 10 |
# File 'lib/two_captcha/client.rb', line 8 def key @key end |
#polling ⇒ Object
Returns the value of attribute polling.
8 9 10 |
# File 'lib/two_captcha/client.rb', line 8 def polling @polling end |
#timeout ⇒ Object
Returns the value of attribute timeout.
8 9 10 |
# File 'lib/two_captcha/client.rb', line 8 def timeout @timeout end |
Instance Method Details
#balance ⇒ Float
Get balance from your account.
140 141 142 |
# File 'lib/two_captcha/client.rb', line 140 def balance request('res', :get, action: 'getbalance').to_f end |
#captcha(captcha_id) ⇒ TwoCaptcha::Captcha
Retrieve information from an uploaded captcha.
112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/two_captcha/client.rb', line 112 def captcha(captcha_id) response = request('res', :get, action: 'get', id: captcha_id) decoded_captcha = TwoCaptcha::Captcha.new(id: captcha_id) decoded_captcha.api_response = response if response.match(/\AOK\|/) decoded_captcha.text = response.split('|', 2)[1] end decoded_captcha end |
#decode(options = {}) ⇒ TwoCaptcha::Captcha
Decode the text from an image (i.e. solve a captcha).
33 34 35 36 37 |
# File 'lib/two_captcha/client.rb', line 33 def decode( = {}) decode!() rescue TwoCaptcha::Error => ex TwoCaptcha::Captcha.new end |
#decode!(options = {}) ⇒ TwoCaptcha::Captcha
Decode the text from an image (i.e. solve a captcha).
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/two_captcha/client.rb', line 62 def decode!( = {}) started_at = Time.now raw64 = load_captcha() fail(TwoCaptcha::InvalidCaptcha) if raw64.to_s.empty? decoded_captcha = upload(.merge(raw64: raw64)) # pool untill the answer is ready while decoded_captcha.text.to_s.empty? sleep(polling) decoded_captcha = captcha(decoded_captcha.id) fail DeathByCaptcha::Timeout if (Time.now - started_at) > timeout end decoded_captcha end |
#load ⇒ String
Get current load from 2Captcha.
158 159 160 |
# File 'lib/two_captcha/client.rb', line 158 def load request('load', :get) end |
#report!(captcha_id) ⇒ Boolean
Report incorrectly solved captcha for refund.
131 132 133 134 |
# File 'lib/two_captcha/client.rb', line 131 def report!(captcha_id) response = request('res', :get, action: 'reportbad', id: captcha_id) response == 'OK_REPORT_RECORDED' end |
#stats(date) ⇒ String
Get statistics from your account.
150 151 152 |
# File 'lib/two_captcha/client.rb', line 150 def stats(date) request('res', :get, action: 'getstats', date: date.strftime('%Y-%m-%d')) end |
#upload(options = {}) ⇒ TwoCaptcha::Captcha
Upload a captcha to 2Captcha.
This method will not return the solution. It helps on separating concerns.
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/two_captcha/client.rb', line 86 def upload( = {}) args = {} args[:body] = [:raw64] args[:method] = 'base64' [:phrase, :regsense, :numeric, :calc, :min_len, :max_len, :language, :header_acao, :id_constructor].each do |key| args[key] = [key] if [key] end response = request('in', :multipart, args) unless response.match(/\AOK\|/) fail(TwoCaptcha::Error, 'Unexpected API Response') end TwoCaptcha::Captcha.new( id: response.split('|', 2)[1], api_response: response ) end |