@soyaxell09/zenbot-scraper 1.0.10 → 1.0.12

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.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @soyaxell09/zenbot-scraper
2
2
 
3
- Módulo npm de scrapers y herramientas para bots de WhatsApp. Incluye descargadores, buscadores y utilidades.
3
+ Módulo npm de scrapers y herramientas para bots de WhatsApp. Incluye descargadores, buscadores, utilidades y contenido NSFW.
4
4
 
5
5
  ## Instalación
6
6
 
@@ -16,7 +16,8 @@ npm install @soyaxell09/zenbot-scraper
16
16
  src/
17
17
  ├── scrapers/ → Descargadores de media
18
18
  ├── search/ → Buscadores
19
- └── tools/ → Utilidades
19
+ ├── tools/ → Utilidades
20
+ └── nsfw/ → Contenido adulto
20
21
  ```
21
22
 
22
23
  ---
@@ -28,11 +29,9 @@ src/
28
29
  ```js
29
30
  import { ytSearch, ytDownload, ytInfo } from '@soyaxell09/zenbot-scraper'
30
31
 
31
- // Buscar videos
32
32
  const results = await ytSearch('bad bunny', 5)
33
33
  // → [{ id, title, url, thumbnail, duration, views, channel, published }]
34
34
 
35
- // Descargar (URL o texto)
36
35
  const video = await ytDownload('https://youtu.be/dQw4w9WgXcQ', 'video', '360p')
37
36
  const audio = await ytDownload('nicki nicole wapo traketero', 'mp3')
38
37
  // → { title, author, thumbnail, type, url, duration, ... }
@@ -43,46 +42,46 @@ const audio = await ytDownload('nicki nicole wapo traketero', 'mp3')
43
42
  ```js
44
43
  import { ytDownloadV2, ytInfoV2, getFileSizeV2 } from '@soyaxell09/zenbot-scraper'
45
44
 
46
- // Ver calidades disponibles
47
45
  const info = await ytInfoV2('https://youtu.be/dQw4w9WgXcQ')
48
46
  // → { title, uploader, views, thumb, qualities: [{ id, type, quality, size, sizeB, duration }] }
49
47
 
50
- // Descargar con calidad específica
51
48
  const video = await ytDownloadV2('https://youtu.be/dQw4w9WgXcQ', 'video', '1080p')
52
49
  const audio = await ytDownloadV2('https://youtu.be/dQw4w9WgXcQ', 'mp3', '128k')
53
50
  // → { title, uploader, views, thumb, type, quality, size, sizeB, duration, url }
54
51
 
55
- // Obtener tamaño de un archivo por URL
56
52
  const size = await getFileSizeV2('https://example.com/file.mp4')
57
53
  // → '14.5 MB'
58
54
  ```
59
55
 
60
- ### YouTube v2 (via ytdown.to — más calidades)
56
+ ### TikTok
61
57
 
62
58
  ```js
63
- import { ytDownloadV2, ytInfoV2, getFileSizeV2 } from '@soyaxell09/zenbot-scraper'
59
+ import { tiktokDownload, tiktokInfo } from '@soyaxell09/zenbot-scraper'
64
60
 
65
- // Ver calidades disponibles
66
- const info = await ytInfoV2('https://youtu.be/dQw4w9WgXcQ')
67
- // → { title, uploader, views, thumb, qualities: [{ id, type, quality, size, sizeB, duration }] }
61
+ const result = await tiktokDownload('https://www.tiktok.com/@user/video/123')
62
+ // { nowatermark, watermark, audio, music: { title, author, url }, stats: { plays, likes, comments, shares } }
63
+ ```
68
64
 
69
- // Descargar con calidad específica
70
- const video = await ytDownloadV2('https://youtu.be/dQw4w9WgXcQ', 'video', '1080p')
71
- const audio = await ytDownloadV2('https://youtu.be/dQw4w9WgXcQ', 'mp3', '128k')
72
- // → { title, uploader, views, thumb, type, quality, size, sizeB, duration, url }
65
+ ### Instagram
73
66
 
