From 03596d5ae91428d0202ab57b8241ec2a709ed255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9luchu?= Date: Thu, 4 Jun 2020 18:31:42 +0200 Subject: [PATCH] Refactor and Added Images and Videos Services --- package-lock.json | 387 +++++----------------------------------- package.json | 2 - src/api/api.js | 272 ++++++++++------------------ src/api/index.js | 4 +- src/api/routes/index.js | 85 +++++---- src/api/urls.js | 4 +- src/utils/index.js | 26 +-- 7 files changed, 216 insertions(+), 564 deletions(-) diff --git a/package-lock.json b/package-lock.json index 82fe005..2bab9bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,68 +4,15 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@babel/runtime": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.2.tgz", - "integrity": "sha512-6sF3uQw2ivImfVIl62RZ7MXhO2tap69WeWK57vAaimT6AZbE4FbqjdEJIN1UqoD6wI6B+1n9UiagafH1sxjOtg==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@sindresorhus/is": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", - "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==" - }, - "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, "@types/debug": { "version": "0.0.31", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-0.0.31.tgz", "integrity": "sha512-LS1MCPaQKqspg7FvexuhmDbWUhE2yIJ+4AgVIyObfc06/UKZ8REgxGNjZc82wPLWmbeOm7S+gSsLgo75TanG4A==" }, - "@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==" - }, - "@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", - "requires": { - "@types/node": "*" - } - }, "@types/node": { - "version": "13.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.1.tgz", - "integrity": "sha512-Zq8gcQGmn4txQEJeiXo/KiLpon8TzAl0kmKH4zdWctPj05nWwp1ClMdAVEloqrQKfaC48PNLdgN/aVaLqUrluA==" - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "requires": { - "@types/node": "*" - } + "version": "14.0.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.10.tgz", + "integrity": "sha512-Bz23oN/5bi0rniKT24ExLf4cK0JdvN3dH/3k0whYkdN4eI4vS2ZW/2ENNn2uxHCzWcbdHIa/GRuWQytfzCjRYw==" }, "accepts": { "version": "1.3.7", @@ -77,9 +24,9 @@ } }, "ajv": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.11.0.tgz", - "integrity": "sha512-nCprB/0syFYy9fVYU1ox1l2KN8S9I+tziH8D4zdZuLT3N6RMlGSGt5FSTpAiHB/Whv8Qs1cWHma1aMKZyaHRKA==", + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -87,16 +34,6 @@ "uri-js": "^4.2.2" } }, - "animeflv-scrapper": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/animeflv-scrapper/-/animeflv-scrapper-0.2.12.tgz", - "integrity": "sha512-EvASm0nj9tCtopOZ6L9JF5jX0c0Nmv1ROYEg4/wKcGlX2rINvtXNoW6jqM7SGWG4POrh4RI1AjkpbiaP/cMibA==", - "requires": { - "@babel/runtime": "^7.8.7", - "cloudscraper": "^4.6.0", - "node-html-parser": "^1.2.12" - } - }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -126,9 +63,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", - "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" }, "axios": { "version": "0.19.2", @@ -174,16 +111,6 @@ "qs": "6.7.0", "raw-body": "2.4.0", "type-is": "~1.6.17" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } } }, "boolbase": { @@ -201,25 +128,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, - "cacheable-lookup": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.3.tgz", - "integrity": "sha512-W+JBqF9SWe18A72XFzN/V/CULFzPm7sBXzzR6ekkE+3tLG72wFZrBiBZhrZuDoYexop4PHJVdFAKb/Nj9+tm9w==" - }, - "cacheable-request": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz", - "integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^2.0.0" - } - }, "camelize": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", @@ -243,19 +151,6 @@ "parse5": "^3.0.1" } }, - "cheerio-tableparser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cheerio-tableparser/-/cheerio-tableparser-1.0.1.tgz", - "integrity": "sha1-5VrS3LU2G4wyOmy7jAzUbjy98c0=" - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - } - }, "cloudscraper": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/cloudscraper/-/cloudscraper-4.6.0.tgz", @@ -376,33 +271,13 @@ "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { "ms": "2.0.0" } }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - }, - "dependencies": { - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - } - } - }, - "defer-to-connect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.0.tgz", - "integrity": "sha512-bYL2d05vOSf1JEZNx5vSAtPuBMkX8K9EUutg7zlKvTqKXHt7RhWJFbmd7qakVuf13i+IkGmp6FwSsONOf6VYIg==" - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -478,14 +353,6 @@ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", @@ -548,14 +415,6 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -605,16 +464,6 @@ "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - } } }, "follow-redirects": { @@ -623,6 +472,16 @@ "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", "requires": { "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } } }, "forever-agent": { @@ -655,14 +514,6 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "requires": { - "pump": "^3.0.0" - } - }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -671,25 +522,6 @@ "assert-plus": "^1.0.0" } }, - "got": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/got/-/got-11.2.0.tgz", - "integrity": "sha512-68pBow9XXXSdVRV5wSx0kWMCZsag4xE3Ru0URVe0PWsSYmU4SJrUmEO6EVYFlFHc9rq/6Yqn6o1GxIb9torQxg==", - "requires": { - "@sindresorhus/is": "^2.1.1", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.1", - "decompress-response": "^6.0.0", - "get-stream": "^5.1.0", - "http2-wrapper": "^1.0.0-beta.4.5", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - } - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -704,11 +536,6 @@ "har-schema": "^2.0.0" } }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" - }, "helmet": { "version": "3.22.0", "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.22.0.tgz", @@ -797,11 +624,6 @@ "readable-stream": "^3.1.1" } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -824,15 +646,6 @@ "sshpk": "^1.7.0" } }, - "http2-wrapper": { - "version": "1.0.0-beta.4.6", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.0-beta.4.6.tgz", - "integrity": "sha512-9oB4BiGDTI1FmIBlOF9OJ5hwJvcBEmPCqk/hy314Uhy2uq5TjekUZM8w8SPLLlUEM+mxNhXdPAXfrJN2Zbb/GQ==", - "requires": { - "quick-lru": "^5.0.0", - "resolve-alpn": "^1.0.0" - } - }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -852,9 +665,9 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "is-typedarray": { "version": "1.0.0", @@ -896,11 +709,6 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -927,24 +735,11 @@ "verror": "1.10.0" } }, - "keyv": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.1.tgz", - "integrity": "sha512-xz6Jv6oNkbhrFCvCP7HQa8AaII8y8LRpoSm661NOKLr4uHuBwhX4epXrPQgF3+xdJnN4Esm5X0xwY4bOlALOtw==", - "requires": { - "json-buffer": "3.0.1" - } - }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -966,23 +761,18 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "requires": { - "mime-db": "1.43.0" + "mime-db": "1.44.0" } }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -1020,19 +810,6 @@ "nan": "^2.13.2" } }, - "node-html-parser": { - "version": "1.2.18", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.2.18.tgz", - "integrity": "sha512-DypklUSTuY9JDfYWz/NZYZA8mvgKmjRmHZe7at0H6O4KoXcs8QSpnH5mFk888gLsqXXRMVNmJGk/FdqaO9T1UQ==", - "requires": { - "he": "1.1.1" - } - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" - }, "npm": { "version": "6.14.5", "resolved": "https://registry.npmjs.org/npm/-/npm-6.14.5.tgz", @@ -4165,19 +3942,6 @@ "ee-first": "1.1.1" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==" - }, "parse5": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", @@ -4202,27 +3966,18 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "ipaddr.js": "1.9.1" } }, "psl": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", - "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "punycode": { "version": "2.1.1", @@ -4234,11 +3989,6 @@ "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" - }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -4256,9 +4006,9 @@ } }, "readable-stream": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz", - "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -4270,11 +4020,6 @@ "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==" }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" - }, "request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -4328,19 +4073,6 @@ "lodash": "^4.17.15" } }, - "resolve-alpn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz", - "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA==" - }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "requires": { - "lowercase-keys": "^2.0.0" - } - }, "rss-to-json": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/rss-to-json/-/rss-to-json-1.1.1.tgz", @@ -4351,9 +4083,9 @@ } }, "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", @@ -4380,21 +4112,6 @@ "statuses": "~1.5.0" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -4546,11 +4263,6 @@ "extsprintf": "^1.2.0" } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, "x-xss-protection": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz", @@ -4565,15 +4277,6 @@ "joi": "^13.1.2", "node-expat": "^2.3.18" } - }, - "youtube-search-without-api-key": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/youtube-search-without-api-key/-/youtube-search-without-api-key-1.0.2.tgz", - "integrity": "sha512-WAQZYBmgarclZCvptB9HnPA9lbTA5b08Q0Qj+l/92PNilZltcCF6fwC1LUFZxEQ40Mc88zOJrivlReR9SHcLHw==", - "requires": { - "cheerio": "^1.0.0-rc.3", - "got": "^11.1.2" - } } } } diff --git a/package.json b/package.json index 2dd9f43..28c4ca9 100644 --- a/package.json +++ b/package.json @@ -41,10 +41,8 @@ "url": "https://github.com/aruppi/aruppi-api.git" }, "dependencies": { - "animeflv-scrapper": "^0.2.12", "body-parser": "^1.19.0", "cheerio": "^1.0.0-rc.3", - "cheerio-tableparser": "^1.0.1", "cloudscraper": "^4.6.0", "compose-middleware": "^5.0.1", "cors": "^2.8.5", diff --git a/src/api/api.js b/src/api/api.js index af255de..8c2c5cb 100644 --- a/src/api/api.js +++ b/src/api/api.js @@ -1,6 +1,5 @@ const rss = require('rss-to-json'); const cloudscraper = require('cloudscraper'); -const animeflv = require("animeflv-scrapper"); const { animeflvInfo, @@ -13,40 +12,14 @@ const { } = require('../utils/index'); const { - BASE_ANIMEFLV, BASE_ANIMEFLV_JELU, BASE_JIKAN, BASE_IVOOX, BASE_KUDASAI, BASE_PALOMITRON, BASE_RAMENPARADOS + BASE_ANIMEFLV, BASE_ANIMEFLV_JELU, BASE_JIKAN, BASE_IVOOX, BASE_QWANT, BASE_YOUTUBE } = require('./urls'); const schedule = async (day) =>{ - const data = await cloudscraper.get(`${BASE_JIKAN}schedule/${day}`); + const data = await cloudscraper.get(`${BASE_JIKAN}schedule/${day.current}`); + const body = JSON.parse(data)[day.current] const promises = [] - let body; - - switch (day) { - case "monday": - body = JSON.parse(data).monday; - break; - case "tuesday": - body = JSON.parse(data).tuesday; - break; - case "wednesday": - body = JSON.parse(data).wednesday; - break; - case "thursday": - body = JSON.parse(data).thursday; - break; - case "friday": - body = JSON.parse(data).friday; - break; - case "saturday": - body = JSON.parse(data).saturday; - break; - case "sunday": - body = JSON.parse(data).sunday; - break; - default: - body = JSON.parse(data).monday; - } body.map(doc =>{ @@ -55,27 +28,32 @@ const schedule = async (day) =>{ malid: doc.mal_id, image: doc.image_url }); + }); - return Promise.all(promises); + return promises; }; const top = async (type, subtype, page) =>{ const data = await cloudscraper.get(`${BASE_JIKAN}top/${type}/${page}/${subtype}`); - let body = JSON.parse(data).top; - return Promise.all(body); + return JSON.parse(data).top; }; const getAllAnimes = async () =>{ const data = await cloudscraper.get(`${BASE_ANIMEFLV}api/animes/list`); - let body = JSON.parse(data); - - return Promise.all(body); + const body = JSON.parse(data); + return body.map(item => ({ + index: item[0], + animeId: item[3], + title: item[1], + id: item[2], + type: item[4] + })); }; @@ -112,61 +90,35 @@ const getAnitakume = async () =>{ }); - return Promise.all(promises); + return promises; }; -const getNews = async () =>{ +const getNews = async (pageRss) =>{ const promises = [] - await rss.load(BASE_KUDASAI).then(rss => { - - const body = JSON.parse(JSON.stringify(rss, null, 3)).items - body.map(doc =>{ - - promises.push({ - title: doc.title, - url: doc.link, - author: 'Kudasai', - content: doc.content_encoded - }); - }); - - }); - - await rss.load(BASE_PALOMITRON).then(rss => { - - const body = JSON.parse(JSON.stringify(rss, null, 3)).items - body.map(doc =>{ + for(let i = 0; i <= pageRss.length -1; i++) { - promises.push({ - title: doc.title, - url: doc.link, - author: 'Palomitron', - content: doc.description - }); - }); + await rss.load(pageRss[i].url).then(rss => { - }); + const body = JSON.parse(JSON.stringify(rss, null, 3)).items + body.map(doc => { - await rss.load(BASE_RAMENPARADOS).then(rss => { + promises.push({ + title: doc.title, + url: doc.link, + author: pageRss[i].author, + content: doc[pageRss[i].content] + }); - const body = JSON.parse(JSON.stringify(rss, null, 3)).items - body.map(doc =>{ - - promises.push({ - title: doc.title, - url: doc.link, - author: 'Ramen para dos', - content: doc.content }); }); - }); + } - return Promise.all(promises); + return promises; }; @@ -186,7 +138,7 @@ const season = async (year, type) =>{ }); }); - return Promise.all(promises); + return promises; }; @@ -207,64 +159,14 @@ const getLastEpisodes = async () =>{ }); }); - return Promise.all(promises); - -}; - -const getMovies = async (type, page) =>{ - - const data = await cloudscraper.get(`${BASE_ANIMEFLV_JELU}Movies/${type}/${page}`); - let body = JSON.parse(data).movies; - const promises = [] - - body.map(doc =>{ - - promises.push({ - id: doc.id, - title: doc.title, - banner: doc.banner, - image: doc.poster, - synopsis: doc.synopsis, - status: doc.debut, - rate: doc.rating, - genres: doc.genres.map(x => x), - episodes: doc.episodes.map(x => x) - }); - }); - - return Promise.all(promises); - -}; - -const getOvas = async (type, page) =>{ - - const data = await cloudscraper.get(`${BASE_ANIMEFLV_JELU}Ova/${type}/${page}`); - let body = JSON.parse(data).ova; - const promises = [] - - body.map(doc =>{ - - promises.push({ - id: doc.id, - title: doc.title, - banner: doc.banner, - image: doc.poster, - synopsis: doc.synopsis, - status: doc.debut, - rate: doc.rating, - genres: doc.genres.map(x => x), - episodes: doc.episodes.map(x => x) - }); - }); - - return Promise.all(promises); + return promises; }; -const getSpecials = async (type, page) =>{ +const getSpecials = async (type, subType, page) =>{ - const data = await cloudscraper.get(`${BASE_ANIMEFLV_JELU}Special/${type}/${page}`); - let body = JSON.parse(data).special; + const data = await cloudscraper.get(`${BASE_ANIMEFLV_JELU}${type.url}/${subType}/${page}`); + let body = JSON.parse(data)[type.prop]; const promises = [] body.map(doc =>{ @@ -282,60 +184,40 @@ const getSpecials = async (type, page) =>{ }); }); - return Promise.all(promises); + return promises; }; -const getTv = async (type, page) =>{ - - const data = await cloudscraper.get(`${BASE_ANIMEFLV_JELU}Tv/${type}/${page}`); - let body = JSON.parse(data).tv; - const promises = [] - - body.map(doc =>{ - - promises.push({ - id: doc.id, - title: doc.title, - banner: doc.banner, - image: doc.poster, - synopsis: doc.synopsis, - status: doc.debut, - rate: doc.rating, - genres: doc.genres.map(x => x), - episodes: doc.episodes.map(x => x) - }); - }); - - return Promise.all(promises); - -}; const getMoreInfo = async (title) =>{ const promises = [] - let animeTitle ="" - let animeId = "" - let animeType = "" + let animeTitle = '' + let animeId = '' + let animeType = '' + let animeIndex = '' - await animeflv.searchAnime(title).then(data => { + await getAllAnimes().then(data => { data.forEach(function (anime) { - if (anime.label.split('\t')[0] === title.split('\t')[0] || anime.label === `${title} (TV)`) { - if (anime.label.includes('(TV)', 0)) { animeTitle = anime.label.split('\t')[0].replace(' (TV)', '') } - else { animeTitle = anime.label.split('\t')[0] } - animeId = anime.animeId + if (anime.title.split('\t')[0] === title.split('\t')[0] || anime.title === `${title} (TV)`) { + if (anime.title.includes('(TV)', 0)) { animeTitle = anime.title.split('\t')[0].replace(' (TV)', '') } + else { animeTitle = anime.title.split('\t')[0] } + animeId = anime.id + animeIndex = anime.index animeType = anime.type.toLowerCase() } } ) }); + + try{ switch (animeType) { - case "anime": - promises.push(await animeflvInfo(animeId).then(async extra => ({ + case "tv": + promises.push(await animeflvInfo(animeId, animeIndex).then(async extra => ({ title: animeTitle || null, poster: await imageUrlToBase64(extra.animeExtraInfo[0].poster) || null, synopsis: extra.animeExtraInfo[0].synopsis || null, @@ -355,7 +237,7 @@ const getMoreInfo = async (title) =>{ }) }))); break; - case "pelĂ­cula": + case "movie": promises.push(await animeflvInfo(animeId).then(async extra => ({ title: animeTitle || null, poster: await imageUrlToBase64(extra.animeExtraInfo[0].poster) || null, @@ -396,7 +278,8 @@ const getMoreInfo = async (title) =>{ console.log(err) } - return Promise.all(promises); + return promises; + }; const getAnimeServers = async (id) => { @@ -404,12 +287,52 @@ const getAnimeServers = async (id) => { const data = await cloudscraper.get(`${BASE_ANIMEFLV_JELU}GetAnimeServers/${id}`); let body = JSON.parse(data).servers; - return Promise.all(await transformUrlServer(body)); + return await transformUrlServer(body); + +}; + +const search = async (title) =>{ return await searchAnime(title); }; + +const getImages = async (query) => { + + const data = await cloudscraper.get(`${BASE_QWANT}count=${query.count}&q=${query.title}&t=${query.type}&safesearch=${query.safesearch}&locale=${query.country}&uiv=4`); + const body = JSON.parse(data).data.result.items; + const promises = [] + + body.map(doc =>{ + + promises.push({ + type: doc.thumb_type, + thumbnail: `https:${doc.thumbnail}`, + fullsize: `https:${doc.media_fullsize}` + }); + + }); + + return promises; }; -const search = async (title) =>{ - return await searchAnime(title); +const getYoutubeVideos = async (channelId) => { + + const data = await cloudscraper.get(`${BASE_YOUTUBE}${channelId.id}&part=${channelId.part}&order=${channelId.order}&maxResults=${channelId.maxResults}`); + const body = JSON.parse(data)[channelId.prop]; + const promises = [] + + body.map(doc =>{ + + promises.push({ + title: doc.snippet.title, + videoId: doc.id.videoId, + thumbDefault: doc.snippet.thumbnails.default.url, + thumbMedium: doc.snippet.thumbnails.medium.url, + thumbHigh: doc.snippet.thumbnails.high.url + }); + + }); + + return promises; + }; module.exports = { @@ -420,11 +343,10 @@ module.exports = { getNews, season, getLastEpisodes, - getMovies, - getOvas, getSpecials, - getTv, getMoreInfo, getAnimeServers, - search + search, + getImages, + getYoutubeVideos }; diff --git a/src/api/index.js b/src/api/index.js index af3d2db..1741b6e 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -24,7 +24,9 @@ router.get('/', (req, res) => { 'Tv': '/api/v2/tv/:type/:page', 'MoreInfo': '/api/v2/moreInfo/:title', 'GetAnimeServers': '/api/v2/getAnimeServers/:id', - 'Search': '/api/v2/search/:title' + 'Search': '/api/v2/search/:title', + 'Images': '/api/v2/images/:query', + 'Videos': '/api/v2/videos/:channelId' } ] }); diff --git a/src/api/routes/index.js b/src/api/routes/index.js index 3e97c6a..f83fba8 100644 --- a/src/api/routes/index.js +++ b/src/api/routes/index.js @@ -2,9 +2,11 @@ const express = require('express'); const router = express.Router(); const api = require('../api'); +const { BASE_KUDASAI, BASE_PALOMITRON, BASE_RAMENPARADOS } = require('../urls'); + router.get('/schedule/:day' , (req, res) =>{ - let day = req.params.day; + let day = {current: req.params.day} api.schedule(day) .then(day =>{ @@ -62,7 +64,13 @@ router.get('/anitakume' , (req, res) =>{ router.get('/news' , (req, res) =>{ - api.getNews() + let pagesRss = [ + { url: BASE_KUDASAI, author: 'Kudasai', content: 'content_encoded' }, + { url: BASE_PALOMITRON, author: 'Palomitron', content: 'description' }, + { url: BASE_RAMENPARADOS, author: 'Ramen para dos', content: 'content' } + ]; + + api.getNews(pagesRss) .then(news =>{ res.status(200).json({ news @@ -104,10 +112,11 @@ router.get('/lastEpisodes' , (req, res) =>{ router.get('/movies/:type/:page' , (req, res) =>{ - let type = req.params.type; + let type = {url: 'Movies', prop: 'movies'} + let subType = req.params.type; let page = req.params.page; - api.getMovies(type, page) + api.getSpecials(type, subType, page) .then(movies =>{ res.status(200).json({ movies @@ -120,10 +129,11 @@ router.get('/movies/:type/:page' , (req, res) =>{ router.get('/ovas/:type/:page' , (req, res) =>{ - let type = req.params.type; + let type = {url: 'Ova', prop: 'ova'} + let subType = req.params.type; let page = req.params.page; - api.getOvas(type, page) + api.getSpecials(type, subType, page) .then(ovas =>{ res.status(200).json({ ovas @@ -136,10 +146,11 @@ router.get('/ovas/:type/:page' , (req, res) =>{ router.get('/specials/:type/:page' , (req, res) =>{ - let type = req.params.type; + let type = {url: 'Special', prop: 'special'} + let subType = req.params.type; let page = req.params.page; - api.getSpecials(type, page) + api.getSpecials(type, subType, page) .then(specials =>{ res.status(200).json({ specials @@ -152,10 +163,11 @@ router.get('/specials/:type/:page' , (req, res) =>{ router.get('/tv/:type/:page' , (req, res) =>{ - let type = req.params.type; + let type = {url: 'Tv', prop: 'tv'} + let subType = req.params.type; let page = req.params.page; - api.getSpecials(type, page) + api.getSpecials(type, subType, page) .then(tv =>{ res.status(200).json({ tv @@ -171,26 +183,10 @@ router.get('/moreInfo/:title' , (req, res) =>{ let title = req.params.title; api.getMoreInfo(title) - .then(body =>{ - - const data = JSON.stringify(body); - const myEscapedJSONString = data - .replace(/\\n/g, "\\n") - .replace(/\\'/g, "\\'") - .replace(/\\"/g, '\\"') - .replace(/\\&/g, "\\&") - .replace(/\\r/g, "\\r") - .replace(/\\t/g, "\\t") - .replace(/\\b/g, "\\b") - .replace(/\\f/g, "\\f"); - - const info = JSON.parse(myEscapedJSONString) - - if (info.length > 0) { - res.status(200).json({ - info - }); - } else { res.status(400) } + .then(info =>{ + res.status(200).json({ + info + }); }).catch((err) =>{ console.error(err); }); @@ -227,5 +223,34 @@ router.get('/search/:title' , (req, res) =>{ }); +router.get('/images/:query' , (req, res) =>{ + + let query = { title: req.params.query, count: '51', type: 'images', safesearch: '1', country: 'es_ES', uiv: '4' }; + + api.getImages(query) + .then(images =>{ + res.status(200).json({ + images + }); + }).catch((err) =>{ + console.error(err); + }); + +}); + +router.get('/videos/:channelId' , (req, res) =>{ + + let channelId = { id: req.params.channelId, part: 'snippet,id', order: 'date', maxResults: '50', prop: 'items' }; + + api.getYoutubeVideos(channelId) + .then(videos =>{ + res.status(200).json({ + videos + }); + }).catch((err) =>{ + console.error(err); + }); + +}); module.exports = router; diff --git a/src/api/urls.js b/src/api/urls.js index 8b897b5..a3314ab 100644 --- a/src/api/urls.js +++ b/src/api/urls.js @@ -1,11 +1,13 @@ module.exports = { BASE_ANIMEFLV: 'https://animeflv.net/', BASE_ANIMEFLV_JELU: 'https://aruppi.jeluchu.xyz/apis/animeflv/v1/', + BASE_YOUTUBE: 'https://aruppi.jeluchu.xyz/apis/youtube/v3/search?channelId=', BASE_JIKAN: 'https://aruppi.jeluchu.xyz/apis/jikan/v3/', BASE_IVOOX: 'https://www.ivoox.com/podcast-anitakume_fg_f1660716_filtro_1.xml', BASE_KUDASAI: 'https://somoskudasai.com/feed/', BASE_PALOMITRON: 'https://elpalomitron.com/category/animemanga/feed/', BASE_RAMENPARADOS: 'https://ramenparados.com/category/noticias/anime/feed/', SEARCH_URL: 'https://animeflv.net/browse?q=', - BASE_EPISODE_IMG_URL: 'https://cdn.animeflv.net/screenshots/' + BASE_EPISODE_IMG_URL: 'https://cdn.animeflv.net/screenshots/', + BASE_QWANT: 'https://api.qwant.com/search/images?' }; \ No newline at end of file diff --git a/src/utils/index.js b/src/utils/index.js index 0db4d1b..b2a8c09 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -6,11 +6,11 @@ const { BASE_ANIMEFLV, BASE_JIKAN, BASE_EPISODE_IMG_URL, SEARCH_URL } = require('../api/urls'); -const animeflvInfo = async(id) =>{ +const animeflvInfo = async (id, index) =>{ try{ + const res = await cloudscraper(`${BASE_ANIMEFLV}anime/${id}`); - const body = await res; - const $ = cheerio.load(body); + const $ = cheerio.load(res); const scripts = $('script'); const anime_info_ids = []; const anime_eps_data = []; @@ -18,7 +18,6 @@ const animeflvInfo = async(id) =>{ const genres = []; let listByEps; - let animeTitle = $('body div.Wrapper div.Body div div.Ficha.fchlt div.Container h2.Title').text(); let poster = `${BASE_ANIMEFLV}` + $('body div div div div div aside div.AnimeCover div.Image figure img').attr('src') const banner = poster.replace('covers' , 'banners').trim(); let synopsis = $('body div div div div div main section div.Description p').text().trim(); @@ -28,7 +27,6 @@ const animeflvInfo = async(id) =>{ animeExtraInfo.push({ - title: animeTitle, poster: poster, banner: banner, synopsis: synopsis, @@ -48,8 +46,8 @@ const animeflvInfo = async(id) =>{ const $script = $(scripts[k]); const contents = $script.html(); if((contents || '').includes('var anime_info = [')) { - let anime_info = contents.split('var anime_info = ')[1].split(';')[0]; - let dat_anime_info = JSON.parse(JSON.stringify(anime_info));//JSON.parse(anime_info); + let anime_info = contents.split('var anime_info = ')[1].split(';\n')[0]; + let dat_anime_info = JSON.parse(anime_info); anime_info_ids.push(dat_anime_info); } if((contents || '').includes('var episodes = [')) { @@ -58,9 +56,10 @@ const animeflvInfo = async(id) =>{ anime_eps_data.push(eps_data); } }); - const AnimeThumbnailsId = anime_info_ids[0].split(',')[0].split('"')[1]; + const AnimeThumbnailsId = index; const animeId = id; - let nextEpisodeDate = anime_info_ids[0].split('"')[7] || null + let nextEpisodeDate = anime_info_ids[0][3] || null; + const amimeTempList = []; for(const [key , value] of Object.entries(anime_eps_data)){ let episode = anime_eps_data[key].map(x => x[0]); @@ -74,7 +73,7 @@ const animeflvInfo = async(id) =>{ let id = data[1]; let imagePreview = `${BASE_EPISODE_IMG_URL}${AnimeThumbnailsId}/${episode}/th_3.jpg` let link = `${id}/${animeId}-${episode}` - // @ts-ignore + animeListEps.push({ episode: episode, id: link, @@ -88,6 +87,7 @@ const animeflvInfo = async(id) =>{ }catch(err){ console.error(err) } + }; const getAnimeCharacters = async(title) =>{ @@ -237,7 +237,7 @@ const animeExtraInfo = async(title) =>{ const imageUrlToBase64 = async(url) => { Buffer.clear - return await base64.encode(url, {string:true}); + return base64.encode(url, {string:true}); }; const search = async() =>{ } @@ -277,13 +277,13 @@ const transformUrlServer = async(urlReal) =>{ for(i = 0; i <= urlReal.length -1; i++){ switch (urlReal[i].server) { - case "amus": // Izanagi + case "amus": res = await cloudscraper(urlReal[i].code.replace("embed","check")); body = await res; urlReal[i].code = JSON.parse(body).file urlReal[i].direct = true break; - case "natsuki": // Natsuki + case "natsuki": res = await cloudscraper(urlReal[i].code.replace("embed","check")); body = await res; urlReal[i].code = JSON.parse(body).file