{"_id":"@duyquangnvx/story-spider","_rev":"12-51d3289627ddd5edfed0ff3262827801","name":"@duyquangnvx/story-spider","dist-tags":{"latest":"2.0.2"},"versions":{"1.0.0":{"name":"@duyquangnvx/story-spider","version":"1.0.0","keywords":["scraper","story","vietnamese","truyenyy","truyenfull","crawler"],"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","_id":"@duyquangnvx/story-spider@1.0.0","maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"homepage":"https://github.com/duyquangnvx/story-spider#readme","bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"dist":{"shasum":"3b0c8c440a857b775508c8865747f7061d25ce42","tarball":"https://registry.npmjs.org/@duyquangnvx/story-spider/-/story-spider-1.0.0.tgz","fileCount":78,"integrity":"sha512-ee82oZ1V5jRVDd0wbiCyFMeKo76hodKHMilRXROFP0IQd0t49oXmyGLx5Insmqmma5v7GB+PDVI62MdJ5ojQog==","signatures":[{"sig":"MEUCIGPjkmCRgGYYRpIBu0IPKydlIsrHKsfTtc+JeGJy3UI4AiEAp5DJRAMDYwo997eCW/bWzAJRpup0/2jf3d2UGZr5l04=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77669},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"6935a510a94517da8fa13903c65c0587ccda0b35","scripts":{"lint":"eslint src/**/*.ts","test":"jest --config jest.config.js","build":"tsc","clean":"rimraf dist","example":"ts-node src/example.ts","prepare":"npm run build","release":"npm publish --access=public","prebuild":"npm run clean"},"_npmUser":{"name":"duyquangnvx","actor":{"name":"duyquangnvx","type":"user","email":"duyquangnvx@gmail.com"},"email":"duyquangnvx@gmail.com"},"repository":{"url":"git+https://github.com/duyquangnvx/story-spider.git","type":"git"},"_npmVersion":"10.9.2","description":"A TypeScript library for scraping stories from various Vietnamese websites","directories":{},"_nodeVersion":"22.16.0","dependencies":{"axios":"^1.9.0","cheerio":"^1.0.0","winston":"^3.17.0","bottleneck":"^2.19.5","node-cache":"^5.1.2","html-to-text":"^9.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^5.0.5","ts-jest":"^29.3.2","ts-node":"^10.9.2","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.17","@types/html-to-text":"^9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/story-spider_1.0.0_1751102060527_0.8853073071123649","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@duyquangnvx/story-spider","version":"1.0.1","keywords":["scraper","story","vietnamese","truyenyy","truyenfull","crawler"],"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","_id":"@duyquangnvx/story-spider@1.0.1","maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"homepage":"https://github.com/duyquangnvx/story-spider#readme","bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"dist":{"shasum":"22f29aeb1dbb2a0127e07a1dd75dd2583d6de99a","tarball":"https://registry.npmjs.org/@duyquangnvx/story-spider/-/story-spider-1.0.1.tgz","fileCount":78,"integrity":"sha512-kiDxhwqK4YAtfjXHuyK5qen5OgNGY3YEmGKmbxJZ82J2EGLglO1K2/cPY25US9U5naNrJkBeYG8v3Ei70jL/5w==","signatures":[{"sig":"MEQCIAzZQMSgxkkmW+2AWsOIwqfqb7zWqp/BKKhl+TKavayGAiBg6/RMkpP1BU2K3T2WrGSAZkn74/qf09mRuMAPLVQU1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77669},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"0ea10eaec1dd8533dc88bcfb41fde39de4bfcf72","scripts":{"lint":"eslint src/**/*.ts","test":"jest --config jest.config.js","build":"tsc","clean":"rimraf dist","example":"ts-node src/example.ts","prepare":"npm run build","release":"npm publish --access=public","prebuild":"npm run clean"},"_npmUser":{"name":"duyquangnvx","actor":{"name":"duyquangnvx","type":"user","email":"duyquangnvx@gmail.com"},"email":"duyquangnvx@gmail.com"},"repository":{"url":"git+https://github.com/duyquangnvx/story-spider.git","type":"git"},"_npmVersion":"10.9.2","description":"A TypeScript library for scraping stories from various Vietnamese websites","directories":{},"_nodeVersion":"22.16.0","dependencies":{"axios":"^1.9.0","cheerio":"^1.0.0","winston":"^3.17.0","bottleneck":"^2.19.5","node-cache":"^5.1.2","html-to-text":"^9.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^5.0.5","ts-jest":"^29.3.2","ts-node":"^10.9.2","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.17","@types/html-to-text":"^9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/story-spider_1.0.1_1751102253547_0.3339966753977075","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@duyquangnvx/story-spider","version":"1.0.3","keywords":["scraper","story","vietnamese","truyenyy","truyenfull","crawler"],"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","_id":"@duyquangnvx/story-spider@1.0.3","maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"homepage":"https://github.com/duyquangnvx/story-spider#readme","bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"dist":{"shasum":"eed40768e54dd3d3a85ed2740ec373fe040c64d2","tarball":"https://registry.npmjs.org/@duyquangnvx/story-spider/-/story-spider-1.0.3.tgz","fileCount":78,"integrity":"sha512-b6/JR24YvVS8C4MgI+J/koxD8oYwcJ6Xa8YiQVv2/S+6Af85MJRJ3DFX2KO1vv4NRxQh2KrUSVgiznaTqnsQdQ==","signatures":[{"sig":"MEYCIQCcn9gz6JvxHStv6ENoA3qpyzwpUxa8BiREpClQka7QpAIhAOGK5XmGls9d6QNJhVPLQicxahd7kWXiPLQNKpmhUVIk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77669},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"0ea10eaec1dd8533dc88bcfb41fde39de4bfcf72","scripts":{"lint":"eslint src/**/*.ts","test":"jest --config jest.config.js","build":"tsc","clean":"rimraf dist","example":"ts-node src/example.ts","prepare":"npm run build","release":"npm publish --access=public","prebuild":"npm run clean"},"_npmUser":{"name":"duyquangnvx","actor":{"name":"duyquangnvx","type":"user","email":"duyquangnvx@gmail.com"},"email":"duyquangnvx@gmail.com"},"repository":{"url":"git+https://github.com/duyquangnvx/story-spider.git","type":"git"},"_npmVersion":"10.9.2","description":"A TypeScript library for scraping stories from various Vietnamese websites","directories":{},"_nodeVersion":"22.16.0","dependencies":{"axios":"^1.9.0","cheerio":"^1.0.0","winston":"^3.17.0","bottleneck":"^2.19.5","node-cache":"^5.1.2","html-to-text":"^9.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^5.0.5","ts-jest":"^29.3.2","ts-node":"^10.9.2","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.17","@types/html-to-text":"^9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/story-spider_1.0.3_1751102269672_0.21756362526473372","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@duyquangnvx/story-spider","version":"1.0.4","keywords":["scraper","story","vietnamese","truyenyy","truyenfull","rungtruyen","crawler"],"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","_id":"@duyquangnvx/story-spider@1.0.4","maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"homepage":"https://github.com/duyquangnvx/story-spider#readme","bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"dist":{"shasum":"c0f2cc5c06b4b189dc8029bf236a902d7458a5c1","tarball":"https://registry.npmjs.org/@duyquangnvx/story-spider/-/story-spider-1.0.4.tgz","fileCount":82,"integrity":"sha512-Qbi9jrPiqqYiumADDn1EVJb2r08zYfNoChLjoB7tkhfbHKXn+jf11+eF6j9sqQEjGIGZ/hEN5qX73j+cwzQxuw==","signatures":[{"sig":"MEUCIQCGqpXVYfmUTJ6gPO2ZglX+Uwtv0rB/SPk1IKC54+34zQIgb/nysNNpMj9DHUrJON9ytBJc6mlX74Ful/2m2TNQxKw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106494},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"0036b2aad4b2745c54a953b10ddb93067c11e434","scripts":{"lint":"eslint src/**/*.ts","test":"jest --config jest.config.js","build":"tsc","clean":"rimraf dist","prepare":"npm run build","release":"npm publish --access=public","prebuild":"npm run clean","test:rungtruyen":"ts-node src/tests/rungtruyen.test.ts","test:truyenfull":"ts-node src/tests/truyenfull.test.ts"},"_npmUser":{"name":"duyquangnvx","actor":{"name":"duyquangnvx","type":"user","email":"duyquangnvx@gmail.com"},"email":"duyquangnvx@gmail.com"},"repository":{"url":"git+https://github.com/duyquangnvx/story-spider.git","type":"git"},"_npmVersion":"10.9.2","description":"A TypeScript library for scraping stories from various Vietnamese websites","directories":{},"_nodeVersion":"22.16.0","dependencies":{"axios":"^1.9.0","cheerio":"^1.0.0","winston":"^3.17.0","bottleneck":"^2.19.5","node-cache":"^5.1.2","html-to-text":"^9.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^5.0.5","ts-jest":"^29.3.2","ts-node":"^10.9.2","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.17","@types/html-to-text":"^9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/story-spider_1.0.4_1751523821897_0.5364447420235643","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@duyquangnvx/story-spider","version":"1.0.5","keywords":["scraper","story","vietnamese","truyenyy","truyenfull","rungtruyen","crawler"],"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","_id":"@duyquangnvx/story-spider@1.0.5","maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"homepage":"https://github.com/duyquangnvx/story-spider#readme","bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"dist":{"shasum":"2fe3f9eee17d652634bd94a7144fc13e42a81da0","tarball":"https://registry.npmjs.org/@duyquangnvx/story-spider/-/story-spider-1.0.5.tgz","fileCount":82,"integrity":"sha512-4Y6IOJy5tD+2yNyruCiAqLAojAmXzXsGxvHXX0PZjw/b4weBDpMZzO2C8wMJktchrQ7cgP3j8NyZbgZ6EUbwEg==","signatures":[{"sig":"MEUCIQDuut3t/qk/Vsi1QRpqbx1bbLtVKcigPzuRtHHPvs+7fwIgSKTY8vIW4HOCxk9X91KWZgqKIAoqnEzPiZ5utupPfv0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110636},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"a80f1dcd41f021ef3f6863609680bcf2165ef169","scripts":{"lint":"eslint src/**/*.ts","test":"jest --config jest.config.js","build":"tsc","clean":"rimraf dist","prepare":"npm run build","release":"npm publish --access=public","prebuild":"npm run clean","test:rungtruyen":"ts-node src/tests/rungtruyen.test.ts","test:truyenfull":"ts-node src/tests/truyenfull.test.ts"},"_npmUser":{"name":"duyquangnvx","actor":{"name":"duyquangnvx","type":"user","email":"duyquangnvx@gmail.com"},"email":"duyquangnvx@gmail.com"},"repository":{"url":"git+https://github.com/duyquangnvx/story-spider.git","type":"git"},"_npmVersion":"10.9.2","description":"A TypeScript library for scraping stories from various Vietnamese websites","directories":{},"_nodeVersion":"22.16.0","dependencies":{"axios":"^1.9.0","cheerio":"^1.0.0","winston":"^3.17.0","bottleneck":"^2.19.5","node-cache":"^5.1.2","html-to-text":"^9.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^5.0.5","ts-jest":"^29.3.2","ts-node":"^10.9.2","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.17","@types/html-to-text":"^9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/story-spider_1.0.5_1751684422871_0.8235724212206748","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@duyquangnvx/story-spider","version":"1.0.6","keywords":["scraper","story","vietnamese","truyenyy","truyenfull","rungtruyen","xalosach","crawler"],"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","_id":"@duyquangnvx/story-spider@1.0.6","maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"homepage":"https://github.com/duyquangnvx/story-spider#readme","bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"dist":{"shasum":"d0e21b92ac99dc1a705eb84041a8ab88ab2d0069","tarball":"https://registry.npmjs.org/@duyquangnvx/story-spider/-/story-spider-1.0.6.tgz","fileCount":86,"integrity":"sha512-1YnVKBmShYBM+j7xZZZAFdc7y01IVrZvIyjoF73I63FOreSLbtmmhDXI4VRzXlT2dLh/w3jtJJ4ji6avTLKQOg==","signatures":[{"sig":"MEUCIQDpQwmvwWdi+M5gchbhZKaYRGmTS65L6xdePoYJ/ndO7gIgcbgRfTAi97qzVdBg788gnjnXpxl2T+Q5q4NNuAuPtig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140362},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5f69a53fa5e8701e5794e38ae5461be59f94cf53","scripts":{"lint":"eslint src/**/*.ts","test":"jest --config jest.config.js","build":"tsc","clean":"rimraf dist","prepare":"npm run build","release":"npm publish --access=public","prebuild":"npm run clean","test:xalosach":"ts-node src/tests/xalosach.test.ts","test:rungtruyen":"ts-node src/tests/rungtruyen.test.ts","test:truyenfull":"ts-node src/tests/truyenfull.test.ts"},"_npmUser":{"name":"duyquangnvx","actor":{"name":"duyquangnvx","type":"user","email":"duyquangnvx@gmail.com"},"email":"duyquangnvx@gmail.com"},"repository":{"url":"git+https://github.com/duyquangnvx/story-spider.git","type":"git"},"_npmVersion":"10.9.2","description":"A TypeScript library for scraping stories from various Vietnamese websites","directories":{},"_nodeVersion":"22.16.0","dependencies":{"axios":"^1.9.0","cheerio":"^1.0.0","winston":"^3.17.0","bottleneck":"^2.19.5","node-cache":"^5.1.2","html-to-text":"^9.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^5.0.5","ts-jest":"^29.3.2","ts-node":"^10.9.2","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.17","@types/html-to-text":"^9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/story-spider_1.0.6_1751697308091_0.7281160743310588","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@duyquangnvx/story-spider","version":"1.0.7","keywords":["scraper","story","vietnamese","truyenyy","truyenfull","rungtruyen","xalosach","crawler"],"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","_id":"@duyquangnvx/story-spider@1.0.7","maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"homepage":"https://github.com/duyquangnvx/story-spider#readme","bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"dist":{"shasum":"9fa78fd2eb0d88a22153fcf5f597d456ffd3cd8c","tarball":"https://registry.npmjs.org/@duyquangnvx/story-spider/-/story-spider-1.0.7.tgz","fileCount":86,"integrity":"sha512-VbLFGQ7rphgSptfjQqMAlx02hL+Lk3wu8ilHAwYy952CT2u2YTHWKE2VhuJXKhfXBauy9lFOmthm/45fzpAScg==","signatures":[{"sig":"MEUCIQCp/VA5CWML+RGDS/nt5n3aJsnWa/g4+PmRYnysRN00CwIgXVT3OU1eKjJmEErydv+Q7nz3daUs2PJHWMejmNgGlhk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140437},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5f69a53fa5e8701e5794e38ae5461be59f94cf53","scripts":{"lint":"eslint src/**/*.ts","test":"jest --config jest.config.js","build":"tsc","clean":"rimraf dist","prepare":"npm run build","release":"npm publish --access=public","prebuild":"npm run clean","test:xalosach":"ts-node src/tests/xalosach.test.ts","test:rungtruyen":"ts-node src/tests/rungtruyen.test.ts","test:truyenfull":"ts-node src/tests/truyenfull.test.ts"},"_npmUser":{"name":"duyquangnvx","actor":{"name":"duyquangnvx","type":"user","email":"duyquangnvx@gmail.com"},"email":"duyquangnvx@gmail.com"},"repository":{"url":"git+https://github.com/duyquangnvx/story-spider.git","type":"git"},"_npmVersion":"10.9.2","description":"A TypeScript library for scraping stories from various Vietnamese websites","directories":{},"_nodeVersion":"22.16.0","dependencies":{"axios":"^1.9.0","cheerio":"^1.0.0","winston":"^3.17.0","bottleneck":"^2.19.5","node-cache":"^5.1.2","html-to-text":"^9.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^5.0.5","ts-jest":"^29.3.2","ts-node":"^10.9.2","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.17","@types/html-to-text":"^9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/story-spider_1.0.7_1751697659032_0.9979429858129103","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@duyquangnvx/story-spider","version":"1.0.8","keywords":["scraper","story","vietnamese","truyenyy","truyenfull","rungtruyen","xalosach","crawler"],"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","_id":"@duyquangnvx/story-spider@1.0.8","maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"homepage":"https://github.com/duyquangnvx/story-spider#readme","bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"dist":{"shasum":"85a15c26dbc766fd38f94434433fc3e81f9eaf66","tarball":"https://registry.npmjs.org/@duyquangnvx/story-spider/-/story-spider-1.0.8.tgz","fileCount":86,"integrity":"sha512-DjQmdT/VhPcW90JcqV+ujadMdoRyUzEUixEdKM4NRUzd727A0PlFUr/5YW05eL0FKDl0zsXfHobSUDdE9YAUlg==","signatures":[{"sig":"MEUCIQDxkj2KGhVpXm06K+UtWU+cOmp0u4jdJfouVAptkazIcQIgBV8xTINnWB/Mc5WrI0AjkOJVN7lUuWFyvrFDSXXxZYo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141602},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5f69a53fa5e8701e5794e38ae5461be59f94cf53","scripts":{"lint":"eslint src/**/*.ts","test":"jest --config jest.config.js","build":"tsc","clean":"rimraf dist","prepare":"npm run build","release":"npm publish --access=public","prebuild":"npm run clean","test:xalosach":"ts-node src/tests/xalosach.test.ts","test:rungtruyen":"ts-node src/tests/rungtruyen.test.ts","test:truyenfull":"ts-node src/tests/truyenfull.test.ts"},"_npmUser":{"name":"duyquangnvx","actor":{"name":"duyquangnvx","type":"user","email":"duyquangnvx@gmail.com"},"email":"duyquangnvx@gmail.com"},"repository":{"url":"git+https://github.com/duyquangnvx/story-spider.git","type":"git"},"_npmVersion":"10.9.2","description":"A TypeScript library for scraping stories from various Vietnamese websites","directories":{},"_nodeVersion":"22.16.0","dependencies":{"axios":"^1.9.0","cheerio":"^1.0.0","winston":"^3.17.0","bottleneck":"^2.19.5","node-cache":"^5.1.2","html-to-text":"^9.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^5.0.5","ts-jest":"^29.3.2","ts-node":"^10.9.2","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.17","@types/html-to-text":"^9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/story-spider_1.0.8_1751698775621_0.953900561918424","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@duyquangnvx/story-spider","version":"1.0.9","keywords":["scraper","story","vietnamese","truyenyy","truyenfull","rungtruyen","xalosach","crawler"],"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","_id":"@duyquangnvx/story-spider@1.0.9","maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"homepage":"https://github.com/duyquangnvx/story-spider#readme","bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"dist":{"shasum":"80eeee68ed11704a6d0e5bdb77191ae8ed5305e2","tarball":"https://registry.npmjs.org/@duyquangnvx/story-spider/-/story-spider-1.0.9.tgz","fileCount":86,"integrity":"sha512-HipzkB24qzHMseEsoJ6j8qY5B4yKmn3rc0m5/tS56+X6ud+3PY7pjJV49RaaroIXrxc5XcumnzWAfWKSMyQsbA==","signatures":[{"sig":"MEQCIDZXQeft2fFTxsceAjuVJpLS6xOVGdlvrjry6TK8e3P1AiBiSnjyYzQ7cVX+vZPoO3k05OPnc9NLDYd4RKiDN5PIaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":146032},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5f69a53fa5e8701e5794e38ae5461be59f94cf53","scripts":{"lint":"eslint src/**/*.ts","test":"jest --config jest.config.js","build":"tsc","clean":"rimraf dist","prepare":"npm run build","release":"npm publish --access=public","prebuild":"npm run clean","test:xalosach":"ts-node src/tests/xalosach.test.ts","test:rungtruyen":"ts-node src/tests/rungtruyen.test.ts","test:truyenfull":"ts-node src/tests/truyenfull.test.ts"},"_npmUser":{"name":"duyquangnvx","actor":{"name":"duyquangnvx","type":"user","email":"duyquangnvx@gmail.com"},"email":"duyquangnvx@gmail.com"},"repository":{"url":"git+https://github.com/duyquangnvx/story-spider.git","type":"git"},"_npmVersion":"10.9.2","description":"A TypeScript library for scraping stories from various Vietnamese websites","directories":{},"_nodeVersion":"22.16.0","dependencies":{"axios":"^1.9.0","cheerio":"^1.0.0","winston":"^3.17.0","bottleneck":"^2.19.5","node-cache":"^5.1.2","html-to-text":"^9.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^5.0.5","ts-jest":"^29.3.2","ts-node":"^10.9.2","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.17","@types/html-to-text":"^9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/story-spider_1.0.9_1751699344881_0.16586447235367885","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@duyquangnvx/story-spider","version":"2.0.0","keywords":["scraper","story","vietnamese","truyenyy","truyenfull","rungtruyen","xalosach","crawler"],"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","_id":"@duyquangnvx/story-spider@2.0.0","maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"homepage":"https://github.com/duyquangnvx/story-spider#readme","bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"dist":{"shasum":"a42cf3b19cc39b7e8f8ec1561b1ce0a7d1e93114","tarball":"https://registry.npmjs.org/@duyquangnvx/story-spider/-/story-spider-2.0.0.tgz","fileCount":90,"integrity":"sha512-aD+uktcLNSIWN7IteUTTi/mC6+SbE5CYgr5P7QckqM58tIo0EqKv+WuM8h41X66f5NNsptJL2vQDHlj0Zm4AJg==","signatures":[{"sig":"MEQCIDlKZUtQjYHwjFvv7aSzRMpu+Ac3rGMUILiSPTxb9fdzAiBCvCSFsEhzY7LsfQmyoTBd3fM4jg10H+kuWFRNqoUVog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165116},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5ef36693221744ec9944d464c742e58c9d5203c0","scripts":{"lint":"eslint src/**/*.ts","test":"jest --config jest.config.js","build":"tsc","clean":"rimraf dist","prepare":"npm run build","release":"npm publish --access=public","prebuild":"npm run clean","test:xalosach":"ts-node src/tests/xalosach.test.ts","test:mailinhwp":"ts-node src/tests/mailinhwp.test.ts","test:rungtruyen":"ts-node src/tests/rungtruyen.test.ts","test:truyenfull":"ts-node src/tests/truyenfull.test.ts"},"_npmUser":{"name":"duyquangnvx","actor":{"name":"duyquangnvx","type":"user","email":"duyquangnvx@gmail.com"},"email":"duyquangnvx@gmail.com"},"repository":{"url":"git+https://github.com/duyquangnvx/story-spider.git","type":"git"},"_npmVersion":"10.9.2","description":"A TypeScript library for scraping stories from various Vietnamese websites","directories":{},"_nodeVersion":"22.16.0","dependencies":{"axios":"^1.9.0","cheerio":"^1.0.0","winston":"^3.17.0","bottleneck":"^2.19.5","node-cache":"^5.1.2","html-to-text":"^9.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^5.0.5","ts-jest":"^29.3.2","ts-node":"^10.9.2","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.17","@types/html-to-text":"^9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/story-spider_2.0.0_1751726938441_0.8335094127679963","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@duyquangnvx/story-spider","version":"2.0.1","keywords":["scraper","story","vietnamese","truyenyy","truyenfull","rungtruyen","xalosach","crawler"],"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","_id":"@duyquangnvx/story-spider@2.0.1","maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"homepage":"https://github.com/duyquangnvx/story-spider#readme","bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"dist":{"shasum":"8e1cb81184764a81e94f1d23e381bb3274f3e754","tarball":"https://registry.npmjs.org/@duyquangnvx/story-spider/-/story-spider-2.0.1.tgz","fileCount":90,"integrity":"sha512-DWkGrekmEYcGvkhg+Lb32DhCwU+aYhIxm/nZADk6wq9O5srLlucySrOFh8O+8mJtFVLxUhGcI4fHkslTT6TpcQ==","signatures":[{"sig":"MEUCIBDydtDNcPeYLslg1iSXnBZuOIQVibQbWESKDxE5nPnsAiEA2ebI5wbazy2ES2i9LudODdg60In7VzQ0UiJBvt8p/hs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":165387},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"665877bd2ee04ee49f05b2d7c3e558416fb59e8f","scripts":{"lint":"eslint src/**/*.ts","test":"jest --config jest.config.js","build":"tsc","clean":"rimraf dist","prepare":"npm run build","release":"npm publish --access=public","prebuild":"npm run clean","test:xalosach":"ts-node src/tests/xalosach.test.ts","test:mailinhwp":"ts-node src/tests/mailinhwp.test.ts","test:rungtruyen":"ts-node src/tests/rungtruyen.test.ts","test:truyenfull":"ts-node src/tests/truyenfull.test.ts"},"_npmUser":{"name":"duyquangnvx","actor":{"name":"duyquangnvx","type":"user","email":"duyquangnvx@gmail.com"},"email":"duyquangnvx@gmail.com"},"repository":{"url":"git+https://github.com/duyquangnvx/story-spider.git","type":"git"},"_npmVersion":"10.9.2","description":"A TypeScript library for scraping stories from various Vietnamese websites","directories":{},"_nodeVersion":"22.16.0","dependencies":{"axios":"^1.9.0","cheerio":"^1.0.0","winston":"^3.17.0","bottleneck":"^2.19.5","node-cache":"^5.1.2","html-to-text":"^9.0.5"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^5.0.5","ts-jest":"^29.3.2","ts-node":"^10.9.2","typescript":"^5.8.3","@types/jest":"^29.5.14","@types/node":"^22.15.17","@types/html-to-text":"^9.0.4"},"_npmOperationalInternal":{"tmp":"tmp/story-spider_2.0.1_1751729843022_0.9390690834439066","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@duyquangnvx/story-spider","version":"2.0.2","description":"A TypeScript library for scraping stories from various Vietnamese websites","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","test":"jest --config jest.config.js","lint":"eslint src/**/*.ts","clean":"rimraf dist","prebuild":"npm run clean","prepare":"npm run build","test:truyenfull":"ts-node src/tests/truyenfull.test.ts","test:rungtruyen":"ts-node src/tests/rungtruyen.test.ts","test:xalosach":"ts-node src/tests/xalosach.test.ts","test:mailinhwp":"ts-node src/tests/mailinhwp.test.ts","test:metruyencv":"ts-node src/tests/metruyencv.test.ts","release":"npm publish --access=public"},"keywords":["scraper","story","vietnamese","truyenyy","truyenfull","rungtruyen","xalosach","crawler"],"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/duyquangnvx/story-spider.git"},"homepage":"https://github.com/duyquangnvx/story-spider#readme","bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"dependencies":{"axios":"^1.9.0","bottleneck":"^2.19.5","cheerio":"^1.0.0","crawlee":"^3.13.10","dotenv":"^17.2.0","html-to-text":"^9.0.5","node-cache":"^5.1.2","playwright":"^1.54.0","winston":"^3.17.0"},"devDependencies":{"@types/html-to-text":"^9.0.4","@types/jest":"^29.5.14","@types/node":"^22.15.17","jest":"^29.7.0","rimraf":"^5.0.5","ts-jest":"^29.3.2","ts-node":"^10.9.2","typescript":"^5.8.3"},"_id":"@duyquangnvx/story-spider@2.0.2","gitHead":"2142a914f5c5bf87dbc534b7da222339c098feba","_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-Hf04dSPOW708MWM93U0HaHA+KFKuplaFeMWrFVdZ/843UK24p+fGuZE8LHVUFT3l3O79pK8u/k345WfBb01Q3A==","shasum":"0d583734b2b83871a12b8bda93999a5aae94a2b0","tarball":"https://registry.npmjs.org/@duyquangnvx/story-spider/-/story-spider-2.0.2.tgz","fileCount":94,"unpackedSize":203865,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD029nzZBHc+Jh3QzhYWOKNXIjUA34sinvg1jD+ovV3eAIgafzu5yTi2KY8ziTsBxN5HhhH15OoTILBjVSBhA4q/ic="}]},"_npmUser":{"name":"duyquangnvx","email":"duyquangnvx@gmail.com","actor":{"name":"duyquangnvx","email":"duyquangnvx@gmail.com","type":"user"}},"directories":{},"maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/story-spider_2.0.2_1752166692762_0.14606286843380567"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-28T09:14:20.456Z","modified":"2025-07-10T16:58:13.262Z","1.0.0":"2025-06-28T09:14:20.801Z","1.0.1":"2025-06-28T09:17:33.760Z","1.0.3":"2025-06-28T09:17:49.844Z","1.0.4":"2025-07-03T06:23:42.057Z","1.0.5":"2025-07-05T03:00:23.046Z","1.0.6":"2025-07-05T06:35:08.304Z","1.0.7":"2025-07-05T06:40:59.228Z","1.0.8":"2025-07-05T06:59:35.819Z","1.0.9":"2025-07-05T07:09:05.059Z","2.0.0":"2025-07-05T14:48:58.620Z","2.0.1":"2025-07-05T15:37:23.200Z","2.0.2":"2025-07-10T16:58:13.076Z"},"bugs":{"url":"https://github.com/duyquangnvx/story-spider/issues"},"author":{"name":"Duy Quang","email":"duyquangnvx@gmail.com"},"license":"ISC","homepage":"https://github.com/duyquangnvx/story-spider#readme","keywords":["scraper","story","vietnamese","truyenyy","truyenfull","rungtruyen","xalosach","crawler"],"repository":{"type":"git","url":"git+https://github.com/duyquangnvx/story-spider.git"},"description":"A TypeScript library for scraping stories from various Vietnamese websites","maintainers":[{"name":"duyquangnvx","email":"duyquangnvx@gmail.com"}],"readme":"# Story Spider\n\nStory Spider is a TypeScript library for scraping stories from popular Vietnamese story websites like truyenyy.vn, truyenfull.vn, etc. It features a modular architecture that makes it easy to add support for additional websites.\n\n## Features\n\n- Collect story information (title, description, author, genre, status, total chapters)\n- Get chapter lists with details\n- Retrieve chapter URLs by chapter number\n- Get chapter content in HTML or text format\n- Intelligent content cleaning with html-to-text integration\n- Advanced caching for reduced bandwidth and faster performance\n- Rate limiting to avoid overloading servers\n- Extensible adapter system for supporting multiple websites\n\n## Installation\n\n```bash\nnpm install story-spider\n```\n\n## Environment Variables\n\nFor authenticated websites (metruyencv.com), set up environment variables:\n\n```bash\n# Metruyencv authentication\nexport METRUYENCV_EMAIL=\"your-email@example.com\"\nexport METRUYENCV_PASSWORD=\"your-password\"\n```\n\nOr create a `.env` file:\n```env\nMETRUYENCV_EMAIL=your-email@example.com\nMETRUYENCV_PASSWORD=your-password\n```\n\n## Usage\n\n### Basic Usage\n\n```typescript\nimport { StorySpider } from 'story-spider';\n\n// Create story spider\nconst storySpider = new StorySpider({\n    rateLimiterOptions: {\n      minTime: 1000,\n      maxConcurrent: 1,\n    }\n});\n\n// Default scrapers are registered automatically:\n// - TruyenfullScraper, RungtruyenScraper, XalosachScraper, MailinhwpScraper, MetruyencvScraper\n\n// Get story information (works with any supported website)\nconst storyInfo = await storySpider.scrapeStoryInfo('https://rungtruyen.com/category/tien-hiep/quang-am-chi-ngoai/');\nconsole.log(storyInfo);\n\n// Get chapter list\nconst chapters = await storySpider.scrapeChapterList('https://rungtruyen.com/category/tien-hiep/quang-am-chi-ngoai/');\nconsole.log(chapters);\n\n// Get chapter content\nconst chapterContent = await storySpider.scrapeChapterContent(chapterUrl);\nconsole.log(chapterContent);\n```\n\n### Creating a Custom Scraper\n\nYou can create your own scraper for any website by extending the `StoryScraper` class:\n\n```typescript\nimport { StoryScraper, StoryInfo, ChapterInfo } from 'story-spider';\n\nexport class CustomScraper extends StoryScraper {\n  getSiteIdentifier(): string {\n    // Implementation for getting site id\n  }\n\n  getSupportedDomains(): string[] {\n    // Implementation for getting supported domains\n  }\n\n  canHandle(url: string): boolean {\n    // Implementation for check if url can handle\n  }\n\n  async scapeStoryInfo(storyUrl: string): Promise<StoryInfo> {\n    // Implementation for getting story info\n  }\n\n  async scapeChapterList(storyUrl: string): Promise<ChapterInfo[]> {\n    // Implementation for getting chapter list\n  }\n\n  async scapeChapterContent(chapterUrl: string): Promise<string> {\n    // Implementation for getting chapter content\n  }\n}\n\n// Register the scraper\nstorySpider.registerScraper(new CustomScraper());\n```\n\n### Using Authenticated Scrapers (Metruyencv)\n\nFor websites that require authentication like metruyencv.com, simply set environment variables and use StorySpider normally:\n\n```bash\n# Set environment variables\nexport METRUYENCV_EMAIL=\"your-email@example.com\"\nexport METRUYENCV_PASSWORD=\"your-password\"\n```\n\n```typescript\nimport { StorySpider } from 'story-spider';\n\n// Create story spider (Metruyencv scraper is registered automatically)\nconst storySpider = new StorySpider({\n    rateLimiterOptions: {\n      minTime: 2000, // Recommended for authenticated sites\n      maxConcurrent: 1,\n    }\n});\n\n// Use normally - authentication happens automatically\nconst storyInfo = await storySpider.scrapeStoryInfo('https://metruyencv.com/truyen/example-story/');\nconst chapters = await storySpider.scrapeChapterList('https://metruyencv.com/truyen/example-story/');\n\nif (chapters.length > 0) {\n    const chapterContent = await storySpider.scrapeChapterContent(chapters[0].url);\n    console.log(chapterContent);\n}\n```\n\n## Testing\n\n```bash\n# Test with specific scrapers\nnpm run test:truyenfull\nnpm run test:rungtruyen\nnpm run test:xalosach\nnpm run test:mailinhwp\n\n# Test Metruyencv (requires environment variables)\nexport METRUYENCV_EMAIL=\"your-email@example.com\"\nexport METRUYENCV_PASSWORD=\"your-password\"\nnpm run test:story-spider-metruyencv\n```\n\n## Supported Websites\n\n- **Truyenfull** (truyenfull.vn, truyenfull.com, truyenfull.vision, truyenfull.vip)\n- **Rungtruyen** (rungtruyen.com)\n- **Metruyencv** (metruyencv.com) - *Requires authentication*\n\nAdditional website scrapers can be implemented separately or contributed to this project.\n\n## Dependencies\n\n- html-to-text: For advanced HTML content cleaning\n- axios: For network requests\n- cheerio: For HTML parsing\n- winston: For logging\n- node-cache: For caching\n- playwright: For browser automation (authenticated scrapers)\n- crawlee: For advanced web scraping capabilities\n\n## License\n\nISC","readmeFilename":"README.md"}