74
- // Obtener tamaño de un archivo por URL
75
- const size = await getFileSizeV2('https://example.com/file.mp4')
76
- // → '14.5 MB'
67
+ ```js
68
+ import { igDownload } from '@soyaxell09/zenbot-scraper'
69
+
70
+ const result = await igDownload('https://www.instagram.com/reel/xxx/')
71
+ // → { type, items: [{ type: 'video'|'image', url }] }
72
+ // type: 'reel' | 'post' | 'story' | 'video' | 'profile'
73
+ // Soporta: Videos, Fotos, Reels, Stories y Perfil (públicos)
77
74
  ```
78
75
 
79
- ### TikTok
76
+ ### Instagram
80
77
 
81
78
  ```js
82
- import { tiktokDownload, tiktokInfo } from '@soyaxell09/zenbot-scraper'
79
+ import { igDownload } from '@soyaxell09/zenbot-scraper'
83
80
 
84
- const result = await tiktokDownload('https://www.tiktok.com/@user/video/123')
85
- // → { nowatermark, watermark, audio, music: { title, author, url }, stats: { plays, likes, comments, shares } }
81
+ const result = await igDownload('https://www.instagram.com/reel/xxx/')
82
+ // → { type, items: [{ type: 'video'|'image', url }] }
83
+ // type: 'reel' | 'post' | 'story' | 'video' | 'profile'
84
+ // Soporta: Videos, Fotos, Reels, Stories y Perfil (públicos)
86
85
  ```
87
86
 
88
87
  ### Facebook
@@ -99,29 +98,13 @@ const result = await fbDownload('https://www.facebook.com/watch?v=123')
99
98
  ```js
100
99
  import { tweetInfo, tweetDownload } from '@soyaxell09/zenbot-scraper'
101
100
 
102
- // Info completa del tweet
103
101
  const info = await tweetInfo('https://x.com/user/status/123')
104
102
  // → { id, text, lang, createdAt, likes, replies, author: { name, username, avatar }, hashtags, mentions, medias }
105
103
 
106
- // Solo media descargable
107
104
  const media = await tweetDownload('https://x.com/user/status/123')
108
105
  // → { id, text, author, videos: [{ type, url, thumbnail, variants }], photos: [{ type, url, width, height }] }
109
106
  ```
110
107
 
111
- ### Twitter / X
112
-
113
- ```js
114
- import { tweetInfo, tweetDownload } from '@soyaxell09/zenbot-scraper'
115
-
116
- // Info completa del tweet
117
- const info = await tweetInfo('https://x.com/user/status/123')
118
- // → { id, text, createdAt, likes, replies, author: { name, username, avatar }, hashtags, medias }
119
-
120
- // Solo media descargable
121
- const media = await tweetDownload('https://x.com/user/status/123')
122
- // → { id, text, author, videos: [{ type, url, thumbnail }], photos: [{ type, url }] }
123
- ```
124
-
125
108
  ### MediaFire
126
109
 
127
110
  ```js
@@ -136,21 +119,10 @@ const result = await mediafireInfo('https://www.mediafire.com/file/abc123/archiv
136
119
  ```js
137
120
  import { githubInfo, githubRelease, githubContents, githubSearch } from '@soyaxell09/zenbot-scraper'
138
121
 
139
- // Info del repositorio
140
- const info = await githubInfo('facebook/react')
141
- // → { name, fullName, description, url, stars, forks, language, license, topics, owner, cloneUrl, zipUrl, ... }
142
-
143
- // Último release
144
- const release = await githubRelease('facebook/react')
145
- // → { tag, name, body, publishedAt, url, assets: [{ name, size, downloadUrl, downloads }] }
146
-
147
- // Contenido de un directorio o archivo
122
+ const info = await githubInfo('facebook/react')
123
+ const release = await githubRelease('facebook/react')
148
124
  const contents = await githubContents('facebook/react', 'src')
149
- // [{ name, path, type, size, url, download }]
150
-
151
- // Buscar repositorios o usuarios
152
- const repos = await githubSearch('whatsapp bot', 'repositories', 5)
153
- // → [{ name, description, url, stars, forks, language, updatedAt }]
125
+ const repos = await githubSearch('whatsapp bot', 'repositories', 5)
154
126
  ```
155
127
 
156
128
  ### APK (APKPure)
@@ -158,49 +130,34 @@ const repos = await githubSearch('whatsapp bot', 'repositories', 5)
158
130
  ```js
