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.
@@ -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.
@@ -7,11 +7,11 @@ require 'rest-client'
7
7
 
8
8
 
9
9
  module Zerobounce
10
-
10
+
11
11
  # Sends the HTTP request.
12
12
  class BaseRequest
13
13
 
14
- protected
14
+ protected
15
15
 
16
16
  def self._get(root, path, params, content_type='application/json')
17
17
 
@@ -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']) \
@@ -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
- return response.body
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']) \
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Zerobounce
4
4
  # The version of the gem.
5
- VERSION = '1.0.1'
5
+ VERSION = '1.1.1'
6
6
  end