mirror of
https://github.com/iptv-org/epg
synced 2026-09-09 05:16:51 -04:00
update deps & clean out package.json
This commit is contained in:
Generated
+7
-396
@@ -35,11 +35,10 @@
|
||||
"@types/lodash.uniqby": "^4.7.9",
|
||||
"@types/node": "^25.5.2",
|
||||
"@types/node-cleanup": "^2.1.5",
|
||||
"@types/numeral": "^2.0.5",
|
||||
"@types/pako": "^2.0.4",
|
||||
"@typescript-eslint/eslint-plugin": "^8.58.1",
|
||||
"@typescript-eslint/parser": "^8.58.1",
|
||||
"axios": "^1.14.0",
|
||||
"axios": "^1.15.0",
|
||||
"axios-cookiejar-support": "^6.0.5",
|
||||
"chalk": "^5.6.2",
|
||||
"cheerio": "^1.2.0",
|
||||
@@ -71,14 +70,9 @@
|
||||
"lodash.sortby": "^4.7.0",
|
||||
"lodash.startcase": "^4.4.0",
|
||||
"lodash.uniqby": "^4.7.0",
|
||||
"luxon": "^3.7.2",
|
||||
"mockdate": "^3.0.5",
|
||||
"nedb-promises": "^6.2.3",
|
||||
"node-cleanup": "^2.1.2",
|
||||
"numeral": "^2.0.6",
|
||||
"pako": "^2.1.0",
|
||||
"parse-duration": "^2.1.6",
|
||||
"pdf-parse": "^2.4.5",
|
||||
"pm2": "^6.0.14",
|
||||
"readline": "^1.3.0",
|
||||
"run-script-os": "^1.1.6",
|
||||
@@ -2861,205 +2855,6 @@
|
||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.80.tgz",
|
||||
"integrity": "sha512-DxuT1ClnIPts1kQx8FBmkk4BQDTfI5kIzywAaMjQSXfNnra5UFU9PwurXrl+Je3bJ6BGsp/zmshVVFbCmyI+ww==",
|
||||
"license": "MIT",
|
||||
"workspaces": [
|
||||
"e2e/*"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@napi-rs/canvas-android-arm64": "0.1.80",
|
||||
"@napi-rs/canvas-darwin-arm64": "0.1.80",
|
||||
"@napi-rs/canvas-darwin-x64": "0.1.80",
|
||||
"@napi-rs/canvas-linux-arm-gnueabihf": "0.1.80",
|
||||
"@napi-rs/canvas-linux-arm64-gnu": "0.1.80",
|
||||
"@napi-rs/canvas-linux-arm64-musl": "0.1.80",
|
||||
"@napi-rs/canvas-linux-riscv64-gnu": "0.1.80",
|
||||
"@napi-rs/canvas-linux-x64-gnu": "0.1.80",
|
||||
"@napi-rs/canvas-linux-x64-musl": "0.1.80",
|
||||
"@napi-rs/canvas-win32-x64-msvc": "0.1.80"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-android-arm64": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.80.tgz",
|
||||
"integrity": "sha512-sk7xhN/MoXeuExlggf91pNziBxLPVUqF2CAVnB57KLG/pz7+U5TKG8eXdc3pm0d7Od0WreB6ZKLj37sX9muGOQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"android"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-darwin-arm64": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.80.tgz",
|
||||
"integrity": "sha512-O64APRTXRUiAz0P8gErkfEr3lipLJgM6pjATwavZ22ebhjYl/SUbpgM0xcWPQBNMP1n29afAC/Us5PX1vg+JNQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-darwin-x64": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.80.tgz",
|
||||
"integrity": "sha512-FqqSU7qFce0Cp3pwnTjVkKjjOtxMqRe6lmINxpIZYaZNnVI0H5FtsaraZJ36SiTHNjZlUB69/HhxNDT1Aaa9vA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.80.tgz",
|
||||
"integrity": "sha512-eyWz0ddBDQc7/JbAtY4OtZ5SpK8tR4JsCYEZjCE3dI8pqoWUC8oMwYSBGCYfsx2w47cQgQCgMVRVTFiiO38hHQ==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-linux-arm64-gnu": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.80.tgz",
|
||||
"integrity": "sha512-qwA63t8A86bnxhuA/GwOkK3jvb+XTQaTiVML0vAWoHyoZYTjNs7BzoOONDgTnNtr8/yHrq64XXzUoLqDzU+Uuw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-linux-arm64-musl": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.80.tgz",
|
||||
"integrity": "sha512-1XbCOz/ymhj24lFaIXtWnwv/6eFHXDrjP0jYkc6iHQ9q8oXKzUX1Lc6bu+wuGiLhGh2GS/2JlfORC5ZcXimRcg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"libc": [
|
||||
"musl"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-linux-riscv64-gnu": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.80.tgz",
|
||||
"integrity": "sha512-XTzR125w5ZMs0lJcxRlS1K3P5RaZ9RmUsPtd1uGt+EfDyYMu4c6SEROYsxyatbbu/2+lPe7MPHOO/0a0x7L/gw==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-linux-x64-gnu": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.80.tgz",
|
||||
"integrity": "sha512-BeXAmhKg1kX3UCrJsYbdQd3hIMDH/K6HnP/pG2LuITaXhXBiNdh//TVVVVCBbJzVQaV5gK/4ZOCMrQW9mvuTqA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"libc": [
|
||||
"glibc"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-linux-x64-musl": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.80.tgz",
|
||||
"integrity": "sha512-x0XvZWdHbkgdgucJsRxprX/4o4sEed7qo9rCQA9ugiS9qE2QvP0RIiEugtZhfLH3cyI+jIRFJHV4Fuz+1BHHMg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"libc": [
|
||||
"musl"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/canvas-win32-x64-msvc": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.80.tgz",
|
||||
"integrity": "sha512-Z8jPsM6df5V8B1HrCHB05+bDiCxjE9QA//3YrkKIdVDEwn5RKaqOxCJDRJkl48cJbylcrJbW4HxZbTte8juuPg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
}
|
||||
},
|
||||
"node_modules/@napi-rs/wasm-runtime": {
|
||||
"version": "0.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
|
||||
@@ -4023,12 +3818,6 @@
|
||||
"integrity": "sha512-+82RAk5uYiqiMoEv2fPeh03AL4pB5d3TL+Pf+hz31Mme6ECFI1kRlgmxYjdSlHzDbJ9yLorTnKi4Op5FA54kQQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/numeral": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.5.tgz",
|
||||
"integrity": "sha512-kH8I7OSSwQu9DS9JYdFWbuvhVzvFRoCPCkGxNwoGgaPeDfEPJlcxNvEOypZhQ3XXHsGbfIuYcxcJxKUfJHnRfw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/pako": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.4.tgz",
|
||||
@@ -4902,9 +4691,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.14.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.14.0.tgz",
|
||||
"integrity": "sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==",
|
||||
"version": "1.15.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
|
||||
"integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.11",
|
||||
@@ -9971,15 +9760,6 @@
|
||||
"yallist": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/luxon": {
|
||||
"version": "3.7.2",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz",
|
||||
"integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/make-dir": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
|
||||
@@ -10102,11 +9882,6 @@
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/mockdate": {
|
||||
"version": "3.0.5",
|
||||
"resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz",
|
||||
"integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ=="
|
||||
},
|
||||
"node_modules/module-details-from-path": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz",
|
||||
@@ -10214,11 +9989,6 @@
|
||||
"node": ">= 0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/node-cleanup": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz",
|
||||
"integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw="
|
||||
},
|
||||
"node_modules/node-cron": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/node-cron/-/node-cron-4.2.1.tgz",
|
||||
@@ -10280,14 +10050,6 @@
|
||||
"url": "https://github.com/fb55/nth-check?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/numeral": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz",
|
||||
"integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/object-code": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/object-code/-/object-code-1.3.3.tgz",
|
||||
@@ -10615,38 +10377,6 @@
|
||||
"integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/pdf-parse": {
|
||||
"version": "2.4.5",
|
||||
"resolved": "https://registry.npmjs.org/pdf-parse/-/pdf-parse-2.4.5.tgz",
|
||||
"integrity": "sha512-mHU89HGh7v+4u2ubfnevJ03lmPgQ5WU4CxAVmTSh/sxVTEDYd1er/dKS/A6vg77NX47KTEoihq8jZBLr8Cxuwg==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@napi-rs/canvas": "0.1.80",
|
||||
"pdfjs-dist": "5.4.296"
|
||||
},
|
||||
"bin": {
|
||||
"pdf-parse": "bin/cli.mjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.16.0 <21 || >=22.3.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/mehmet-kozan"
|
||||
}
|
||||
},
|
||||
"node_modules/pdfjs-dist": {
|
||||
"version": "5.4.296",
|
||||
"resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.4.296.tgz",
|
||||
"integrity": "sha512-DlOzet0HO7OEnmUmB6wWGJrrdvbyJKftI1bhMitK7O2N8W2gc757yyYBbINy9IDafXAV9wmKr9t7xsTaNKRG5Q==",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=20.16.0 || >=22.3.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@napi-rs/canvas": "^0.1.80"
|
||||
}
|
||||
},
|
||||
"node_modules/picocolors": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
||||
@@ -14382,83 +14112,6 @@
|
||||
"@jridgewell/sourcemap-codec": "^1.4.14"
|
||||
}
|
||||
},
|
||||
"@napi-rs/canvas": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.80.tgz",
|
||||
"integrity": "sha512-DxuT1ClnIPts1kQx8FBmkk4BQDTfI5kIzywAaMjQSXfNnra5UFU9PwurXrl+Je3bJ6BGsp/zmshVVFbCmyI+ww==",
|
||||
"requires": {
|
||||
"@napi-rs/canvas-android-arm64": "0.1.80",
|
||||
"@napi-rs/canvas-darwin-arm64": "0.1.80",
|
||||
"@napi-rs/canvas-darwin-x64": "0.1.80",
|
||||
"@napi-rs/canvas-linux-arm-gnueabihf": "0.1.80",
|
||||
"@napi-rs/canvas-linux-arm64-gnu": "0.1.80",
|
||||
"@napi-rs/canvas-linux-arm64-musl": "0.1.80",
|
||||
"@napi-rs/canvas-linux-riscv64-gnu": "0.1.80",
|
||||
"@napi-rs/canvas-linux-x64-gnu": "0.1.80",
|
||||
"@napi-rs/canvas-linux-x64-musl": "0.1.80",
|
||||
"@napi-rs/canvas-win32-x64-msvc": "0.1.80"
|
||||
}
|
||||
},
|
||||
"@napi-rs/canvas-android-arm64": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.80.tgz",
|
||||
"integrity": "sha512-sk7xhN/MoXeuExlggf91pNziBxLPVUqF2CAVnB57KLG/pz7+U5TKG8eXdc3pm0d7Od0WreB6ZKLj37sX9muGOQ==",
|
||||
"optional": true
|
||||
},
|
||||
"@napi-rs/canvas-darwin-arm64": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.80.tgz",
|
||||
"integrity": "sha512-O64APRTXRUiAz0P8gErkfEr3lipLJgM6pjATwavZ22ebhjYl/SUbpgM0xcWPQBNMP1n29afAC/Us5PX1vg+JNQ==",
|
||||
"optional": true
|
||||
},
|
||||
"@napi-rs/canvas-darwin-x64": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.80.tgz",
|
||||
"integrity": "sha512-FqqSU7qFce0Cp3pwnTjVkKjjOtxMqRe6lmINxpIZYaZNnVI0H5FtsaraZJ36SiTHNjZlUB69/HhxNDT1Aaa9vA==",
|
||||
"optional": true
|
||||
},
|
||||
"@napi-rs/canvas-linux-arm-gnueabihf": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.80.tgz",
|
||||
"integrity": "sha512-eyWz0ddBDQc7/JbAtY4OtZ5SpK8tR4JsCYEZjCE3dI8pqoWUC8oMwYSBGCYfsx2w47cQgQCgMVRVTFiiO38hHQ==",
|
||||
"optional": true
|
||||
},
|
||||
"@napi-rs/canvas-linux-arm64-gnu": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.80.tgz",
|
||||
"integrity": "sha512-qwA63t8A86bnxhuA/GwOkK3jvb+XTQaTiVML0vAWoHyoZYTjNs7BzoOONDgTnNtr8/yHrq64XXzUoLqDzU+Uuw==",
|
||||
"optional": true
|
||||
},
|
||||
"@napi-rs/canvas-linux-arm64-musl": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.80.tgz",
|
||||
"integrity": "sha512-1XbCOz/ymhj24lFaIXtWnwv/6eFHXDrjP0jYkc6iHQ9q8oXKzUX1Lc6bu+wuGiLhGh2GS/2JlfORC5ZcXimRcg==",
|
||||
"optional": true
|
||||
},
|
||||
"@napi-rs/canvas-linux-riscv64-gnu": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.80.tgz",
|
||||
"integrity": "sha512-XTzR125w5ZMs0lJcxRlS1K3P5RaZ9RmUsPtd1uGt+EfDyYMu4c6SEROYsxyatbbu/2+lPe7MPHOO/0a0x7L/gw==",
|
||||
"optional": true
|
||||
},
|
||||
"@napi-rs/canvas-linux-x64-gnu": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.80.tgz",
|
||||
"integrity": "sha512-BeXAmhKg1kX3UCrJsYbdQd3hIMDH/K6HnP/pG2LuITaXhXBiNdh//TVVVVCBbJzVQaV5gK/4ZOCMrQW9mvuTqA==",
|
||||
"optional": true
|
||||
},
|
||||
"@napi-rs/canvas-linux-x64-musl": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.80.tgz",
|
||||
"integrity": "sha512-x0XvZWdHbkgdgucJsRxprX/4o4sEed7qo9rCQA9ugiS9qE2QvP0RIiEugtZhfLH3cyI+jIRFJHV4Fuz+1BHHMg==",
|
||||
"optional": true
|
||||
},
|
||||
"@napi-rs/canvas-win32-x64-msvc": {
|
||||
"version": "0.1.80",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.80.tgz",
|
||||
"integrity": "sha512-Z8jPsM6df5V8B1HrCHB05+bDiCxjE9QA//3YrkKIdVDEwn5RKaqOxCJDRJkl48cJbylcrJbW4HxZbTte8juuPg==",
|
||||
"optional": true
|
||||
},
|
||||
"@napi-rs/wasm-runtime": {
|
||||
"version": "0.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
|
||||
@@ -15121,11 +14774,6 @@
|
||||
"resolved": "https://registry.npmjs.org/@types/node-cleanup/-/node-cleanup-2.1.5.tgz",
|
||||
"integrity": "sha512-+82RAk5uYiqiMoEv2fPeh03AL4pB5d3TL+Pf+hz31Mme6ECFI1kRlgmxYjdSlHzDbJ9yLorTnKi4Op5FA54kQQ=="
|
||||
},
|
||||
"@types/numeral": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/numeral/-/numeral-2.0.5.tgz",
|
||||
"integrity": "sha512-kH8I7OSSwQu9DS9JYdFWbuvhVzvFRoCPCkGxNwoGgaPeDfEPJlcxNvEOypZhQ3XXHsGbfIuYcxcJxKUfJHnRfw=="
|
||||
},
|
||||
"@types/pako": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.4.tgz",
|
||||
@@ -15604,9 +15252,9 @@
|
||||
}
|
||||
},
|
||||
"axios": {
|
||||
"version": "1.14.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.14.0.tgz",
|
||||
"integrity": "sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==",
|
||||
"version": "1.15.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
|
||||
"integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
|
||||
"requires": {
|
||||
"follow-redirects": "^1.15.11",
|
||||
"form-data": "^4.0.5",
|
||||
@@ -19011,11 +18659,6 @@
|
||||
"yallist": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"luxon": {
|
||||
"version": "3.7.2",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz",
|
||||
"integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew=="
|
||||
},
|
||||
"make-dir": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
|
||||
@@ -19098,11 +18741,6 @@
|
||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
|
||||
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
|
||||
},
|
||||
"mockdate": {
|
||||
"version": "3.0.5",
|
||||
"resolved": "https://registry.npmjs.org/mockdate/-/mockdate-3.0.5.tgz",
|
||||
"integrity": "sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ=="
|
||||
},
|
||||
"module-details-from-path": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz",
|
||||
@@ -19179,11 +18817,6 @@
|
||||
"resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
|
||||
"integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg=="
|
||||
},
|
||||
"node-cleanup": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz",
|
||||
"integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw="
|
||||
},
|
||||
"node-cron": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/node-cron/-/node-cron-4.2.1.tgz",
|
||||
@@ -19225,11 +18858,6 @@
|
||||
"boolbase": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"numeral": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz",
|
||||
"integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA=="
|
||||
},
|
||||
"object-code": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/object-code/-/object-code-1.3.3.tgz",
|
||||
@@ -19461,23 +19089,6 @@
|
||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz",
|
||||
"integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw=="
|
||||
},
|
||||
"pdf-parse": {
|
||||
"version": "2.4.5",
|
||||
"resolved": "https://registry.npmjs.org/pdf-parse/-/pdf-parse-2.4.5.tgz",
|
||||
"integrity": "sha512-mHU89HGh7v+4u2ubfnevJ03lmPgQ5WU4CxAVmTSh/sxVTEDYd1er/dKS/A6vg77NX47KTEoihq8jZBLr8Cxuwg==",
|
||||
"requires": {
|
||||
"@napi-rs/canvas": "0.1.80",
|
||||
"pdfjs-dist": "5.4.296"
|
||||
}
|
||||
},
|
||||
"pdfjs-dist": {
|
||||
"version": "5.4.296",
|
||||
"resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.4.296.tgz",
|
||||
"integrity": "sha512-DlOzet0HO7OEnmUmB6wWGJrrdvbyJKftI1bhMitK7O2N8W2gc757yyYBbINy9IDafXAV9wmKr9t7xsTaNKRG5Q==",
|
||||
"requires": {
|
||||
"@napi-rs/canvas": "^0.1.80"
|
||||
}
|
||||
},
|
||||
"picocolors": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
||||
|
||||
+1
-7
@@ -65,11 +65,10 @@
|
||||
"@types/lodash.uniqby": "^4.7.9",
|
||||
"@types/node": "^25.5.2",
|
||||
"@types/node-cleanup": "^2.1.5",
|
||||
"@types/numeral": "^2.0.5",
|
||||
"@types/pako": "^2.0.4",
|
||||
"@typescript-eslint/eslint-plugin": "^8.58.1",
|
||||
"@typescript-eslint/parser": "^8.58.1",
|
||||
"axios": "^1.14.0",
|
||||
"axios": "^1.15.0",
|
||||
"axios-cookiejar-support": "^6.0.5",
|
||||
"chalk": "^5.6.2",
|
||||
"cheerio": "^1.2.0",
|
||||
@@ -101,14 +100,9 @@
|
||||
"lodash.sortby": "^4.7.0",
|
||||
"lodash.startcase": "^4.4.0",
|
||||
"lodash.uniqby": "^4.7.0",
|
||||
"luxon": "^3.7.2",
|
||||
"mockdate": "^3.0.5",
|
||||
"nedb-promises": "^6.2.3",
|
||||
"node-cleanup": "^2.1.2",
|
||||
"numeral": "^2.0.6",
|
||||
"pako": "^2.1.0",
|
||||
"parse-duration": "^2.1.6",
|
||||
"pdf-parse": "^2.4.5",
|
||||
"pm2": "^6.0.14",
|
||||
"readline": "^1.3.0",
|
||||
"run-script-os": "^1.1.6",
|
||||
|
||||
@@ -5,7 +5,6 @@ import { select, input } from '@inquirer/prompts'
|
||||
import { generateChannelsXML } from '../../core'
|
||||
import { Storage } from '@freearhey/storage-js'
|
||||
import { Channel } from '../../models'
|
||||
import nodeCleanup from 'node-cleanup'
|
||||
import * as sdk from '@iptv-org/sdk'
|
||||
import { Command } from 'commander'
|
||||
import readline from 'readline'
|
||||
@@ -42,8 +41,14 @@ const storage = new Storage()
|
||||
let channelsFromXML = new Collection<Channel>()
|
||||
|
||||
main(filepath)
|
||||
nodeCleanup(() => {
|
||||
process.on('SIGINT', () => {
|
||||
save(filepath, channelsFromXML)
|
||||
process.exit(0)
|
||||
})
|
||||
|
||||
process.on('SIGTERM', () => {
|
||||
save(filepath, channelsFromXML)
|
||||
process.exit(0)
|
||||
})
|
||||
|
||||
export default async function main(filepath: string) {
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
const cheerio = require('cheerio')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'andorradifusio.ad',
|
||||
@@ -15,12 +19,12 @@ module.exports = {
|
||||
let start = parseStart(item, date)
|
||||
if (prev) {
|
||||
if (start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
start = start.add(1, 'd')
|
||||
date = date.add(1, 'd')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.plus({ hours: 1 })
|
||||
const stop = start.add(1, 'h')
|
||||
programs.push({
|
||||
title: item.title,
|
||||
start,
|
||||
@@ -35,12 +39,12 @@ module.exports = {
|
||||
function parseStart(item, date) {
|
||||
const dateString = `${date.format('MM/DD/YYYY')} ${item.time}`
|
||||
|
||||
return DateTime.fromFormat(dateString, 'MM/dd/yyyy HH:mm', { zone: 'Europe/Madrid' }).toUTC()
|
||||
return dayjs.tz(dateString, 'MM/DD/YYYY HH:mm', 'Europe/Madrid').utc()
|
||||
}
|
||||
|
||||
function parseItems(content, date) {
|
||||
const $ = cheerio.load(content)
|
||||
const day = DateTime.fromMillis(date.valueOf()).setLocale('ca').toFormat('dd LLLL').toLowerCase()
|
||||
const day = dayjs(date.valueOf()).locale('ca').format('DD MMMM').toLowerCase()
|
||||
const column = $('.programacio-dia > h3 > .dia')
|
||||
.filter((i, el) => $(el).text() === day.slice(0, 6) + '.')
|
||||
.first()
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
const cheerio = require('cheerio')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'arianatelevision.com',
|
||||
@@ -13,12 +17,12 @@ module.exports = {
|
||||
let start = parseStart(item, date)
|
||||
if (prev) {
|
||||
if (start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
start = start.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.plus({ minutes: 30 })
|
||||
const stop = start.add(30, 'minute')
|
||||
programs.push({
|
||||
title: item.title,
|
||||
start,
|
||||
@@ -33,7 +37,7 @@ module.exports = {
|
||||
function parseStart(item, date) {
|
||||
const time = `${date.format('YYYY-MM-DD')} ${item.start}`
|
||||
|
||||
return DateTime.fromFormat(time, 'yyyy-MM-dd H:mm', { zone: 'Asia/Kabul' }).toUTC()
|
||||
return dayjs.tz(time, 'YYYY-MM-DD H:mm', 'Asia/Kabul').utc()
|
||||
}
|
||||
|
||||
function parseItems(content, date) {
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
const cheerio = require('cheerio')
|
||||
const axios = require('axios')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'awilime.com',
|
||||
@@ -25,7 +29,7 @@ module.exports = {
|
||||
if (prev) {
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.plus({ minute: 30 })
|
||||
const stop = start.add(30, 'minute')
|
||||
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
@@ -87,7 +91,7 @@ function parseStart($item, date) {
|
||||
if (!time || !/^\d/.test(time)) return null
|
||||
time = `${date.format('YYYY-MM-DD')} ${time}`
|
||||
|
||||
return DateTime.fromFormat(time, 'yyyy-MM-dd HH:mm', { zone: 'Europe/Budapest' }).toUTC()
|
||||
return dayjs.tz(time, 'YYYY-MM-DD HH:mm', 'Europe/Budapest').utc()
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
const axios = require('axios')
|
||||
const dayjs = require('dayjs')
|
||||
const cheerio = require('cheerio')
|
||||
const { DateTime } = require('luxon')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'bein.com',
|
||||
@@ -24,7 +27,7 @@ module.exports = {
|
||||
parser: function ({ content, channel, date }) {
|
||||
let programs = []
|
||||
const items = parseItems(content, channel)
|
||||
date = DateTime.fromMillis(date.valueOf()).minus({ days: 1 })
|
||||
date = dayjs(date.valueOf()).subtract(1, 'day')
|
||||
items.forEach(item => {
|
||||
const $item = cheerio.load(item)
|
||||
const title = parseTitle($item)
|
||||
@@ -34,14 +37,14 @@ module.exports = {
|
||||
let start = parseTime($item, date)
|
||||
if (prev) {
|
||||
if (start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
date = date.plus({ days: 1 })
|
||||
start = start.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
let stop = parseTime($item, start)
|
||||
if (stop < start) {
|
||||
stop = stop.plus({ days: 1 })
|
||||
stop = stop.add(1, 'day')
|
||||
}
|
||||
programs.push({
|
||||
title,
|
||||
@@ -97,9 +100,9 @@ function parseTime($item, date) {
|
||||
.text()
|
||||
.match(/^(\d{2}:\d{2})/) || [null, null]
|
||||
if (!time) return null
|
||||
time = `${date.toFormat('yyyy-MM-dd')} ${time}`
|
||||
time = `${date.format('YYYY-MM-DD')} ${time}`
|
||||
|
||||
return DateTime.fromFormat(time, 'yyyy-MM-dd HH:mm', { zone: 'Asia/Qatar' }).toUTC()
|
||||
return dayjs.tz(time, 'YYYY-MM-DD HH:mm', 'Asia/Qatar').utc()
|
||||
}
|
||||
|
||||
function parseItems(content, channel) {
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
const cheerio = require('cheerio')
|
||||
const axios = require('axios')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'clickthecity.com',
|
||||
@@ -17,7 +21,7 @@ module.exports = {
|
||||
const params = new URLSearchParams()
|
||||
params.append(
|
||||
'optDate',
|
||||
DateTime.fromMillis(date.valueOf()).setZone('Asia/Manila').toFormat('yyyy-MM-dd')
|
||||
dayjs(date.valueOf()).tz('Asia/Manila').format('YYYY-MM-DD')
|
||||
)
|
||||
params.append('optTime', '00:00:00')
|
||||
|
||||
@@ -33,7 +37,7 @@ module.exports = {
|
||||
let stop = parseStop($item, date)
|
||||
if (!start || !stop) return
|
||||
if (start > stop) {
|
||||
stop = stop.plus({ days: 1 })
|
||||
stop = stop.add(1, 'day')
|
||||
}
|
||||
|
||||
programs.push({
|
||||
@@ -77,7 +81,7 @@ function parseStart($item, date) {
|
||||
if (!time) return null
|
||||
time = `${date.format('YYYY-MM-DD')} ${time.replace('%3A', ':').replace('+', ' ')}`
|
||||
|
||||
return DateTime.fromFormat(time, 'yyyy-MM-dd h:mm a', { zone: 'Asia/Manila' }).toUTC()
|
||||
return dayjs.tz(time, 'YYYY-MM-DD h:mm A', 'Asia/Manila').utc()
|
||||
}
|
||||
|
||||
function parseStop($item, date) {
|
||||
@@ -86,7 +90,7 @@ function parseStop($item, date) {
|
||||
if (!time) return null
|
||||
time = `${date.format('YYYY-MM-DD')} ${time.replace('%3A', ':').replace('+', ' ')}`
|
||||
|
||||
return DateTime.fromFormat(time, 'yyyy-MM-dd h:mm a', { zone: 'Asia/Manila' }).toUTC()
|
||||
return dayjs.tz(time, 'YYYY-MM-DD h:mm A', 'Asia/Manila').utc()
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
const axios = require('axios')
|
||||
const cheerio = require('cheerio')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'entertainment.ie',
|
||||
@@ -19,10 +23,10 @@ module.exports = {
|
||||
let start = parseStart($item, date)
|
||||
if (!start) return
|
||||
if (prev && start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
start = start.add(1, 'day')
|
||||
}
|
||||
const duration = parseDuration($item)
|
||||
const stop = start.plus({ minutes: duration })
|
||||
const stop = start.add(duration, 'minute')
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
description: parseDescription($item),
|
||||
@@ -77,9 +81,7 @@ function parseStart($item, date) {
|
||||
let [, time] = d ? d.split(', ') : [null, null]
|
||||
|
||||
return time
|
||||
? DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${time}`, 'yyyy-MM-dd HH:mm', {
|
||||
zone: 'UTC'
|
||||
}).toUTC()
|
||||
? dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'UTC').utc()
|
||||
: null
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,11 @@ const axios = require('axios')
|
||||
const cheerio = require('cheerio')
|
||||
const url = require('url')
|
||||
const path = require('path')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'gatotv.com',
|
||||
@@ -13,18 +17,18 @@ module.exports = {
|
||||
parser({ content, date }) {
|
||||
let programs = []
|
||||
const items = parseItems(content)
|
||||
date = date.subtract(1, 'd')
|
||||
date = date.subtract(1, 'day')
|
||||
items.forEach((item, i) => {
|
||||
const $item = cheerio.load(item)
|
||||
let start = parseStart($item, date)
|
||||
if (i === 0 && start.hour >= 5) {
|
||||
start = start.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
if (i === 0 && start.hour() >= 5) {
|
||||
start = start.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
let stop = parseStop($item, date)
|
||||
if (stop < start) {
|
||||
stop = stop.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
stop = stop.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
|
||||
programs.push({
|
||||
@@ -78,17 +82,13 @@ function parseImage($item) {
|
||||
function parseStart($item, date) {
|
||||
const time = $item('td:nth-child(1) > div > time').attr('datetime')
|
||||
|
||||
return DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${time}`, 'yyyy-MM-dd HH:mm', {
|
||||
zone: 'EST'
|
||||
}).toUTC()
|
||||
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'EST').utc()
|
||||
}
|
||||
|
||||
function parseStop($item, date) {
|
||||
const time = $item('td:nth-child(2) > div > time').attr('datetime')
|
||||
|
||||
return DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${time}`, 'yyyy-MM-dd HH:mm', {
|
||||
zone: 'EST'
|
||||
}).toUTC()
|
||||
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'EST').utc()
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
|
||||
@@ -29,7 +29,7 @@ it('can parse response', () => {
|
||||
start: '2023-06-23T07:14:32.000Z',
|
||||
stop: '2023-06-23T09:09:36.000Z',
|
||||
title: 'Killers Within',
|
||||
date: '20180101',
|
||||
date: '2018-01-01T00:00:00.000Z',
|
||||
description:
|
||||
'With her son being held captive by a criminal gang, police officer Amanda Doyle, together with her ex-husband and three unlikely allies, takes part in a desperate plot to hold a wealthy banker and his family to ransom. But this is no ordinary family.',
|
||||
icon: 'https://provider-static.plex.tv/epg/images/thumbnails/darkmatter-tv-fallback.jpg',
|
||||
|
||||
@@ -3,11 +3,13 @@ const fs = require('fs')
|
||||
const path = require('path')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
dayjs.extend(customParseFormat)
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
jest.useFakeTimers().setSystemTime(new Date('2025-01-15'))
|
||||
jest.useFakeTimers().setSystemTime(dayjs.utc('2025-01-15').valueOf())
|
||||
|
||||
const date = dayjs.utc('2025-01-17', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
const cheerio = require('cheerio')
|
||||
const iconv = require('iconv-lite')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'm.tv.sms.cz',
|
||||
@@ -19,12 +23,12 @@ module.exports = {
|
||||
let start = parseStart($item, date)
|
||||
if (prev) {
|
||||
if (start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
start = start.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.plus({ hours: 1 })
|
||||
const stop = start.add(1, 'hour')
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
description: parseDescription($item),
|
||||
@@ -65,7 +69,7 @@ function parseStart($item, date) {
|
||||
const timeString = $item('div > span').text().trim()
|
||||
const dateString = `${date.format('MM/DD/YYYY')} ${timeString}`
|
||||
|
||||
return DateTime.fromFormat(dateString, 'MM/dd/yyyy HH.mm', { zone: 'Europe/Prague' }).toUTC()
|
||||
return dayjs.tz(dateString, 'MM/DD/YYYY HH.mm', 'Europe/Prague').utc()
|
||||
}
|
||||
|
||||
function parseDescription($item) {
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'meo.pt',
|
||||
@@ -33,7 +37,7 @@ module.exports = {
|
||||
const start = parseStart(item)
|
||||
let stop = parseStop(item)
|
||||
if (stop < start) {
|
||||
stop = stop.plus({ days: 1 })
|
||||
stop = stop.add(1, 'day')
|
||||
}
|
||||
|
||||
let description = ''
|
||||
@@ -94,15 +98,11 @@ module.exports = {
|
||||
}
|
||||
|
||||
function parseStart(item) {
|
||||
return DateTime.fromFormat(`${item.date} ${item.timeIni}`, 'd-M-yyyy HH:mm', {
|
||||
zone: 'Europe/Lisbon'
|
||||
}).toUTC()
|
||||
return dayjs.tz(`${item.date} ${item.timeIni}`, 'D-M-YYYY HH:mm', 'Europe/Lisbon').utc()
|
||||
}
|
||||
|
||||
function parseStop(item) {
|
||||
return DateTime.fromFormat(`${item.date} ${item.timeEnd}`, 'd-M-yyyy HH:mm', {
|
||||
zone: 'Europe/Lisbon'
|
||||
}).toUTC()
|
||||
return dayjs.tz(`${item.date} ${item.timeEnd}`, 'D-M-YYYY HH:mm', 'Europe/Lisbon').utc()
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
const cheerio = require('cheerio')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
delay: 5000,
|
||||
site: 'programtv.onet.pl',
|
||||
days: 2,
|
||||
url: function ({ date, channel }) {
|
||||
const currDate = DateTime.now().toUTC().startOf('day')
|
||||
const currDate = dayjs().utc().startOf('day')
|
||||
const day = date.diff(currDate, 'd')
|
||||
|
||||
return `https://programtv.onet.pl/program-tv/${channel.site_id}?dzien=${day}`
|
||||
@@ -20,12 +24,12 @@ module.exports = {
|
||||
let start = parseStart($item, date)
|
||||
if (prev) {
|
||||
if (start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
start = start.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.plus({ hours: 1 })
|
||||
const stop = start.add(1, 'hour')
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
description: parseDescription($item),
|
||||
@@ -67,7 +71,7 @@ function parseStart($item, date) {
|
||||
const timeString = $item('.hours > .hour').text()
|
||||
const dateString = `${date.format('MM/DD/YYYY')} ${timeString}`
|
||||
|
||||
return DateTime.fromFormat(dateString, 'MM/dd/yyyy HH:mm', { zone: 'Europe/Warsaw' }).toUTC()
|
||||
return dayjs.tz(dateString, 'MM/DD/YYYY HH:mm', 'Europe/Warsaw').utc()
|
||||
}
|
||||
|
||||
function parseCategory($item) {
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
const MockDate = require('mockdate')
|
||||
const { parser, url } = require('./programtv.onet.pl.config.js')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
@@ -14,20 +13,26 @@ const channel = {
|
||||
xmltv_id: '13thStreet.de'
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
jest.useFakeTimers()
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
jest.useRealTimers()
|
||||
})
|
||||
|
||||
it('can generate valid url', () => {
|
||||
MockDate.set(dayjs.utc('2021-11-24', 'YYYY-MM-DD').startOf('d'))
|
||||
jest.setSystemTime(dayjs.utc('2021-11-24', 'YYYY-MM-DD').startOf('d').valueOf())
|
||||
expect(url({ channel, date })).toBe(
|
||||
'https://programtv.onet.pl/program-tv/13th-street-250?dzien=0'
|
||||
)
|
||||
MockDate.reset()
|
||||
})
|
||||
|
||||
it('can generate valid url for next day', () => {
|
||||
MockDate.set(dayjs.utc('2021-11-23', 'YYYY-MM-DD').startOf('d'))
|
||||
jest.setSystemTime(dayjs.utc('2021-11-23', 'YYYY-MM-DD').startOf('d').valueOf())
|
||||
expect(url({ channel, date })).toBe(
|
||||
'https://programtv.onet.pl/program-tv/13th-street-250?dzien=1'
|
||||
)
|
||||
MockDate.reset()
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
const cheerio = require('cheerio')
|
||||
const axios = require('axios')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'superguidatv.it',
|
||||
days: 3,
|
||||
url({ channel, date }) {
|
||||
let diff = date.diff(DateTime.now().toUTC().startOf('day'), 'd')
|
||||
let diff = date.diff(dayjs().utc().startOf('day'), 'd')
|
||||
let day = {
|
||||
0: 'oggi',
|
||||
1: 'domani',
|
||||
@@ -24,12 +28,12 @@ module.exports = {
|
||||
let start = parseStart($item, date)
|
||||
if (prev) {
|
||||
if (start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
start = start.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.plus({ minutes: 30 })
|
||||
const stop = start.add(30, 'minute')
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
category: parseCategory($item),
|
||||
@@ -92,9 +96,7 @@ function parseStart($item, date) {
|
||||
.text()
|
||||
.trim()
|
||||
|
||||
return DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${hours}`, 'yyyy-MM-dd HH:mm', {
|
||||
zone: 'Europe/Rome'
|
||||
}).toUTC()
|
||||
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${hours}`, 'YYYY-MM-DD HH:mm', 'Europe/Rome').utc()
|
||||
}
|
||||
|
||||
function parseTitle($item) {
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
const cheerio = require('cheerio')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'tivu.tv',
|
||||
@@ -10,7 +14,7 @@ module.exports = {
|
||||
}
|
||||
},
|
||||
url({ date }) {
|
||||
const diff = date.diff(DateTime.now().toUTC().startOf('day'), 'd')
|
||||
const diff = date.diff(dayjs().utc().startOf('day'), 'd')
|
||||
|
||||
return `https://www.tivu.tv/epg_ajax_sat.aspx?d=${diff}`
|
||||
},
|
||||
@@ -24,12 +28,12 @@ module.exports = {
|
||||
if (!start) return
|
||||
if (prev) {
|
||||
if (start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
start = start.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.plus({ minutes: 30 })
|
||||
const stop = start.add(30, 'minute')
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
start,
|
||||
@@ -76,9 +80,7 @@ function parseStart($item, date) {
|
||||
const [, , time] = $item('a').html().split('<br>')
|
||||
if (!time) return null
|
||||
|
||||
return DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${time}`, 'yyyy-MM-dd HH:mm', {
|
||||
zone: 'Europe/Rome'
|
||||
}).toUTC()
|
||||
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Europe/Rome').utc()
|
||||
}
|
||||
|
||||
function parseItems(content, channel) {
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'turksatkablo.com.tr',
|
||||
@@ -21,13 +25,13 @@ module.exports = {
|
||||
const prev = programs[programs.length - 1]
|
||||
let start = parseStart(item, date)
|
||||
if (prev && start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
start = start.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
let stop = parseStop(item, date)
|
||||
if (prev && stop < start) {
|
||||
stop = stop.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
stop = stop.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
programs.push({
|
||||
title: item.b,
|
||||
@@ -65,13 +69,13 @@ module.exports = {
|
||||
function parseStart(item, date) {
|
||||
const time = `${date.format('YYYY-MM-DD')} ${item.c}`
|
||||
|
||||
return DateTime.fromFormat(time, 'yyyy-MM-dd HH:mm', { zone: 'Europe/Istanbul' }).toUTC()
|
||||
return dayjs.tz(time, 'YYYY-MM-DD HH:mm', 'Europe/Istanbul').utc()
|
||||
}
|
||||
|
||||
function parseStop(item, date) {
|
||||
const time = `${date.format('YYYY-MM-DD')} ${item.d}`
|
||||
|
||||
return DateTime.fromFormat(time, 'yyyy-MM-dd HH:mm', { zone: 'Europe/Istanbul' }).toUTC()
|
||||
return dayjs.tz(time, 'YYYY-MM-DD HH:mm', 'Europe/Istanbul').utc()
|
||||
}
|
||||
|
||||
function parseItems(content, channel) {
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
const cheerio = require('cheerio')
|
||||
const axios = require('axios')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
const API_ENDPOINT = 'https://tv-programme.telecablesat.fr/chaine'
|
||||
const headers = {
|
||||
@@ -41,12 +45,12 @@ module.exports = {
|
||||
let start = parseStart($item, date)
|
||||
if (prev) {
|
||||
if (start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
start = start.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.plus({ hours: 1 })
|
||||
const stop = start.add(1, 'hour')
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
description: parseDescription($item),
|
||||
@@ -87,9 +91,7 @@ function parseStart($item, date) {
|
||||
const timeString = $item('.schedule-hour').text()
|
||||
if (!timeString) return null
|
||||
|
||||
return DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${timeString}`, 'yyyy-MM-dd HH:mm', {
|
||||
zone: 'Europe/Paris'
|
||||
}).toUTC()
|
||||
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${timeString}`, 'YYYY-MM-DD HH:mm', 'Europe/Paris').utc()
|
||||
}
|
||||
|
||||
function parseImage($item) {
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const axios = require('axios')
|
||||
const uniqBy = require('lodash.uniqby')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'tv.mail.ru',
|
||||
@@ -19,12 +23,12 @@ module.exports = {
|
||||
let start = parseStart(item, date)
|
||||
if (prev) {
|
||||
if (start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
start = start.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.plus({ hours: 1 })
|
||||
const stop = start.add(1, 'hour')
|
||||
programs.push({
|
||||
title: item.name,
|
||||
category: parseCategory(item),
|
||||
@@ -84,7 +88,7 @@ async function getTotalPageCount(region) {
|
||||
function parseStart(item, date) {
|
||||
const dateString = `${date.format('YYYY-MM-DD')} ${item.start}`
|
||||
|
||||
return DateTime.fromFormat(dateString, 'yyyy-MM-dd HH:mm', { zone: 'Europe/Moscow' }).toUTC()
|
||||
return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', 'Europe/Moscow').utc()
|
||||
}
|
||||
|
||||
function parseCategory(item) {
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
const cheerio = require('cheerio')
|
||||
const axios = require('axios')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'tvgids.nl',
|
||||
days: 2,
|
||||
url: function ({ date, channel }) {
|
||||
const path =
|
||||
DateTime.utc().day === DateTime.fromMillis(date.valueOf()).day
|
||||
dayjs().utc().day() === dayjs(date).utc().day()
|
||||
? ''
|
||||
: `${date.format('DD-MM-YYYY')}/`
|
||||
|
||||
@@ -23,12 +27,12 @@ module.exports = {
|
||||
let start = parseStart($item, date)
|
||||
if (prev) {
|
||||
if (start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
start = start.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.plus({ minutes: 30 })
|
||||
const stop = start.add(30, 'minute')
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
description: parseDescription($item),
|
||||
@@ -75,9 +79,7 @@ function parseImage($item) {
|
||||
function parseStart($item, date) {
|
||||
const time = $item('.program__starttime').clone().children().remove().end().text().trim()
|
||||
|
||||
return DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${time}`, 'yyyy-MM-dd HH:mm', {
|
||||
zone: 'Europe/Amsterdam'
|
||||
}).toUTC()
|
||||
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Europe/Amsterdam').utc()
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
|
||||
@@ -14,7 +14,7 @@ const channel = {
|
||||
}
|
||||
|
||||
it('can generate valid url', () => {
|
||||
jest.useFakeTimers().setSystemTime(new Date('2025-01-17'))
|
||||
jest.useFakeTimers().setSystemTime(dayjs('2025-01-17').valueOf())
|
||||
|
||||
expect(url({ date, channel })).toBe('https://www.tvgids.nl/gids/19-01-2025/npo1')
|
||||
})
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
const cheerio = require('cheerio')
|
||||
const axios = require('axios')
|
||||
const { DateTime } = require('luxon')
|
||||
const uniqBy = require('lodash.uniqby')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'tvhebdo.com',
|
||||
@@ -20,11 +24,11 @@ module.exports = {
|
||||
let start = parseStart($item, date)
|
||||
if (prev) {
|
||||
if (start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
start = start.add(1, 'day')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
let stop = start.plus({ minutes: 30 })
|
||||
let stop = start.add(30, 'minute')
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
start,
|
||||
@@ -83,9 +87,7 @@ function parseTitle($item) {
|
||||
function parseStart($item, date) {
|
||||
const time = $item('.heure').text()
|
||||
|
||||
return DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${time}`, 'yyyy-MM-dd HH:mm', {
|
||||
zone: 'America/Toronto'
|
||||
}).toUTC()
|
||||
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'America/Toronto').utc()
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
const cheerio = require('cheerio')
|
||||
const axios = require('axios')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'tvinsider.com',
|
||||
@@ -20,7 +24,7 @@ module.exports = {
|
||||
if (prev) {
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.plus({ minute: 30 })
|
||||
const stop = start.add(30, 'minute')
|
||||
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
@@ -114,7 +118,7 @@ function parseStart($item, date) {
|
||||
let time = $item('time').text().trim()
|
||||
time = `${date.format('YYYY-MM-DD')} ${time}`
|
||||
|
||||
return DateTime.fromFormat(time, 'yyyy-MM-dd t', { zone: 'America/New_York' }).toUTC()
|
||||
return dayjs.tz(time, 'YYYY-MM-DD h:mm A', 'EST').utc()
|
||||
}
|
||||
|
||||
function parseItems(content, date) {
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
const cheerio = require('cheerio')
|
||||
const axios = require('axios')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'tvmustra.hu',
|
||||
@@ -18,12 +22,12 @@ module.exports = {
|
||||
if (!start) return
|
||||
if (prev) {
|
||||
if (start < prev.start) {
|
||||
start = start.plus({ days: 1 })
|
||||
date = date.add(1, 'd')
|
||||
start = start.add(1, 'day')
|
||||
date = date.add(1, 'day')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const stop = start.plus({ minute: 30 })
|
||||
const stop = start.add(30, 'minute')
|
||||
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
@@ -66,9 +70,7 @@ function parseTitle($item) {
|
||||
function parseStart($item, date) {
|
||||
const time = $item('.musor_lista_idopont, .musor_lista_idopont2').text().trim()
|
||||
|
||||
return DateTime.fromFormat(`${date.format('YYYY-MM-DD')} ${time}`, 'yyyy-MM-dd HH:mm', {
|
||||
zone: 'Europe/Budapest'
|
||||
}).toUTC()
|
||||
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Europe/Budapest').utc()
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
const { DateTime } = require('luxon')
|
||||
const axios = require('axios')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
const API_ENDPOINT = 'https://cdn.pt.vtv.vodafone.com/epg'
|
||||
|
||||
@@ -18,25 +22,25 @@ module.exports = {
|
||||
headers
|
||||
},
|
||||
url: function ({ channel, date }) {
|
||||
const datetime = DateTime.fromJSDate(date.toDate()).setZone('Europe/Lisbon')
|
||||
const formattedMonth = datetime.month < 10 ? `0${datetime.month}` : datetime.month
|
||||
const formattedDay = datetime.day < 10 ? `0${datetime.day}` : datetime.day
|
||||
return `${API_ENDPOINT}/${channel.site_id}/${date.year()}/${formattedMonth}/${formattedDay}/00-06`
|
||||
const datetime = dayjs(date.toDate()).tz('Europe/Lisbon')
|
||||
const formattedMonth = datetime.month() + 1 < 10 ? `0${datetime.month() + 1}` : datetime.month() + 1
|
||||
const formattedDay = datetime.date() < 10 ? `0${datetime.date()}` : datetime.date()
|
||||
return `${API_ENDPOINT}/${channel.site_id}/${datetime.year()}/${formattedMonth}/${formattedDay}/00-06`
|
||||
},
|
||||
async parser({ content, date, channel }) {
|
||||
let programs = []
|
||||
let items = parseItems(content)
|
||||
if (items.length === 0) return programs
|
||||
|
||||
const datetime = DateTime.fromJSDate(date.toDate()).setZone('Europe/Lisbon')
|
||||
const formattedMonth = datetime.month < 10 ? `0${datetime.month}` : datetime.month
|
||||
const formattedDay = datetime.day < 10 ? `0${datetime.day}` : datetime.day
|
||||
const datetime = dayjs(date.toDate()).tz('Europe/Lisbon')
|
||||
const formattedMonth = datetime.month() + 1 < 10 ? `0${datetime.month() + 1}` : datetime.month() + 1
|
||||
const formattedDay = datetime.date() < 10 ? `0${datetime.date()}` : datetime.date()
|
||||
|
||||
// Fetch the remaining 3 periods to get a full day schedule
|
||||
const promises = [
|
||||
axios.get(`${API_ENDPOINT}/${channel.site_id}/${date.year()}/${formattedMonth}/${formattedDay}/06-12`, { headers }),
|
||||
axios.get(`${API_ENDPOINT}/${channel.site_id}/${date.year()}/${formattedMonth}/${formattedDay}/12-18`, { headers }),
|
||||
axios.get(`${API_ENDPOINT}/${channel.site_id}/${date.year()}/${formattedMonth}/${formattedDay}/18-00`, { headers })
|
||||
axios.get(`${API_ENDPOINT}/${channel.site_id}/${datetime.year()}/${formattedMonth}/${formattedDay}/06-12`, { headers }),
|
||||
axios.get(`${API_ENDPOINT}/${channel.site_id}/${datetime.year()}/${formattedMonth}/${formattedDay}/12-18`, { headers }),
|
||||
axios.get(`${API_ENDPOINT}/${channel.site_id}/${datetime.year()}/${formattedMonth}/${formattedDay}/18-00`, { headers })
|
||||
]
|
||||
|
||||
await Promise.allSettled(promises).then(results => {
|
||||
@@ -49,10 +53,10 @@ module.exports = {
|
||||
|
||||
for (let item of items) {
|
||||
if (!item.startDate || !item.endDate) continue
|
||||
let start = DateTime.fromSeconds(item.startDate, { zone: 'UTC' }).toUTC()
|
||||
let stop = DateTime.fromSeconds(item.endDate, { zone: 'UTC' }).toUTC()
|
||||
let start = dayjs.unix(item.startDate).utc()
|
||||
let stop = dayjs.unix(item.endDate).utc()
|
||||
if (stop < start) {
|
||||
stop = stop.plus({ days: 1 })
|
||||
stop = stop.add(1, 'day')
|
||||
}
|
||||
const prog = {
|
||||
title: item.name || 'Sem título',
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
const axios = require('axios')
|
||||
const { DateTime } = require('luxon')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'wavve.com',
|
||||
@@ -47,11 +51,11 @@ module.exports = {
|
||||
}
|
||||
|
||||
function parseStart(item) {
|
||||
return DateTime.fromFormat(item.starttime, 'yyyy-MM-dd HH:mm', { zone: 'Asia/Seoul' }).toUTC()
|
||||
return dayjs.tz(item.starttime, 'YYYY-MM-DD HH:mm', 'Asia/Seoul').utc()
|
||||
}
|
||||
|
||||
function parseStop(item) {
|
||||
return DateTime.fromFormat(item.endtime, 'yyyy-MM-dd HH:mm', { zone: 'Asia/Seoul' }).toUTC()
|
||||
return dayjs.tz(item.endtime, 'YYYY-MM-DD HH:mm', 'Asia/Seoul').utc()
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
const { DateTime } = require('luxon')
|
||||
const axios = require('axios')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
module.exports = {
|
||||
site: 'zap.co.ao',
|
||||
@@ -18,8 +22,8 @@ module.exports = {
|
||||
title: item.programName,
|
||||
description: item.programDescription,
|
||||
category: item.categoryName,
|
||||
start: DateTime.fromSeconds(item.utcBeginDate).toUTC(),
|
||||
stop: DateTime.fromSeconds(item.utcEndDate).toUTC()
|
||||
start: dayjs.unix(item.utcBeginDate).utc(),
|
||||
stop: dayjs.unix(item.utcEndDate).utc()
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user