two_captcha 1.6.0 → 1.8.0
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.
- checksums.yaml +4 -4
- data/README.md +122 -173
- data/lib/two_captcha/client.rb +14 -24
- data/lib/two_captcha/version.rb +1 -1
- data/two_captcha.gemspec +2 -2
- metadata +11 -11
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c6657c4e05fd2c0a00072c9070954b73b1a5573ab9a6896301b2836098aeea66
|
|
4
|
+
data.tar.gz: ea035f063342b484e83272b2a75838fa4ce1b4b02b2c25a3a49e53b666ecb0d4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ab1e833fbf80a57058f7e78a4b6399473fd56606247c34081212cbd9205ba7f9d6ab6a091a415a9db48d7b55ffe736ec2267c48a76adfa02764d3a4373c5d6f5
|
|
7
|
+
data.tar.gz: 525b2cd2321e4e2ac9f35ec56a5f05c3ebc0d95ab7d0564e7c31d0c0a38f9a656e6fb7536224452174d3be10c33d5922d2b4d099e76ee78a678f22a1dfb5d6b1
|
data/README.md
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
Developed by [Infosimples](https://infosimples.com).
|
|
2
|
-
|
|
3
1
|
# TwoCaptcha
|
|
4
2
|
|
|
5
|
-
TwoCaptcha is a Ruby API for 2Captcha - [2Captcha.com](http://2captcha.com/?from=1025109)
|
|
3
|
+
TwoCaptcha is a Ruby API for 2Captcha - [2Captcha.com](http://2captcha.com/?from=1025109)
|
|
4
|
+
|
|
5
|
+
> We suggest you to also check the recommended CAPTCHA provider DeathByCaptcha.
|
|
6
|
+
> The gem for this provider is available at https://github.com/infosimples/deathbycaptcha.
|
|
6
7
|
|
|
7
8
|
## Installation
|
|
8
9
|
|
|
@@ -14,249 +15,197 @@ gem 'two_captcha'
|
|
|
14
15
|
|
|
15
16
|
And then execute:
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
```bash
|
|
19
|
+
$ bundle
|
|
20
|
+
````
|
|
18
21
|
|
|
19
22
|
Or install it yourself as:
|
|
20
23
|
|
|
21
|
-
|
|
24
|
+
```bash
|
|
25
|
+
$ gem install two_captcha
|
|
26
|
+
````
|
|
22
27
|
|
|
23
28
|
## Usage
|
|
24
29
|
|
|
25
|
-
1.
|
|
26
|
-
|
|
27
|
-
```ruby
|
|
28
|
-
# Create a client
|
|
29
|
-
client = TwoCaptcha.new('my_captcha_key')
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
2. **Solve a captcha**
|
|
33
|
-
|
|
34
|
-
There are two methods available: **decode** and **decode!**
|
|
35
|
-
* **decode** doesn't raise exceptions.
|
|
36
|
-
* **decode!** may raise a *TwoCaptcha::Error* if something goes wrong.
|
|
37
|
-
|
|
38
|
-
If the solution is not available, an empty captcha object will be returned.
|
|
39
|
-
|
|
40
|
-
```ruby
|
|
41
|
-
captcha = client.decode!(url: 'http://bit.ly/1xXZcKo')
|
|
42
|
-
captcha.text # Solution of the captcha
|
|
43
|
-
captcha.id # Numeric ID of the captcha solved by TwoCaptcha
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
You can also specify *path*, *file*, *raw* and *raw64* when decoding an image.
|
|
47
|
-
|
|
48
|
-
```ruby
|
|
49
|
-
client.decode(path: 'path/to/my/captcha/file')
|
|
50
|
-
|
|
51
|
-
client.decode(file: File.open('path/to/my/captcha/file', 'rb'))
|
|
52
|
-
|
|
53
|
-
client.decode(raw: File.open('path/to/my/captcha/file', 'rb').read)
|
|
54
|
-
|
|
55
|
-
client.decode(raw64: Base64.encode64(File.open('path/to/my/captcha/file', 'rb').read))
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
> Internally, the gem will always convert the image to raw64 (binary base64 encoded).
|
|
59
|
-
|
|
60
|
-
You may also specify any POST parameters specified at
|
|
61
|
-
https://2captcha.com/setting.
|
|
30
|
+
### 1. Create a client
|
|
62
31
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
captcha = client.captcha('130920620') # with 130920620 as the captcha id
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
4. **Report incorrectly (for refund) or correctly (useful for reCAPTCHA v3) solved captcha**
|
|
70
|
-
|
|
71
|
-
```ruby
|
|
72
|
-
client.report!('130920620', 'reportbad') # with 130920620 as the captcha id
|
|
73
|
-
# return true if successfully reported
|
|
74
|
-
|
|
75
|
-
client.report!('256892751', 'reportgood') # with 256892751 as the captcha id
|
|
76
|
-
# return true if successfully reported
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
> ***Warning:*** *do not abuse on this method, otherwise you may get banned*
|
|
80
|
-
|
|
81
|
-
5. **Get your balance on 2Captcha**
|
|
82
|
-
|
|
83
|
-
```ruby
|
|
84
|
-
client.balance
|
|
85
|
-
# return a Float balance in USD.
|
|
86
|
-
```
|
|
32
|
+
```ruby
|
|
33
|
+
client = TwoCaptcha.new('my_key')
|
|
34
|
+
```
|
|
87
35
|
|
|
88
|
-
|
|
36
|
+
### 2. Solve a CAPTCHA
|
|
89
37
|
|
|
90
|
-
|
|
91
|
-
client.stats('2015-08-05')
|
|
92
|
-
# return an XML string with your usage statistics.
|
|
93
|
-
```
|
|
38
|
+
There are two types of methods available: `decode` and `decode!`:
|
|
94
39
|
|
|
95
|
-
|
|
40
|
+
- `decode` does not raise exceptions.
|
|
41
|
+
- `decode!` may raise a `TwoCaptcha::Error` if something goes wrong.
|
|
96
42
|
|
|
97
|
-
|
|
98
|
-
client.load
|
|
99
|
-
# return an XML string with the current service load.
|
|
100
|
-
```
|
|
43
|
+
If the solution is not available, an empty solution object will be returned.
|
|
101
44
|
|
|
102
|
-
|
|
45
|
+
```ruby
|
|
46
|
+
captcha = client.decode_image!(url: 'http://bit.ly/1xXZcKo')
|
|
47
|
+
captcha.text # CAPTCHA solution
|
|
48
|
+
captcha.id # CAPTCHA numeric id
|
|
49
|
+
```
|
|
103
50
|
|
|
104
|
-
|
|
105
|
-
[reCAPTCHA v2](https://support.google.com/recaptcha/?hl=en#6262736).
|
|
51
|
+
#### Image CAPTCHA
|
|
106
52
|
|
|
107
|
-
|
|
53
|
+
You can specify `file`, `path`, `raw`, `raw64` and `url` when decoding an image.
|
|
108
54
|
|
|
109
|
-
|
|
110
|
-
|
|
55
|
+
```ruby
|
|
56
|
+
client.decode_image!(file: File.open('path/to/my/captcha/file', 'rb'))
|
|
57
|
+
client.decode_image!(path: 'path/to/my/captcha/file')
|
|
58
|
+
client.decode_image!(raw: File.open('path/to/my/captcha/file', 'rb').read)
|
|
59
|
+
client.decode_image!(raw64: Base64.encode64(File.open('path/to/my/captcha/file', 'rb').read))
|
|
60
|
+
client.decode_image!(url: 'http://bit.ly/1xXZcKo')
|
|
61
|
+
```
|
|
111
62
|
|
|
112
|
-
|
|
113
|
-
for more information.
|
|
63
|
+
You may also specify any POST parameters specified at https://2captcha.com/setting.
|
|
114
64
|
|
|
115
|
-
|
|
116
|
-
options = {
|
|
117
|
-
googlekey: 'xyz',
|
|
118
|
-
pageurl: 'http://example.com/example=1'
|
|
119
|
-
}
|
|
65
|
+
#### reCAPTCHA v2
|
|
120
66
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
67
|
+
```ruby
|
|
68
|
+
captcha = client.decode_recaptcha_v2!(
|
|
69
|
+
googlekey: 'xyz',
|
|
70
|
+
pageurl: 'http://example.com/example=1',
|
|
71
|
+
)
|
|
125
72
|
|
|
126
|
-
|
|
127
|
-
following:
|
|
73
|
+
# The response will be a text (token), which you can access with the `text` method.
|
|
128
74
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
75
|
+
captcha.text
|
|
76
|
+
"03AOPBWq_RPO2vLzyk0h8gH0cA2X4v3tpYCPZR6Y4yxKy1s3Eo7CHZRQntxrd..."
|
|
77
|
+
```
|
|
132
78
|
|
|
133
|
-
|
|
79
|
+
*Parameters:*
|
|
134
80
|
|
|
135
|
-
|
|
81
|
+
- `googlekey`: the Google key for the reCAPTCHA.
|
|
82
|
+
- `pageurl`: the URL of the page with the reCAPTCHA challenge.
|
|
136
83
|
|
|
137
|
-
Please read the oficial documentation at https://2captcha.com/en-api-recaptcha for
|
|
138
|
-
more information.
|
|
139
84
|
|
|
140
|
-
|
|
141
|
-
client.decode(url: 'http://bit.ly/clickcaptcha', coordinatescaptcha: 1)
|
|
142
|
-
```
|
|
85
|
+
#### reCAPTCHA v3
|
|
143
86
|
|
|
144
|
-
|
|
87
|
+
```ruby
|
|
88
|
+
captcha = client.decode_recaptcha_v3!(
|
|
89
|
+
googlekey: 'xyz',
|
|
90
|
+
pageurl: 'http://example.com/example=1',
|
|
91
|
+
action: 'verify',
|
|
92
|
+
min_score: 0.3, # OPTIONAL
|
|
93
|
+
)
|
|
145
94
|
|
|
146
|
-
|
|
95
|
+
# The response will be a text (token), which you can access with the `text` method.
|
|
147
96
|
|
|
148
|
-
|
|
97
|
+
captcha.text
|
|
98
|
+
"03AOPBWq_RPO2vLzyk0h8gH0cA2X4v3tpYCPZR6Y4yxKy1s3Eo7CHZRQntxrd..."
|
|
99
|
+
```
|
|
149
100
|
|
|
150
|
-
|
|
151
|
-
clicked. For the captcha above it should look something like:
|
|
101
|
+
*Parameters:*
|
|
152
102
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
103
|
+
- `googlekey`: the Google key for the reCAPTCHA.
|
|
104
|
+
- `pageurl`: the URL of the page with the reCAPTCHA challenge.
|
|
105
|
+
- `action`: the action name used by the CAPTCHA.
|
|
106
|
+
- `min_score`: optional parameter. The minimal score needed for the CAPTCHA resolution. Defaults to `0.3`.
|
|
157
107
|
|
|
158
|
-
|
|
108
|
+
> About the `action` parameter: in order to find out what this is, you need to inspect the JavaScript
|
|
109
|
+
> code of the website looking for a call to the `grecaptcha.execute` function.
|
|
110
|
+
>
|
|
111
|
+
> ```javascript
|
|
112
|
+
> // Example
|
|
113
|
+
> grecaptcha.execute('6Lc2fhwTAAAAAGatXTzFYfvlQMI2T7B6ji8UVV_f', { action: "examples/v3scores" })
|
|
114
|
+
> ````
|
|
159
115
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
```
|
|
116
|
+
> About the `min_score` parameter: it's strongly recommended to use a minimum score of `0.3` as higher
|
|
117
|
+
> scores are rare.
|
|
163
118
|
|
|
164
|
-
|
|
119
|
+
#### hCaptcha
|
|
165
120
|
|
|
166
121
|
```ruby
|
|
167
|
-
|
|
168
|
-
'
|
|
122
|
+
captcha = client.decode_hcaptcha!(
|
|
123
|
+
sitekey: 'xyz',
|
|
124
|
+
pageurl: 'http://example.com/example=1',
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
captcha.text
|
|
128
|
+
"P0_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNza2V5IjoiNnpWV..."
|
|
169
129
|
```
|
|
170
130
|
|
|
171
|
-
|
|
131
|
+
*Parameters:*
|
|
172
132
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
(0.3, 0.5 or 0.7) you desire.
|
|
133
|
+
- `website_key`: the site key for the hCatpcha.
|
|
134
|
+
- `website_url`: the URL of the page with the hCaptcha challenge.
|
|
176
135
|
|
|
177
|
-
|
|
136
|
+
### 3. Using proxy or other custom options
|
|
178
137
|
|
|
179
|
-
|
|
180
|
-
|
|
138
|
+
You are allowed to use custom options like `proxy`, `proxytype` or `userAgent` whenever the
|
|
139
|
+
2Captcha API supports it. Example:
|
|
181
140
|
|
|
182
141
|
```ruby
|
|
183
142
|
options = {
|
|
184
|
-
|
|
143
|
+
sitekey: 'xyz',
|
|
185
144
|
pageurl: 'http://example.com/example=1',
|
|
186
|
-
|
|
187
|
-
|
|
145
|
+
proxy: 'login:password@123.123.123.123:3128',
|
|
146
|
+
userAgent: 'user agent',
|
|
188
147
|
}
|
|
189
148
|
|
|
190
|
-
captcha = client.
|
|
191
|
-
captcha.text # Solution of the captcha
|
|
192
|
-
captcha.id # Numeric ID of the captcha solved by TwoCaptcha
|
|
149
|
+
captcha = client.decode_hcaptcha!(options)
|
|
193
150
|
```
|
|
194
151
|
|
|
195
|
-
|
|
196
|
-
following:
|
|
152
|
+
### 4. Retrieve a previously solved CAPTCHA
|
|
197
153
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
154
|
+
```ruby
|
|
155
|
+
captcha = client.captcha('130920620') # with 130920620 being the CAPTCHA id
|
|
156
|
+
```
|
|
201
157
|
|
|
202
|
-
|
|
158
|
+
### 5. Report an incorrectly solved CAPTCHA for a refund
|
|
203
159
|
|
|
204
|
-
|
|
160
|
+
```ruby
|
|
161
|
+
client.report!('130920620', 'reportbad') # with 130920620 being the CAPTCHA id
|
|
162
|
+
# returns `true` if successfully reported
|
|
205
163
|
|
|
206
|
-
|
|
164
|
+
client.report!('256892751', 'reportgood') # with 256892751 being the CAPTCHA id
|
|
165
|
+
# returns `true` if successfully reported
|
|
166
|
+
```
|
|
207
167
|
|
|
208
|
-
|
|
209
|
-
- `decode_hcaptcha!`: solves hCaptcha CAPTCHAs. It may raise an error if something goes wrong.
|
|
168
|
+
### 6. Get your account balance
|
|
210
169
|
|
|
211
|
-
|
|
170
|
+
```ruby
|
|
171
|
+
client.balance
|
|
172
|
+
# returns a Float balance in USD.
|
|
173
|
+
```
|
|
212
174
|
|
|
213
|
-
|
|
214
|
-
identify the website in which the CAPTCHA is found.
|
|
175
|
+
### 7. Get usage statistics for a specific date
|
|
215
176
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
captcha = client.decode_hcaptcha!(options)
|
|
223
|
-
captcha.text # Solution of the captcha
|
|
224
|
-
```
|
|
177
|
+
```ruby
|
|
178
|
+
client.stats(Date.new(2022, 10, 7))
|
|
179
|
+
# returns an XML string with your usage statistics.
|
|
180
|
+
```
|
|
225
181
|
|
|
226
182
|
## Notes
|
|
227
183
|
|
|
228
|
-
|
|
184
|
+
### Thread-safety
|
|
229
185
|
|
|
230
186
|
The API is thread-safe, which means it is perfectly fine to share a client
|
|
231
187
|
instance between multiple threads.
|
|
232
188
|
|
|
233
|
-
|
|
189
|
+
### Ruby dependencies
|
|
234
190
|
|
|
235
191
|
TwoCaptcha don't require specific dependencies. That saves you memory and
|
|
236
192
|
avoid conflicts with other gems.
|
|
237
193
|
|
|
238
|
-
|
|
194
|
+
### Input image format
|
|
239
195
|
|
|
240
|
-
Any format you use in the
|
|
241
|
-
always be converted to a raw64
|
|
242
|
-
you already have this format
|
|
243
|
-
|
|
196
|
+
Any format you use in the `decode_image!` method (`url`, `file`, `path`, `raw` or `raw64`)
|
|
197
|
+
will always be converted to a `raw64`, which is a base64-encoded binary string.
|
|
198
|
+
So, if you already have this format on your end, there is no need for convertions
|
|
199
|
+
before calling the API.
|
|
244
200
|
|
|
245
201
|
> Our recomendation is to never convert your image format, unless needed. Let
|
|
246
202
|
> the gem convert internally. It may save you resources (CPU, memory and IO).
|
|
247
203
|
|
|
248
|
-
|
|
204
|
+
### Versioning
|
|
249
205
|
|
|
250
206
|
TwoCaptcha gem uses [Semantic Versioning](http://semver.org/).
|
|
251
207
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
* MRI 2.2.2
|
|
255
|
-
* MRI 2.2.0
|
|
256
|
-
* MRI 2.1.4
|
|
257
|
-
* MRI 2.0.0
|
|
258
|
-
|
|
259
|
-
## Contributing
|
|
208
|
+
### Contributing
|
|
260
209
|
|
|
261
210
|
1. Fork it ( https://github.com/infosimples/two_captcha/fork )
|
|
262
211
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
@@ -272,4 +221,4 @@ https://github.com/infosimples/two_captcha/graphs/contributors
|
|
|
272
221
|
|
|
273
222
|
# License
|
|
274
223
|
|
|
275
|
-
MIT License. Copyright (C) 2011-
|
|
224
|
+
MIT License. Copyright (C) 2011-2022 Infosimples. https://infosimples.com/
|
data/lib/two_captcha/client.rb
CHANGED
|
@@ -18,9 +18,9 @@ module TwoCaptcha
|
|
|
18
18
|
# @return [TwoCaptcha::Client] A Client instance.
|
|
19
19
|
#
|
|
20
20
|
def initialize(key, options = {})
|
|
21
|
-
self.key
|
|
22
|
-
self.timeout
|
|
23
|
-
self.polling
|
|
21
|
+
self.key = key
|
|
22
|
+
self.timeout = options[:timeout] || 60
|
|
23
|
+
self.polling = options[:polling] || 5
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
# Decode the text from an image (i.e. solve a captcha).
|
|
@@ -30,11 +30,12 @@ module TwoCaptcha
|
|
|
30
30
|
# @return [TwoCaptcha::Captcha] The captcha (with solution) or an empty
|
|
31
31
|
# captcha instance if something goes wrong.
|
|
32
32
|
#
|
|
33
|
-
def
|
|
34
|
-
|
|
33
|
+
def decode_image(options = {})
|
|
34
|
+
decode_image!(options)
|
|
35
35
|
rescue TwoCaptcha::Error => ex
|
|
36
36
|
TwoCaptcha::Captcha.new
|
|
37
37
|
end
|
|
38
|
+
alias :decode :decode_image
|
|
38
39
|
|
|
39
40
|
# Decode the text from an image (i.e. solve a captcha).
|
|
40
41
|
#
|
|
@@ -60,7 +61,7 @@ module TwoCaptcha
|
|
|
60
61
|
# @return [TwoCaptcha::Captcha] The captcha (with solution) if an error is
|
|
61
62
|
# not raised.
|
|
62
63
|
#
|
|
63
|
-
def
|
|
64
|
+
def decode_image!(options = {})
|
|
64
65
|
started_at = Time.now
|
|
65
66
|
|
|
66
67
|
raw64 = load_captcha(options)
|
|
@@ -77,6 +78,7 @@ module TwoCaptcha
|
|
|
77
78
|
|
|
78
79
|
decoded_captcha
|
|
79
80
|
end
|
|
81
|
+
alias :decode! :decode_image!
|
|
80
82
|
|
|
81
83
|
#
|
|
82
84
|
# Solve reCAPTCHA v2.
|
|
@@ -105,11 +107,7 @@ module TwoCaptcha
|
|
|
105
107
|
|
|
106
108
|
fail(TwoCaptcha::GoogleKey) if options[:googlekey].empty?
|
|
107
109
|
|
|
108
|
-
upload_options = {
|
|
109
|
-
method: 'userrecaptcha',
|
|
110
|
-
googlekey: options[:googlekey],
|
|
111
|
-
pageurl: options[:pageurl]
|
|
112
|
-
}
|
|
110
|
+
upload_options = { method: 'userrecaptcha' }.merge(options)
|
|
113
111
|
decoded_captcha = upload(upload_options)
|
|
114
112
|
|
|
115
113
|
# pool untill the answer is ready
|
|
@@ -152,13 +150,9 @@ module TwoCaptcha
|
|
|
152
150
|
fail(TwoCaptcha::GoogleKey) if options[:googlekey].empty?
|
|
153
151
|
|
|
154
152
|
upload_options = {
|
|
155
|
-
method:
|
|
156
|
-
version:
|
|
157
|
-
|
|
158
|
-
pageurl: options[:pageurl],
|
|
159
|
-
action: options[:action],
|
|
160
|
-
min_score: options[:min_score]
|
|
161
|
-
}
|
|
153
|
+
method: 'userrecaptcha',
|
|
154
|
+
version: 'v3',
|
|
155
|
+
}.merge(options)
|
|
162
156
|
decoded_captcha = upload(upload_options)
|
|
163
157
|
|
|
164
158
|
# pool untill the answer is ready
|
|
@@ -196,13 +190,9 @@ module TwoCaptcha
|
|
|
196
190
|
def decode_hcaptcha!(options = {})
|
|
197
191
|
started_at = Time.now
|
|
198
192
|
|
|
199
|
-
fail(TwoCaptcha::
|
|
193
|
+
fail(TwoCaptcha::SiteKey) if options[:sitekey].empty?
|
|
200
194
|
|
|
201
|
-
upload_options = {
|
|
202
|
-
method: 'hcaptcha',
|
|
203
|
-
sitekey: options[:sitekey],
|
|
204
|
-
pageurl: options[:pageurl]
|
|
205
|
-
}
|
|
195
|
+
upload_options = { method: 'hcaptcha' }.merge(options)
|
|
206
196
|
decoded_captcha = upload(upload_options)
|
|
207
197
|
|
|
208
198
|
# pool untill the answer is ready
|
data/lib/two_captcha/version.rb
CHANGED
data/two_captcha.gemspec
CHANGED
|
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
|
22
22
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
23
23
|
spec.require_paths = ["lib"]
|
|
24
24
|
|
|
25
|
-
spec.add_development_dependency "bundler", "
|
|
26
|
-
spec.add_development_dependency "rake", "
|
|
25
|
+
spec.add_development_dependency "bundler", ">= 2.2.33"
|
|
26
|
+
spec.add_development_dependency "rake", ">= 12.3.3"
|
|
27
27
|
spec.add_development_dependency "rspec", "~> 3.1"
|
|
28
28
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: two_captcha
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rafael Barbolo
|
|
@@ -9,36 +9,36 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2022-10-07 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: bundler
|
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
|
17
17
|
requirements:
|
|
18
|
-
- - "
|
|
18
|
+
- - ">="
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
|
-
version:
|
|
20
|
+
version: 2.2.33
|
|
21
21
|
type: :development
|
|
22
22
|
prerelease: false
|
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
24
|
requirements:
|
|
25
|
-
- - "
|
|
25
|
+
- - ">="
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
|
-
version:
|
|
27
|
+
version: 2.2.33
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
29
|
name: rake
|
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
|
31
31
|
requirements:
|
|
32
|
-
- - "
|
|
32
|
+
- - ">="
|
|
33
33
|
- !ruby/object:Gem::Version
|
|
34
|
-
version:
|
|
34
|
+
version: 12.3.3
|
|
35
35
|
type: :development
|
|
36
36
|
prerelease: false
|
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
38
|
requirements:
|
|
39
|
-
- - "
|
|
39
|
+
- - ">="
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
|
-
version:
|
|
41
|
+
version: 12.3.3
|
|
42
42
|
- !ruby/object:Gem::Dependency
|
|
43
43
|
name: rspec
|
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -103,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
103
103
|
- !ruby/object:Gem::Version
|
|
104
104
|
version: '0'
|
|
105
105
|
requirements: []
|
|
106
|
-
rubygems_version: 3.
|
|
106
|
+
rubygems_version: 3.1.4
|
|
107
107
|
signing_key:
|
|
108
108
|
specification_version: 4
|
|
109
109
|
summary: Ruby API for 2Captcha (Captcha Solver as a Service)
|