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.
-
#decode_recaptcha_v3(options = {}) ⇒ TwoCaptcha::Captcha
Solve reCAPTCHA v3.
-
#decode_recaptcha_v3!(options = {}) ⇒ TwoCaptcha::Captcha
Solve reCAPTCHA v3.
-
#initialize(key, options = {}) ⇒ TwoCaptcha::Client
constructor
Create a TwoCaptcha API client.
-
#load ⇒ String
Get current load from 2Captcha.
-
#report!(captcha_id, action = 'reportbad') ⇒ 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.
232 233 234 |
# File 'lib/two_captcha/client.rb', line 232 def balance request('res', :get, action: 'getbalance').to_f end |
#captcha(captcha_id) ⇒ TwoCaptcha::Captcha
Retrieve information from an uploaded captcha.
203 204 205 206 207 208 209 210 211 212 213 214 |
# File 'lib/two_captcha/client.rb', line 203 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 |
# File 'lib/two_captcha/client.rb', line 103 def decode_recaptcha_v2!( = {}) started_at = Time.now fail(TwoCaptcha::GoogleKey) if [:googlekey].empty? = { method: 'userrecaptcha', googlekey: [:googlekey], pageurl: [:pageurl] } decoded_captcha = upload() # pool untill the answer is ready while decoded_captcha.text.to_s.empty? sleep([polling, 10].max) # sleep at least 10 seconds decoded_captcha = captcha(decoded_captcha.id) fail TwoCaptcha::Timeout if (Time.now - started_at) > timeout end decoded_captcha end |
#decode_recaptcha_v3(options = {}) ⇒ TwoCaptcha::Captcha
Solve reCAPTCHA v3.
132 133 134 135 136 |
# File 'lib/two_captcha/client.rb', line 132 def decode_recaptcha_v3( = {}) decode_recaptcha_v3!() rescue TwoCaptcha::Error => ex TwoCaptcha::Captcha.new end |
#decode_recaptcha_v3!(options = {}) ⇒ TwoCaptcha::Captcha
Solve reCAPTCHA v3.
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/two_captcha/client.rb', line 149 def decode_recaptcha_v3!( = {}) started_at = Time.now fail(TwoCaptcha::GoogleKey) if [:googlekey].empty? = { method: 'userrecaptcha', version: 'v3', googlekey: [:googlekey], pageurl: [:pageurl], action: [:action], min_score: [:min_score] } decoded_captcha = upload() # pool untill the answer is ready while decoded_captcha.text.to_s.empty? sleep([polling, 10].max) # sleep at least 10 seconds decoded_captcha = captcha(decoded_captcha.id) fail TwoCaptcha::Timeout if (Time.now - started_at) > timeout end decoded_captcha end |
#load ⇒ String
Get current load from 2Captcha.
250 251 252 |
# File 'lib/two_captcha/client.rb', line 250 def load request('load', :get) end |
#report!(captcha_id, action = 'reportbad') ⇒ Boolean
Report incorrectly solved captcha for refund.
223 224 225 226 |
# File 'lib/two_captcha/client.rb', line 223 def report!(captcha_id, action = 'reportbad') response = request('res', :get, action: action, id: captcha_id) response == 'OK_REPORT_RECORDED' end |
#stats(date) ⇒ String
Get statistics from your account.
242 243 244 |
# File 'lib/two_captcha/client.rb', line 242 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.
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/two_captcha/client.rb', line 180 def upload( = {}) args = {} args[:body] = [:raw64] if [:raw64] args[:method] = [: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 |