159
131
  import { apkSearch, apkInfo } from '@soyaxell09/zenbot-scraper'
160
132
 
161
- // Buscar por nombre
162
133
  const results = await apkSearch('whatsapp', 3)
163
134
  // → [{ name, developer, pkg, date, icon, appUrl, dlUrl }]
164
135
 
165
- // Info por package name
166
136
  const info = await apkInfo('com.whatsapp')
167
137
  // → { name, developer, pkg, date, icon, download, dlLinks, url }
168
138
  ```
169
139
 
170
- ### APK (APKPure)
171
-
172
- ```js
173
- import { apkSearch, apkInfo } from '@soyaxell09/zenbot-scraper'
174
-
175
- // Buscar por nombre
176
- const results = await apkSearch('whatsapp', 3)
177
- // → [{ name, developer, pkg, date, icon, appUrl, dlUrl }]
178
-
179
- // Info por package name
180
- const info = await apkInfo('com.whatsapp')
181
- // → { name, developer, pkg, date, icon, download, dlLinks, url }
182
- ```
183
-
184
-
185
140
  ### Google Drive
186
141
 
187
142
  ```js
188
143
  import { gdriveInfo, gdriveDownload } from '@soyaxell09/zenbot-scraper'
189
144
 
190
- // Info del archivo
191
145
  const info = await gdriveInfo('https://drive.google.com/file/d/1ABC.../view')
192
146
  // → { fileId, name, download, url }
193
147
 
194
- // Descargar archivo (devuelve buffer)
195
148
  const file = await gdriveDownload('https://drive.google.com/file/d/1ABC.../view')
196
149
  // → { fileId, buffer, contentType, size, url }
197
-
198
- // También acepta ID directo
199
- const file2 = await gdriveDownload('1mkfqv5lwuNGpKatPRzPP4r01N6ZFxwBY')
200
150
  ```
201
151
 
202
- > Soporta archivos públicos. Para archivos grandes maneja automáticamente la confirmación del virus scan de Google.
152
+ ### Spotify (SpotiDown)
153
+
154
+ ```js
155
+ import { spotidownTrack } from '@soyaxell09/zenbot-scraper'
203
156
 
157
+ const result = await spotidownTrack('https://open.spotify.com/track/xxx')
158
+ // → { name, artist, album, year, duration, cover, mp3, coverHd }
159
+ // mp3 y coverHd son URLs de descarga directa
160
+ ```
204
161
 
205
162
  ---
206
163
 
@@ -220,12 +177,8 @@ const results = await googleSearch('node.js tutorial', 5)
220
177
  ```js
221
178
  import { spotify } from '@soyaxell09/zenbot-scraper'
222
179
 
223
- // Buscar tracks
224
180
  const tracks = await spotify('bad bunny', 'tracks', 5)
225
181
  // → [{ title, artist, album, duration, thumbnail, url, preview }]
226
-
227
- // Buscar álbumes
228
- const albums = await spotify('bad bunny', 'albums', 3)
229
182
  ```
230
183
 
231
184
  ### Tenor (GIFs)
@@ -242,24 +195,12 @@ const gifs = await giphy('funny cat', 5)
242
195
  ```js
243
196
  import { pinsearch, pinimg, pinvid } from '@soyaxell09/zenbot-scraper'
244
197
 
245
- // Buscar imágenes por texto
246
198
  const imgs = await pinsearch('anime wallpaper', 5)
247
- // [{ index, image, url }]
248
-
249
- // Imagen de un pin específico o por texto
250
- const pin = await pinimg('https://www.pinterest.com/pin/123/')
251
- const byText = await pinimg('anime wallpaper', 5)
252
- // → { id, title, description, image, images, url } | [{ index, image, url }]
253
-
254
- // Buscar videos por texto o URL de pin
199
+ const pin = await pinimg('https://www.pinterest.com/pin/123/')
255
200
  const vids = await pinvid('anime', 5)
