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).
-
#decode_recaptcha_v2(options = {}) ⇒ TwoCaptcha::Captcha
Solve reCAPTCHA v2.
-
#decode_recaptcha_v2!(options = {}) ⇒ TwoCaptcha::Captcha
Solve reCAPTCHA v2.
-
#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.
191 192 193 |
# File 'lib/two_captcha/client.rb', line 191 def balance request('res', :get, action: 'getbalance').to_f end |
#captcha(captcha_id) ⇒ TwoCaptcha::Captcha
Retrieve information from an uploaded captcha.
163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/two_captcha/client.rb', line 163 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).
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/two_captcha/client.rb', line 63 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 TwoCaptcha::Timeout if (Time.now - started_at) > timeout end decoded_captcha end |
#decode_recaptcha_v2(options = {}) ⇒ TwoCaptcha::Captcha
Solve reCAPTCHA v2.
88 89 90 91 92 |
# File 'lib/two_captcha/client.rb', line 88 def decode_recaptcha_v2( = {}) decode_recaptcha_v2!() rescue TwoCaptcha::Error => ex TwoCaptcha::Captcha.new end |
#decode_recaptcha_v2!(options = {}) ⇒ TwoCaptcha::Captcha
Solve reCAPTCHA v2.
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/two_captcha/client.rb', line 103 def decode_recaptcha_v2!( = {}) started_at = Time.now fail(TwoCaptcha::GoogleKey) if [:googlekey].empty? payload_in = { method: 'userrecaptcha', googlekey: [:googlekey], pageurl: [:pageurl] } response_in = request('in', :get, payload_in) status, captcha_id = response_in.split('|') payload_res = { action: 'get', json: '1', id: captcha_id } response_res = request('res', :get, payload_res) while response_res.match(/CAPTCHA_NOT_READY|CAPCHA_NOT_READY/i) sleep(polling) response_res = request('res', :get, payload_res) fail TwoCaptcha::Timeout if (Time.now - started_at) > timeout end JSON.load(response_res)['request'] end |
#load ⇒ String
Get current load from 2Captcha.
209 210 211 |
# File 'lib/two_captcha/client.rb', line 209 def load request('load', :get) end |
#report!(captcha_id) ⇒ Boolean
Report incorrectly solved captcha for refund.
182 183 184 185 |
# File 'lib/two_captcha/client.rb', line 182 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.
201 202 203 |
# File 'lib/two_captcha/client.rb', line 201 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.
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/two_captcha/client.rb', line 140 def upload( = {}) args = {} args[:body] = [:raw64] args[:method] = 'base64' args.merge!() 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 |