zerobounce-sdk 1.0.1 → 1.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.
- checksums.yaml +4 -4
- data/.gitignore +5 -0
- data/Gemfile.lock +6 -4
- data/README.md +100 -7
- data/{README_es.md → documentation.md} +74 -28
- data/documentation_es.md +449 -0
- data/lib/zerobounce/base_request.rb +2 -2
- data/lib/zerobounce/configuration.rb +2 -0
- data/lib/zerobounce/mock_request.rb +5 -5
- data/lib/zerobounce/request.rb +11 -5
- data/lib/zerobounce/version.rb +1 -1
- data/lib/zerobounce.rb +102 -39
- data/zerobounce.gemspec +1 -0
- metadata +18 -5
- data/output.err +0 -737
- data/output.log +0 -250
data/documentation_es.md
ADDED
@@ -0,0 +1,449 @@
|
|
1
|
+
#### Uso
|
2
|
+
Agrega esta línea a tu Gemfile de la aplicación:
|
3
|
+
```ruby
|
4
|
+
gem 'zerobounce-sdk'
|
5
|
+
```
|
6
|
+
|
7
|
+
Y luego ejecuta:
|
8
|
+
```bash
|
9
|
+
$ bundle
|
10
|
+
```
|
11
|
+
|
12
|
+
O instálalo directamente con:
|
13
|
+
```bash
|
14
|
+
$ gem install zerobounce-sdk
|
15
|
+
```
|
16
|
+
|
17
|
+
Importa:
|
18
|
+
```ruby
|
19
|
+
require 'zerobounce'
|
20
|
+
```
|
21
|
+
|
22
|
+
Configura una clave de API válida de ZeroBounce:
|
23
|
+
```ruby
|
24
|
+
Zerobounce.configure do |config|
|
25
|
+
config.apikey = '<clave-de-api-de-zerobounce>'
|
26
|
+
...
|
27
|
+
end
|
28
|
+
```
|
29
|
+
o
|
30
|
+
```ruby
|
31
|
+
Zerobounce.config.apikey = '<clave-de-api-de-zerobounce>'
|
32
|
+
...
|
33
|
+
```
|
34
|
+
|
35
|
+
Créditos
|
36
|
+
```ruby
|
37
|
+
Zerobounce.credits
|
38
|
+
=> 79 ### devuelve -1 si la clave es inválida
|
39
|
+
```
|
40
|
+
|
41
|
+
Actividad
|
42
|
+
```ruby
|
43
|
+
Zerobounce.activity('ss@gmail.com')
|
44
|
+
=> {"found"=>true, "active_in_days"=>"180"}
|
45
|
+
```
|
46
|
+
|
47
|
+
Estadísticas de uso
|
48
|
+
```ruby
|
49
|
+
Zerobounce.api_usage(Date.today, Date.today)
|
50
|
+
=>
|
51
|
+
{"total"=>0,
|
52
|
+
"status_valid"=>0,
|
53
|
+
"status_invalid"=>0,
|
54
|
+
"status_catch_all"=>0,
|
55
|
+
"status_do_not_mail"=>0,
|
56
|
+
"status_spamtrap"=>0,
|
57
|
+
"status_unknown"=>0,
|
58
|
+
"sub_status_toxic"=>0,
|
59
|
+
"sub_status_disposable"=>0,
|
60
|
+
"sub_status_role_based"=>0,
|
61
|
+
"sub_status_possible_trap"=>0,
|
62
|
+
"sub_status_global_suppression"=>0,
|
63
|
+
"sub_status_timeout_exceeded"=>0,
|
64
|
+
"sub_status_mail_server_temporary_error"=>0,
|
65
|
+
"sub_status_mail_server_did_not_respond"=>0,
|
66
|
+
"sub_status_greylisted"=>0,
|
67
|
+
"sub_status_antispam_system"=>0,
|
68
|
+
"sub_status_does_not_accept_mail"=>0,
|
69
|
+
"sub_status_exception_occurred"=>0,
|
70
|
+
"sub_status_failed_syntax_check"=>0,
|
71
|
+
"sub_status_mailbox_not_found"=>0,
|
72
|
+
"sub_status_unroutable_ip_address"=>0,
|
73
|
+
"sub_status_possible_typo"=>0,
|
74
|
+
"sub_status_no_dns_entries"=>0,
|
75
|
+
"sub_status_role_based_catch_all"=>0,
|
76
|
+
"sub_status_mailbox_quota_exceeded"=>0,
|
77
|
+
"sub_status_forcible_disconnect"=>0,
|
78
|
+
"sub_status_failed_smtp_connection"=>0,
|
79
|
+
"sub_status_mx_forward"=>0,
|
80
|
+
"sub_status_alternate"=>0,
|
81
|
+
"sub_status_blocked"=>0,
|
82
|
+
"sub_status_allowed"=>0,
|
83
|
+
"start_date"=>"4/28/2023",
|
84
|
+
"end_date"=>"4/28/2023"}
|
85
|
+
```
|
86
|
+
|
87
|
+
##### Validación de correo electrónico
|
88
|
+
|
89
|
+
Validar un solo correo electrónico
|
90
|
+
```ruby
|
91
|
+
Zerobounce.validate('valid@example.com')
|
92
|
+
### Zerobounce.validate('valid@example.com', '192.168.0.1') # dirección IP opcional
|
93
|
+
=>
|
94
|
+
{"address"=>"valid@example.com",
|
95
|
+
"status"=>"valid",
|
96
|
+
"sub_status"=>"",
|
97
|
+
"free_email"=>false,
|
98
|
+
"did_you_mean"=>nil,
|
99
|
+
"account"=>nil,
|
100
|
+
"domain"=>nil,
|
101
|
+
"domain_age_days"=>"9692",
|
102
|
+
"smtp_provider"=>"example",
|
103
|
+
"mx_found"=>"true",
|
104
|
+
"mx_record"=>"mx.example.com",
|
105
|
+
"firstname"=>"zero",
|
106
|
+
"lastname"=>"bounce",
|
107
|
+
"gender"=>"male",
|
108
|
+
"country"=>nil,
|
109
|
+
"region"=>nil,
|
110
|
+
"city"=>nil,
|
111
|
+
"zipcode"=>nil,
|
112
|
+
"processed_at"=>"2023-04-28 15:18:45.631"}
|
113
|
+
```
|
114
|
+
|
115
|
+
Validar
|
116
|
+
|
117
|
+
en lote
|
118
|
+
```ruby
|
119
|
+
emails
|
120
|
+
=>
|
121
|
+
["disposable@example.com",
|
122
|
+
"invalid@example.com",
|
123
|
+
"valid@example.com",
|
124
|
+
"toxic@example.com",
|
125
|
+
"donotmail@example.com",
|
126
|
+
"spamtrap@example.com"]
|
127
|
+
|
128
|
+
### ip_addresses
|
129
|
+
=> ["192.168.0.1", "192.168.0.1", "192.168.0.1", "192.168.0.1", "192.168.0.1", "192.168.0.1"]
|
130
|
+
### Zerobounce.validate_batch(emails, ip_addresses) # parámetro ip_addresses opcional
|
131
|
+
|
132
|
+
Zerobounce.validate_batch(emails)
|
133
|
+
=>
|
134
|
+
[{"address"=>"disposable@example.com",
|
135
|
+
"status"=>"do_not_mail",
|
136
|
+
"sub_status"=>"disposable",
|
137
|
+
"free_email"=>false,
|
138
|
+
"did_you_mean"=>nil,
|
139
|
+
"account"=>nil,
|
140
|
+
"domain"=>nil,
|
141
|
+
"domain_age_days"=>"9692",
|
142
|
+
"smtp_provider"=>"example",
|
143
|
+
"mx_found"=>"true",
|
144
|
+
"mx_record"=>"mx.example.com",
|
145
|
+
"firstname"=>"zero",
|
146
|
+
"lastname"=>"bounce",
|
147
|
+
"gender"=>"male",
|
148
|
+
"country"=>nil,
|
149
|
+
"region"=>nil,
|
150
|
+
"city"=>nil,
|
151
|
+
"zipcode"=>nil,
|
152
|
+
"processed_at"=>"2023-04-28 15:21:44.340"},
|
153
|
+
{"address"=>"invalid@example.com",
|
154
|
+
"status"=>"invalid",
|
155
|
+
"sub_status"=>"mailbox_not_found",
|
156
|
+
"free_email"=>false,
|
157
|
+
"did_you_mean"=>nil,
|
158
|
+
"account"=>nil,
|
159
|
+
"domain"=>nil,
|
160
|
+
"domain_age_days"=>"9692",
|
161
|
+
"smtp_provider"=>"example",
|
162
|
+
"mx_found"=>"true",
|
163
|
+
"mx_record"=>"mx.example.com",
|
164
|
+
"firstname"=>"zero",
|
165
|
+
"lastname"=>"bounce",
|
166
|
+
"gender"=>"male",
|
167
|
+
"country"=>nil,
|
168
|
+
"region"=>nil,
|
169
|
+
"city"=>nil,
|
170
|
+
"zipcode"=>nil,
|
171
|
+
"processed_at"=>"2023-04-28 15:21:44.340"},
|
172
|
+
{"address"=>"valid@example.com",
|
173
|
+
"status"=>"valid",
|
174
|
+
"sub_status"=>"",
|
175
|
+
"free_email"=>false,
|
176
|
+
"did_you_mean"=>nil,
|
177
|
+
"account"=>nil,
|
178
|
+
"domain"=>nil,
|
179
|
+
"domain_age_days"=>"9692",
|
180
|
+
"smtp_provider"=>"example",
|
181
|
+
"mx_found"=>"true",
|
182
|
+
"mx_record"=>"mx.example.com",
|
183
|
+
"firstname"=>"zero",
|
184
|
+
"lastname"=>"bounce",
|
185
|
+
"gender"=>"male",
|
186
|
+
"country"=>nil,
|
187
|
+
"region"=>nil,
|
188
|
+
"city"=>nil,
|
189
|
+
"zipcode"=>nil,
|
190
|
+
"processed_at"=>"2023-04-28 15:21:44.340"},
|
191
|
+
{"address"=>"toxic@example.com",
|
192
|
+
"status"=>"do_not_mail",
|
193
|
+
"sub_status"=>"toxic",
|
194
|
+
"free_email"=>false,
|
195
|
+
"did_you_mean"=>nil,
|
196
|
+
"account"=>nil,
|
197
|
+
"domain"=>nil,
|
198
|
+
"domain_age_days"=>"9692",
|
199
|
+
"smtp_provider"=>"example",
|
200
|
+
"mx_found"=>"true",
|
201
|
+
"mx_record"=>"mx.example.com",
|
202
|
+
"firstname"=>"zero",
|
203
|
+
"lastname"=>"bounce",
|
204
|
+
"gender"=>"male",
|
205
|
+
"country"=>nil,
|
206
|
+
"region"=>nil,
|
207
|
+
"city"=>nil,
|
208
|
+
"zipcode"=>nil,
|
209
|
+
"processed_at"=>"2023-04-28 15:21:44.340"},
|
210
|
+
{"address"=>"donotmail@example.com",
|
211
|
+
"status"=>"do_not_mail",
|
212
|
+
"sub_status"=>"role_based",
|
213
|
+
"free_email"=>false,
|
214
|
+
"did_you_mean"=>nil,
|
215
|
+
"account"=>nil,
|
216
|
+
"domain"=>nil,
|
217
|
+
"domain
|
218
|
+
|
219
|
+
_age_days"=>"9692",
|
220
|
+
"smtp_provider"=>"example",
|
221
|
+
"mx_found"=>"true",
|
222
|
+
"mx_record"=>"mx.example.com",
|
223
|
+
"firstname"=>"zero",
|
224
|
+
"lastname"=>"bounce",
|
225
|
+
"gender"=>"male",
|
226
|
+
"country"=>nil,
|
227
|
+
"region"=>nil,
|
228
|
+
"city"=>nil,
|
229
|
+
"zipcode"=>nil,
|
230
|
+
"processed_at"=>"2023-04-28 15:21:44.340"},
|
231
|
+
{"address"=>"spamtrap@example.com",
|
232
|
+
"status"=>"spamtrap",
|
233
|
+
"sub_status"=>"",
|
234
|
+
"free_email"=>false,
|
235
|
+
"did_you_mean"=>nil,
|
236
|
+
"account"=>nil,
|
237
|
+
"domain"=>nil,
|
238
|
+
"domain_age_days"=>"9692",
|
239
|
+
"smtp_provider"=>"example",
|
240
|
+
"mx_found"=>"true",
|
241
|
+
"mx_record"=>"mx.example.com",
|
242
|
+
"firstname"=>"zero",
|
243
|
+
"lastname"=>"bounce",
|
244
|
+
"gender"=>"male",
|
245
|
+
"country"=>nil,
|
246
|
+
"region"=>nil,
|
247
|
+
"city"=>nil,
|
248
|
+
"zipcode"=>nil,
|
249
|
+
"processed_at"=>"2023-04-28 15:21:44.340"}]
|
250
|
+
```
|
251
|
+
|
252
|
+
###### Validación de archivo en lote
|
253
|
+
|
254
|
+
Enviar archivo
|
255
|
+
```ruby
|
256
|
+
### puedes encontrar un archivo de muestra en la carpeta files de este repositorio
|
257
|
+
validate_file_path = File.join(Dir.pwd, 'files', 'validation.csv')
|
258
|
+
=> "/home/zb/wrappers/ruby-test/files/validation.csv"
|
259
|
+
Zerobounce.validate_file_send(validate_file_path)
|
260
|
+
=>
|
261
|
+
{"success"=>true,
|
262
|
+
"message"=>"File Accepted",
|
263
|
+
"file_name"=>"validation.csv",
|
264
|
+
"file_id"=>"75d854a6-565c-49f9-b4c8-b3344480ec4c"}
|
265
|
+
### se requerirá el file_id para los próximos pasos
|
266
|
+
### parámetros opcionales:
|
267
|
+
email_address_column: 1,
|
268
|
+
first_name_column: 2,
|
269
|
+
last_name_column: 3,
|
270
|
+
gender_column: 4,
|
271
|
+
has_header_row: true,
|
272
|
+
return_url: nil ### URL de devolución de resultados
|
273
|
+
### Zerobounce.validate_file_send(validate_file_path, email_address_column: 1, gender_column: 4)
|
274
|
+
```
|
275
|
+
|
276
|
+
Verificar archivo
|
277
|
+
```ruby
|
278
|
+
file_id = "75d854a6-565c-49f9-b4c8-b3344480ec4c"
|
279
|
+
=> "75d854a6-565c-49f9-b4c8-b3344480ec4c"
|
280
|
+
Zerobounce.validate_file_check(file_id)
|
281
|
+
=>
|
282
|
+
{"success"=>true,
|
283
|
+
"file_id"=>"75d854a6-565c-49f9-b4c8-b3344480ec4c",
|
284
|
+
"file_name"=>"validation.csv",
|
285
|
+
"upload_date"=>"2023-04-28T15:25:41Z",
|
286
|
+
"file_status"=>"Greylisted",
|
287
|
+
"complete_percentage"=>"0%",
|
288
|
+
"error_reason"=>nil,
|
289
|
+
"return_url"=>nil}
|
290
|
+
```
|
291
|
+
|
292
|
+
Obtener archivo
|
293
|
+
```ruby
|
294
|
+
file_id = "75d854a6-565c-49f9-b4c8-b3344480ec4c"
|
295
|
+
=> "75d854a6-565c-49f9-b4c8-b3344480ec4c"
|
296
|
+
Zerobounce.validate_file_get(file_id)
|
297
|
+
=> "\"email\",\"first\",\"last\",\"gender\",\"ip\",\"ZB Status\",\"ZB Sub Status\",\"ZB Account\",\"ZB Domain\",\"ZB First Name\",\"ZB Last Name\",\"ZB Gender\",\"ZB Free Email\",\"ZB MX Found\",\"ZB MX Record\",\"ZB SMTP Provider\",\"ZB Did You Mean\"\n\"disposable@example.com\",\"
|
298
|
+
|
299
|
+
First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"disposable\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"invalid@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"mailbox_not_found\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"valid@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"valid\",\"\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"toxic@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"toxic\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"donotmail@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"role_based\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"spamtrap@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"spamtrap\",\"\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"abuse@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"abuse\",\"\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"unknown@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"mail_server_temporary_error\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"catch_all@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"catch-all\",\"\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"antispam_system@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"antispam_system\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"does_not_accept_mail@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"does_not_accept_mail\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"exception_occurred@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"exception_occurred\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"failed_smtp_connection@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"failed_smtp_connection\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"failed_syntax_check@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"failed_syntax_check\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"forcible_disconnect@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"forcible_disconnect\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"global_suppression@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"global_suppression\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"greylisted@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"greylisted\",\"\",\"\",\"zero\",\"
|
300
|
+
|
301
|
+
bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"leading_period_removed@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"valid\",\"leading_period_removed\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"mail_server_did_not_respond@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"mail_server_did_not_respond\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"mail_server_temporary_error@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"mail_server_temporary_error\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"mailbox_quota_exceeded@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"mailbox_quota_exceeded\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"mailbox_not_found@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"mailbox_not_found\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"no_dns_entries@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"no_dns_entries\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"possible_trap@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"possible_trap\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"possible_typo@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"possible_typo\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"role_based@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"role_based\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"timeout_exceeded@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"unknown\",\"timeout_exceeded\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"unroutable_ip_address@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"invalid\",\"unroutable_ip_address\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"free_email@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"valid\",\"\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"True\",\"true\",\"mx.example.com\",\"example\",\"\"\n\"role_based_catch_all@example.com\",\"First\",\"Last\",\"male\",\"127.0.0.1\",\"do_not_mail\",\"role_based_catch_all\",\"\",\"\",\"zero\",\"bounce\",\"male\",\"False\",\"true\",\"mx.example.com\",\"example\",\"\"\n"
|
302
|
+
```
|
303
|
+
|
304
|
+
Eliminar archivo
|
305
|
+
```ruby
|
306
|
+
file_id = "75d854a6-565c-49f9-b4c8-b3344480ec4c"
|
307
|
+
=> "75d854a6-565c-49f9-b4c8-b3344480ec4c"
|
308
|
+
Zerobounce.validate_file_delete(file_id)
|
309
|
+
=>
|
310
|
+
{"success"=>true,
|
311
|
+
"message"=>"File Deleted",
|
312
|
+
"file_name"=>"validation.csv",
|
313
|
+
"file_id"=>"75d854a6-565c-49f9-b4c8-b3344480ec4
|
314
|
+
|
315
|
+
c"}
|
316
|
+
```
|
317
|
+
|
318
|
+
##### Puntuación de IA
|
319
|
+
|
320
|
+
Enviar archivo
|
321
|
+
```ruby
|
322
|
+
scoring_file_path = File.join(Dir.pwd, 'files', 'scoring.csv')
|
323
|
+
=> "/home/odin/zb/wrappers/ruby-test/files/scoring.csv"
|
324
|
+
Zerobounce.scoring_file_send(scoring_file_path)
|
325
|
+
=>
|
326
|
+
{"success"=>true,
|
327
|
+
"message"=>"File Accepted",
|
328
|
+
"file_name"=>"scoring.csv",
|
329
|
+
"file_id"=>"89fb7262-b845-4fa1-aa25-e486347ec64e"}
|
330
|
+
### se requerirá el file_id para los próximos pasos
|
331
|
+
### parámetros opcionales
|
332
|
+
email_address_column: 1,
|
333
|
+
has_header_row: true,
|
334
|
+
return_url: nil ### URL de devolución de resultados
|
335
|
+
### Zerobounce.scoring_file_send(scoring_file_path, email_address_column: 1)
|
336
|
+
```
|
337
|
+
|
338
|
+
Verificar archivo
|
339
|
+
```ruby
|
340
|
+
file_id = "89fb7262-b845-4fa1-aa25-e486347ec64e"
|
341
|
+
=> "89fb7262-b845-4fa1-aa25-e486347ec64e"
|
342
|
+
Zerobounce.scoring_file_check(file_id)
|
343
|
+
=>
|
344
|
+
{"success"=>true,
|
345
|
+
"file_id"=>"89fb7262-b845-4fa1-aa25-e486347ec64e",
|
346
|
+
"file_name"=>"scoring.csv",
|
347
|
+
"upload_date"=>"2023-04-28T16:57:18Z",
|
348
|
+
"file_status"=>"Complete",
|
349
|
+
"complete_percentage"=>"100% Complete.",
|
350
|
+
"return_url"=>nil}
|
351
|
+
```
|
352
|
+
|
353
|
+
Obtener archivo
|
354
|
+
```ruby
|
355
|
+
file_id = "89fb7262-b845-4fa1-aa25-e486347ec64e"
|
356
|
+
=> "89fb7262-b845-4fa1-aa25-e486347ec64e"
|
357
|
+
Zerobounce.scoring_file_get(file_id)
|
358
|
+
=> "\"email\",\"ZeroBounceQualityScore\"\r\n\"disposable@example.com\",\"0\"\r\n\"invalid@example.com\",\"10\"\r\n\"valid@example.com\",\"10\"\r\n\"toxic@example.com\",\"2\"\r\n\"donotmail@example.com\",\"0\"\r\n\"spamtrap@example.com\",\"0\"\r\n\"abuse@example.com\",\"10\"\r\n\"unknown@example.com\",\"10\"\r\n\"catch_all@example.com\",\"10\"\r\n\"antispam_system@example.com\",\"0\"\r\n\"does_not_accept_mail@example.com\",\"0\"\r\n\"exception_occurred@example.com\",\"0\"\r\n\"failed_smtp_connection@example.com\",\"0\"\r\n\"failed_syntax_check@example.com\",\"0\"\r\n\"forcible_disconnect@example.com\",\"0\"\r\n\"global_suppression@example.com\",\"0\"\r\n\"greylisted@example.com\",\"0\"\r\n\"leading_period_removed@example.com\",\"0\"\r\n\"mail_server_did_not_respond@example.com\",\"0\"\r\n\"mail_server_temporary_error@example.com\",\"0\"\r\n\"mailbox_quota_exceeded@example.com\",\"0\"\r\n\"mailbox_not_found@example.com\",\"0\"\r\n\"no_dns_entries@example.com\",\"0\"\r\n\"possible_trap@example.com\",\"0\"\r\n\"possible_typo@example.com\",\"0\"\r\n\"role_based@example.com\",\"0\"\r\n\"timeout_exceeded@example.com\",\"0\"\r\n\"unroutable_ip_address@example.com\",\"0\"\r\n\"free_email@example.com\",\"0\"\r\n\"role_based_catch_all@example.com\",\"0\""
|
359
|
+
```
|
360
|
+
|
361
|
+
Eliminar archivo
|
362
|
+
```ruby
|
363
|
+
file_id = "89fb7262-b845-4fa1-aa25-e486347ec64e"
|
364
|
+
|
365
|
+
|
366
|
+
=> "89fb7262-b845-4fa1-aa25-e486347ec64e"
|
367
|
+
Zerobounce.validate_file_delete(file_id)
|
368
|
+
=> {"success"=>false, "message"=>"File cannot be found."}
|
369
|
+
```
|
370
|
+
|
371
|
+
### Email Finder
|
372
|
+
|
373
|
+
Guess Format
|
374
|
+
```ruby
|
375
|
+
Zerobounce.guessformat("zerobounce.net")
|
376
|
+
=>
|
377
|
+
{"email"=>"",
|
378
|
+
"domain"=>"zerobounce.net",
|
379
|
+
"format"=>"first.last",
|
380
|
+
"status"=>"",
|
381
|
+
"sub_status"=>"",
|
382
|
+
"confidence"=>"high",
|
383
|
+
"did_you_mean"=>"",
|
384
|
+
"failure_reason"=>"",
|
385
|
+
"other_domain_formats"=>
|
386
|
+
[{"format"=>"first", "confidence"=>"high"},
|
387
|
+
{"format"=>"last.first", "confidence"=>"high"},
|
388
|
+
{"format"=>"lfirst", "confidence"=>"high"},
|
389
|
+
{"format"=>"lastfirst", "confidence"=>"high"},
|
390
|
+
{"format"=>"firstl", "confidence"=>"high"},
|
391
|
+
{"format"=>"last", "confidence"=>"medium"},
|
392
|
+
{"format"=>"first.middle.last", "confidence"=>"medium"},
|
393
|
+
{"format"=>"first-last", "confidence"=>"medium"},
|
394
|
+
{"format"=>"l.first", "confidence"=>"medium"},
|
395
|
+
{"format"=>"f.last", "confidence"=>"medium"},
|
396
|
+
{"format"=>"f-last", "confidence"=>"medium"},
|
397
|
+
{"format"=>"first.l", "confidence"=>"medium"},
|
398
|
+
{"format"=>"first-l", "confidence"=>"medium"},
|
399
|
+
{"format"=>"firstlast", "confidence"=>"medium"},
|
400
|
+
{"format"=>"first_l", "confidence"=>"medium"},
|
401
|
+
{"format"=>"f_last", "confidence"=>"medium"},
|
402
|
+
{"format"=>"last.f", "confidence"=>"medium"},
|
403
|
+
{"format"=>"last-f", "confidence"=>"medium"},
|
404
|
+
{"format"=>"last-first", "confidence"=>"medium"},
|
405
|
+
{"format"=>"first_last", "confidence"=>"medium"},
|
406
|
+
{"format"=>"last_f", "confidence"=>"medium"},
|
407
|
+
{"format"=>"last_first", "confidence"=>"medium"},
|
408
|
+
{"format"=>"flast", "confidence"=>"medium"},
|
409
|
+
{"format"=>"lastf", "confidence"=>"medium"},
|
410
|
+
{"format"=>"l-first", "confidence"=>"low"},
|
411
|
+
{"format"=>"l_first", "confidence"=>"low"}]}
|
412
|
+
# Zerobounce.guessformat("zerobounce.net", first_name: "John", middle_name: 'Deere', last_name: "Doe")
|
413
|
+
```
|
414
|
+
|
415
|
+
|
416
|
+
#### Desarrollo
|
417
|
+
|
418
|
+
Después de revisar el repositorio, ejecuta las pruebas:
|
419
|
+
```bash
|
420
|
+
rspec --init ### si es necesario
|
421
|
+
bundle exec rspec
|
422
|
+
```
|
423
|
+
|
424
|
+
Deberías ver una salida como esta:
|
425
|
+
```bash
|
426
|
+
Run options: include {:focus=>true}
|
427
|
+
running live tests
|
428
|
+
.....................................................
|
429
|
+
|
430
|
+
Finished in 6.81 seconds (files took 0.40587 seconds to load)
|
431
|
+
53 examples, 0 failures
|
432
|
+
```
|
433
|
+
|
434
|
+
##### Parámetros de prueba
|
435
|
+
Las pruebas utilizan los siguientes parámetros de entorno:
|
436
|
+
TEST {unit|live} influye en si se ejecutan las pruebas simuladas de unidad o se utiliza el servidor en vivo (se pueden utilizar créditos si eliges hacer esto)
|
437
|
+
ZEROBOUNCE_API_KEY {<zerobounce-api-key-value>} esta clave se utiliza para realizar solicitudes al servidor en vivo; también se utiliza en las pruebas simuladas como un ejemplo de clave válida (cualquier valor funcionará para las pruebas simuladas)
|
438
|
+
INCORRECT_API_KEY {cualquier cadena sin espacios en blanco que no sea una clave válida} se utiliza para pruebas en las que las solicitudes deben fallar debido al valor de la clave de la API.
|
439
|
+
|
440
|
+
Para configurarlos:
|
441
|
+
```bash
|
442
|
+
export ZEROBOUNCE_API_KEY=99e7ef20ceea4480a173b07b1be75371
|
443
|
+
export INCORRECT_API_KEY=thiskeyisinvalidorotherwiseincorrect
|
444
|
+
export TEST=unit
|
445
|
+
```
|
446
|
+
|
447
|
+
Se proporciona un archivo .env.sample.
|
448
|
+
|
449
|
+
Las pruebas simuladas se generaron utilizando webmock y vcr. Esto significa que se realizaron solicitudes reales y se grabaron en los archivos .yml bajo spec/cassettes con una clave API válida en ese momento utilizada con fines de prueba. Sin embargo, esta clave se ha invalidado en el ínterin, pero se proporciona en el archivo .env.sample para que las pruebas simuladas funcionen. Si no desea utilizar esta clave para simulaciones, puede reemplazarla con cualquier valor en los archivos .yml bajo spec/cassettes o eliminarlos todos y volver a ejecutar las pruebas para que vcr los grabe con una nueva clave.
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rest-client'
|
4
|
+
require 'dotenv'
|
4
5
|
|
5
6
|
module Zerobounce
|
6
7
|
# Configuration object for Zerobounce.
|
@@ -26,6 +27,7 @@ module Zerobounce
|
|
26
27
|
attr_accessor :mock
|
27
28
|
|
28
29
|
def initialize(mock=false)
|
30
|
+
if File.file?(".env") then Dotenv.load(".env") else Dotenv.load end
|
29
31
|
self.host = 'https://api.zerobounce.net'
|
30
32
|
self.apikey = ENV['ZEROBOUNCE_API_KEY']
|
31
33
|
self.valid_statuses = %i[valid catch_all]
|
@@ -3,15 +3,15 @@
|
|
3
3
|
require 'zerobounce/base_request'
|
4
4
|
|
5
5
|
module Zerobounce
|
6
|
-
|
6
|
+
|
7
7
|
# Sends the HTTP request.
|
8
8
|
class MockRequest < BaseRequest
|
9
|
-
|
9
|
+
|
10
10
|
def self.get(path, params, content_type='application/json')
|
11
11
|
response = self._get(Zerobounce::API_ROOT_URL, path, params, content_type)
|
12
12
|
if response.headers[:content_type] == 'application/json'
|
13
13
|
response_body = response.body
|
14
|
-
response_body_json = JSON.parse(response_body)
|
14
|
+
response_body_json = JSON.parse(response_body)
|
15
15
|
|
16
16
|
raise (response_body_json['error']) if response_body_json.key?('error')
|
17
17
|
raise (response_body_json['errors'][0]['error']) \
|
@@ -19,7 +19,7 @@ module Zerobounce
|
|
19
19
|
response_body_json['errors'].length > 0
|
20
20
|
|
21
21
|
return response_body_json
|
22
|
-
else
|
22
|
+
else
|
23
23
|
return response
|
24
24
|
end
|
25
25
|
end
|
@@ -46,7 +46,7 @@ module Zerobounce
|
|
46
46
|
content_type, filepath)
|
47
47
|
if response.headers[:content_type] == 'application/json'
|
48
48
|
response_body = response.body
|
49
|
-
response_body_json = JSON.parse(response_body)
|
49
|
+
response_body_json = JSON.parse(response_body)
|
50
50
|
|
51
51
|
raise (response_body_json['error']) if response_body_json.key?('error')
|
52
52
|
raise (response_body_json['errors'][0]['error']) \
|
data/lib/zerobounce/request.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'stringio'
|
3
4
|
require 'zerobounce/base_request'
|
4
5
|
|
5
6
|
module Zerobounce
|
6
|
-
|
7
|
+
|
7
8
|
# Sends the HTTP request.
|
8
9
|
class Request < BaseRequest
|
9
10
|
|
@@ -11,15 +12,18 @@ module Zerobounce
|
|
11
12
|
response = self._get(Zerobounce::API_ROOT_URL, path, params, content_type)
|
12
13
|
if response.headers[:content_type] == 'application/json'
|
13
14
|
response_body = response.body
|
14
|
-
response_body_json = JSON.parse(response_body)
|
15
|
+
response_body_json = JSON.parse(response_body)
|
15
16
|
|
16
17
|
raise (response_body_json['error']) if response_body_json.key?('error')
|
18
|
+
raise (response_body_json['Message']) \
|
19
|
+
if response_body_json.key?('Message') and \
|
20
|
+
response_body_json.length == 1
|
17
21
|
raise (response_body_json['errors'][0]['error']) \
|
18
22
|
if response_body_json.key?('errors') and \
|
19
23
|
response_body_json['errors'].length > 0
|
20
24
|
|
21
25
|
return response_body_json
|
22
|
-
else
|
26
|
+
else
|
23
27
|
return response
|
24
28
|
end
|
25
29
|
end
|
@@ -37,7 +41,9 @@ module Zerobounce
|
|
37
41
|
|
38
42
|
return response_body_json
|
39
43
|
else
|
40
|
-
|
44
|
+
content = StringIO.new(response.body)
|
45
|
+
content.set_encoding_by_bom
|
46
|
+
return content.string
|
41
47
|
end
|
42
48
|
end
|
43
49
|
|
@@ -46,7 +52,7 @@ module Zerobounce
|
|
46
52
|
content_type, filepath)
|
47
53
|
if response.headers[:content_type] == 'application/json'
|
48
54
|
response_body = response.body
|
49
|
-
response_body_json = JSON.parse(response_body)
|
55
|
+
response_body_json = JSON.parse(response_body)
|
50
56
|
|
51
57
|
raise (response_body_json['error']) if response_body_json.key?('error')
|
52
58
|
raise (response_body_json['errors'][0]['error']) \
|
data/lib/zerobounce/version.rb
CHANGED