256
- const pinVid = await pinvid('https://www.pinterest.com/pin/123/')
257
- // → [{ index, video, sd, original }]
258
201
  ```
259
202
 
260
- ---
261
-
262
- ### Imágenes de Anime (Wallhaven + Konachan)
203
+ ### Imágenes de Anime
263
204
 
264
205
  ```js
265
206
  import { animeImage } from '@soyaxell09/zenbot-scraper'
@@ -268,9 +209,7 @@ const results = await animeImage('naruto', 5)
268
209
  // → [{ image, url, source }]
269
210
  ```
270
211
 
271
- > Devuelve imágenes SFW de Wallhaven y Konachan mezcladas aleatoriamente.
272
-
273
- ### Wallpapers (BestHDWallpaper)
212
+ ### Wallpapers
274
213
 
275
214
  ```js
276
215
  import { wallpaperSearch } from '@soyaxell09/zenbot-scraper'
@@ -279,45 +218,18 @@ const results = await wallpaperSearch('nature', 10)
279
218
  // → [{ title, image, url }]
280
219
  ```
281
220
 
282
-
283
-
284
- ### Stickers (GetStickerPack)
221
+ ### Stickers
285
222
 
286
223
  ```js
287
224
  import { stickerSearch } from '@soyaxell09/zenbot-scraper'
288
225
 
289
- // Buscar packs por texto — devuelve un pack aleatorio con sus stickers
290
226
  const result = await stickerSearch('anime', 10)
291
- // → {
292
- // status: true,
293
- // nombre: 'My Hero Academia',
294
- // creador: '@false_eye',
295
- // total: 39,
296
- // fotos: ['https://s3.getstickerpack.com/...webp', ...],
297
- // url: 'https://getstickerpack.com/stickers/...'
298
- // }
227
+ // → { status, nombre, creador, total, fotos, url }
299
228
  ```
300
229
 
301
- ## 🛠️ Tools
302
-
303
- ### YouTube v2 (via ytdown.to — más calidades)
304
-
305
- ```js
306
- import { ytDownloadV2, ytInfoV2, getFileSizeV2 } from '@soyaxell09/zenbot-scraper'
307
-
308
- // Ver calidades disponibles
309
- const info = await ytInfoV2('https://youtu.be/dQw4w9WgXcQ')
310
- // → { title, uploader, views, thumb, qualities: [{ id, type, quality, size, sizeB, duration }] }
311
-
312
- // Descargar con calidad específica
313
- const video = await ytDownloadV2('https://youtu.be/dQw4w9WgXcQ', 'video', '1080p')
314
- const audio = await ytDownloadV2('https://youtu.be/dQw4w9WgXcQ', 'mp3', '128k')
315
- // → { title, uploader, views, thumb, type, quality, size, sizeB, duration, url }
230
+ ---
316
231
 
317
- // Obtener tamaño de un archivo por URL
318
- const size = await getFileSizeV2('https://example.com/file.mp4')
319
- // → '14.5 MB'
320
- ```
232
+ ## 🛠️ Tools
321
233
 
322
234
  ### TikTok Stalk
323
235
 
@@ -325,7 +237,7 @@ const size = await getFileSizeV2('https://example.com/file.mp4')
325
237
  import { tiktokStalk } from '@soyaxell09/zenbot-scraper'
326
238
 
327
239
  const profile = await tiktokStalk('charlidamelio')
328
- // → { id, username, nickname, bio, avatar, verified, private, bioLink, stats: { followers, following, likes, videos, followersStr, ... }, url }
240
+ // → { id, username, nickname, bio, avatar, verified, private, bioLink, stats, url }
329
241
  ```
330
242
 
331
243
  ### Letras de canciones
@@ -333,13 +245,8 @@ const profile = await tiktokStalk('charlidamelio')
333
245
  ```js
334
246
  import { lyricsSearch, lyricsGet } from '@soyaxell09/zenbot-scraper'
335
247
 
336
- // Buscar por texto libre
337
248
  const results = await lyricsSearch('bad bunny tití me preguntó', 3)
338
- // [{ id, title, artist, album, duration, lyrics, lrc }]
339
- // lrc = letra sincronizada con timestamps [00:00.00]
340
-
341
- // Buscar por artista y título
342
- const song = await lyricsGet('Bad Bunny', 'Tití Me Preguntó')
249
+ const song = await lyricsGet('Bad Bunny', 'Tití Me Preguntó')
343
250
  // → { id, title, artist, album, duration, lyrics, lrc }
344
251
  ```
345
252
 
@@ -348,18 +255,11 @@ const song = await lyricsGet('Bad Bunny', 'Tití Me Preguntó')
348
255
  ```js
349
256
  import { translate, getLangs } from '@soyaxell09/zenbot-scraper'
350
257
 
351
- // Traducir (auto-detecta idioma origen)
352
258
  const result = await translate('Hello, how are you?', 'es')
353
259
  // → { original, translated, from, to, fromName, toName, source }
354
260
 
355
- // Especificar idioma origen
356
- const result2 = await translate('Hola cómo estás', 'en', 'es')
357
-
358
- // Ver idiomas disponibles
359
261
  const langs = getLangs()
360
- // → [{ code: 'es', name: 'Español' }, { code: 'en', name: 'English' }, ...]
361
-
362
- // Códigos disponibles: es, en, pt, fr, de, it, ja, ko, zh, ru, ar, hi, tr, nl, pl, sv, uk, vi, id
262
+ // → [{ code, name }]
363
263
  ```
364
264
 
365
265
  ### Clima
@@ -368,7 +268,7 @@ const langs = getLangs()
368
268
  import { weather } from '@soyaxell09/zenbot-scraper'
369
269
 
370
270
  const w = await weather('Buenos Aires')
371
- // → { location, temp, feelsLike, humidity, wind, windDir, visibility, pressure, uvIndex, description, forecast: [{ date, maxTemp, minTemp, desc, sunrise, sunset }] }
271
+ // → { location, temp, feelsLike, humidity, wind, windDir, visibility, pressure, uvIndex, description, forecast }
372
272
  ```
373
273
 
374
274
  ### QR
@@ -376,13 +276,8 @@ const w = await weather('Buenos Aires')
376
276
  ```js
377
277
  import { qrGenerate, qrRead } from '@soyaxell09/zenbot-scraper'
378
278
 
379
- // Generar QR
380
- const qr = await qrGenerate('https://github.com/axeldev09', 300)
381
- // → { url, buffer, size, text }
382
-
383
- // Leer QR desde URL de imagen
279
+ const qr = await qrGenerate('https://github.com/axeldev09', 300)
384
280
  const result = await qrRead('https://example.com/qr.png')
385
- // → { text, type }
386
281
  ```
387
282
 
388
283
  ### Acortador de URLs
@@ -390,13 +285,8 @@ const result = await qrRead('https://example.com/qr.png')
390
285
  ```js
391
286
  import { shortenUrl, expandUrl } from '@soyaxell09/zenbot-scraper'
392
287
 
393
- // Acortar
394
- const short = await shortenUrl('https://github.com/axeldev09/zenbot-scraper')
395
- // → { short: 'https://is.gd/xxxxx', source: 'is.gd' }
396
-
397
- // Expandir
288
+ const short = await shortenUrl('https://github.com/axeldev09/zenbot-scraper')
398
289
  const expanded = await expandUrl('https://is.gd/xxxxx')
399
- // → { original, expanded }
400
290
  ```
401
291
 
402
292
  ### Noticias
@@ -404,52 +294,144 @@ const expanded = await expandUrl('https://is.gd/xxxxx')
404
294
  ```js
405
295
  import { news, newsCategories } from '@soyaxell09/zenbot-scraper'
406
296
 
407
- // Obtener noticias
408
- const n = await news('es', 5)
409
- // → { category, source, items: [{ title, description, url, image, published, source }] }
410
-
411
- // Categorías disponibles
297
+ const n = await news('es', 5)
412
298
  const cats = newsCategories()
413
299
  // → ['es', 'en', 'pt', 'tech', 'sports', 'science', 'world']
414
300
  ```
415
301
 
416
- ---
302
+ ### Screenshot
417
303
 
304
+ ```js
305
+ import { screenshot } from '@soyaxell09/zenbot-scraper'
306
+
307
+ const result = await screenshot('https://github.com', 1280, 720)
308
+ // → { url, width, height, size, buffer }
309
+ ```
418
310
 
419
311
  ### Upload (Catbox.moe)
420
312
 
421
313
  ```js
422
314
  import { upload } from '@soyaxell09/zenbot-scraper'
423
315
 
424
- // Por ruta de archivo local
425
316
  const r1 = await upload('/sdcard/foto.jpg')
426
- // { url: 'https://files.catbox.moe/xxxxx.jpg', filename: 'foto.jpg' }
317
+ const r2 = await upload('https://example.com/image.jpg')
318
+ const r3 = await upload(buffer, 'video.mp4')
319
+ // → { url, filename }
320
+ ```
427
321
 
428
- // Por URL remota
429
- const r2 = await upload('https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg')
430
- // → { url: 'https://files.catbox.moe/xxxxx.jpg', filename: 'file.jpg' }
322
+ ---
431
323
 
432
- // Por Buffer
433
- const r3 = await upload(buffer, 'video.mp4')
434
- // { url: 'https://files.catbox.moe/xxxxx.mp4', filename: 'video.mp4' }
324
+ ## 🔞 NSFW
325
+
326
+ > ⚠️ Solo para bots con verificación de edad. Usá responsablemente.
327
+
328
+ ### XNXX Search
329
+
330
+ ```js
331
+ import { xnxxSearch } from '@soyaxell09/zenbot-scraper'
332
+
333
+ const results = await xnxxSearch('query', 10)
334
+ // → [{ title, url, thumb, preview, duration, views, quality, uploader }]
435
335
  ```
436
336
 
437
- > Sube archivos a Catbox.moe y devuelve una URL pública. Soporta imágenes, videos, audio y cualquier archivo hasta 200MB.
337
+ ### XNXX Download
438
338
 
439
- ## 📦 Importación por módulo
339
+ ```js
340
+ import { xnxxDownload } from '@soyaxell09/zenbot-scraper'
341
+
342
+ const result = await xnxxDownload('https://www.xnxx.com/video-xxx/...')
343
+ // → { title, thumb, uploader, duration, views, uploadDate, download: { low, high, hls } }
344
+ ```
345
+
346
+ ### PornHub Search
440
347
 
441
348
  ```js
442
- // Todo desde el índice principal
443
- import { ytDownload, tiktokDownload, translate, weather } from '@soyaxell09/zenbot-scraper'
349
+ import { phSearch } from '@soyaxell09/zenbot-scraper'
444
350
 
445
- // Solo scrapers
446
- import { ytDownload, fbDownload } from '@soyaxell09/zenbot-scraper/scrapers'
351
+ const results = await phSearch('query', 10)
352
+ // → [{ title, url, thumb, preview, duration, vkey }]
353
+ ```
354
+
355
+ ### PornHub Download
356
+
357
+ ```js
358
+ import { phDownload, phDownloadBuffer } from '@soyaxell09/zenbot-scraper'
447
359
 
448
- // Solo search
449
- import { googleSearch, spotify } from '@soyaxell09/zenbot-scraper/search'
360
+ // Solo info + HLS streams
361
+ const result = await phDownload('https://www.pornhub.com/view_video.php?viewkey=xxx')
362
+ // → { title, thumb, duration, uploadDate, hls: { '1080p', '720p', '480p', '240p' } }
450
363
 
451
- // Solo tools
452
- import { translate, weather, news } from '@soyaxell09/zenbot-scraper/tools'
364
+ // Convertir a mp4 con ffmpeg (requiere ffmpeg instalado)
365
+ const video = await phDownloadBuffer('https://www.pornhub.com/view_video.php?viewkey=xxx', '720')
366
+ // → { title, thumb, duration, uploadDate, buffer, quality }
367
+ ```
368
+
369
+ ### XVideos Search
370
+
371
+ ```js
372
+ import { xvideosSearch } from '@soyaxell09/zenbot-scraper'
373
+
374
+ const results = await xvideosSearch('query', 10)
375
+ // → [{ title, url, thumb, preview, duration, views, quality }]
376
+ ```
377
+
378
+ ### XVideos Download
379
+
380
+ ```js
381
+ import { xvideosDownload } from '@soyaxell09/zenbot-scraper'
382
+
383
+ const result = await xvideosDownload('https://www.xvideos.com/video.xxx/...')
384
+ // → { title, thumb, duration, views, uploadDate, download: { low, high, hls } }
385
+ ```
386
+
387
+ ### XHamster Search
388
+
389
+ ```js
390
+ import { xhamsterSearch } from '@soyaxell09/zenbot-scraper'
391
+
392
+ const results = await xhamsterSearch('query', 10)
393
+ // → [{ title, url, thumb, preview, duration, views }]
394
+ ```
395
+
396
+ ### XHamster Download
397
+
398
+ ```js
399
+ import { xhamsterDownload, xhamsterDownloadBuffer } from '@soyaxell09/zenbot-scraper'
400
+
401
+ // Info + calidades HLS
402
+ const result = await xhamsterDownload('https://xhamster.com/videos/...')
403
+ // → { title, thumb, duration, views, download: { '144p', '240p', '480p', '720p', '1080p' } }
404
+
405
+ // Convertir a mp4 con ffmpeg (requiere ffmpeg instalado)
406
+ const video = await xhamsterDownloadBuffer('https://xhamster.com/videos/...', '480p')
407
+ // → { title, thumb, duration, views, buffer, quality }
408
+ ```
409
+
410
+ ### Rule34 (yande.re + paheal)
411
+
412
+ ```js
413
+ import { rule34Search, rule34Random } from '@soyaxell09/zenbot-scraper'
414
+
415
+ // Buscar por tags (usa yande.re, cae a paheal si no hay resultados)
416
+ const results = await rule34Search('cat_girl', 10)
417
+ // → [{ id, url, full, preview, tags, score, width, height }]
418
+
419
+ // Imagen random (usa paheal, con o sin tags)
420
+ const random = await rule34Random('cat_girl')
421
+ const any = await rule34Random()
422
+ // → { id, url, full, preview, tags, score, width, height }
423
+ ```
424
+
425
+ ---
426
+
427
+ ## 📦 Importación por módulo
428
+
429
+ ```js
430
+ import { ytDownload, tiktokDownload, igDownload, translate, weather } from '@soyaxell09/zenbot-scraper'
431
+ import { ytDownload, fbDownload, igDownload } from '@soyaxell09/zenbot-scraper/scrapers'
432
+ import { googleSearch, spotify } from '@soyaxell09/zenbot-scraper/search'
433
+ import { translate, weather, news, screenshot } from '@soyaxell09/zenbot-scraper/tools'
434
+ import { xnxxSearch, phSearch, rule34Random, xhamsterSearch } from '@soyaxell09/zenbot-scraper/nsfw'
453
435
  ```
454
436
 
455
437
  ---
@@ -458,6 +440,7 @@ import { translate, weather, news } from '@soyaxell09/zenbot-scraper/tools'
458
440
 
459
441
  - Node.js >= 18.0.0
460
442
  - Dependencias: `axios`, `cheerio`, `@distube/ytdl-core`, `form-data`
443
+ - Para `phDownloadBuffer` y `xhamsterDownloadBuffer`: requiere `ffmpeg` instalado en el sistema
461
444
 
462
445
  ---
463
446
 
package/package.json CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "@soyaxell09/zenbot-scraper",
3
- "version": "1.0.10",
4
- "description": "Scrapers de descarga y búsqueda para bots de WhatsApp — YouTube, TikTok, Facebook, Twitter, Pinterest, MediaFire, GitHub, APK, Google Drive y más.",
3
+ "version": "1.0.12",
4
+ "description": "Scrapers de descarga y búsqueda para bots de WhatsApp — YouTube, TikTok, Instagram, Facebook, Twitter, Pinterest, MediaFire, GitHub, APK, Google Drive, XNXX, PornHub, XVideos, XHamster, Rule34, Screenshot y más.",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
7
7
  "exports": {
8
8
  ".": "./src/index.js",
9
9
  "./scrapers": "./src/scrapers/index.js",
10
10
  "./search": "./src/search/index.js",
11
- "./tools": "./src/tools/index.js"
11
+ "./tools": "./src/tools/index.js",
12
+ "./nsfw": "./src/nsfw/index.js"
12
13
  },
13
14
  "scripts": {
14
15
  "test": "node test/index.js"
@@ -20,6 +21,7 @@
20
21
  "downloader",
21
22
  "youtube",
22
23
  "tiktok",
24
+ "instagram",
23
25
  "facebook",
24
26
  "twitter",
25
27
  "pinterest",
@@ -35,9 +37,16 @@
35
37
  "qr",
36
38
  "news",
37
39
  "upload",
40
+ "screenshot",
38
41
  "stickers",
39
42
  "gdrive",
40
- "google-drive"
43
+ "google-drive",
44
+ "xnxx",
45
+ "pornhub",
46
+ "xvideos",
47
+ "xhamster",
48
+ "rule34",
49
+ "nsfw"
41
50
  ],
42
51
  "author": "AxelDev09",
43
52
  "license": "MIT",
package/src/index.js CHANGED
@@ -8,6 +8,8 @@
8
8
  export { ytInfo, ytDownload, ytSearch } from './scrapers/youtube.js'
9
9
  export { ytInfoV2, ytDownloadV2, getFileSizeV2 } from './scrapers/youtubev2.js'
10
10
  export { tiktokInfo, tiktokDownload } from './scrapers/tiktok.js'
11
+ export { igDownload } from './scrapers/instagram.js'
12
+ export { spotidownTrack } from './scrapers/spotidown.js'
11
13
  export { fbDownload } from './scrapers/facebook.js'
12
14
  export { tweetInfo, tweetDownload } from './scrapers/twitter.js'
13
15
  export { mediafireInfo } from './scrapers/mediafire.js'
@@ -29,3 +31,13 @@ export { qrGenerate, qrRead } from './tools
29
31
  export { shortenUrl, expandUrl } from './tools/urlshortener.js'
30
32
  export { news, newsCategories } from './tools/news.js'
31
33
  export { upload } from './tools/upload.js'
34
+ export { screenshot } from './tools/screenshot.js'
35
+ export { xnxxSearch } from './nsfw/xnxxsearch.js'
36
+ export { xnxxDownload } from './nsfw/xnxxdl.js'
37
+ export { phSearch } from './nsfw/phsearch.js'
38
+ export { phDownload, phDownloadBuffer } from './nsfw/phdl.js'
39
+ export { xvideosSearch } from './nsfw/xvideossearch.js'
40
+ export { xvideosDownload } from './nsfw/xvideosdl.js'
41
+ export { rule34Search, rule34Random } from './nsfw/rule34.js'
42
+ export { xhamsterSearch } from './nsfw/xhamstersearch.js'
43
+ export { xhamsterDownload, xhamsterDownloadBuffer } from './nsfw/xhammerdl.js'
@@ -0,0 +1,17 @@
1
+ /*
2
+ * © Created by AxelDev09 🔥
3
+ * GitHub: https://github.com/AxelDev09
4
+ * Instagram: @axeldev09
5
+ * Deja los créditos we 🗣️
6
+ */
7
+
8
+ export { xnxxSearch } from './xnxxsearch.js'
9
+ export { xnxxDownload } from './xnxxdl.js'
10
+ export { phSearch } from './phsearch.js'
11
+ export { phDownload, phDownloadBuffer } from './phdl.js'
12
+ export { xvideosSearch } from './xvideossearch.js'
13
+ export { xvideosDownload } from './xvideosdl.js'
14
+ export { rule34Search, rule34Random } from './rule34.js'
15
+ export { xhamsterSearch } from './xhamstersearch.js'
16
+ export { xhamsterDownload, xhamsterDownloadBuffer } from './xhammerdl.js'
17
+ export { hentaiImgSearch, hentaiImgRandom } from './hentaiimg.js'