From da2fed1fd2da45f619938c91c0d355784cf55932 Mon Sep 17 00:00:00 2001 From: Maxim Slipenko Date: Thu, 6 Jun 2024 19:38:01 +0300 Subject: [PATCH] add auto update ozon_wb_dpr --- data/03_ozon-wb-dpr.json | 100 +++++++++++++++++++-------- merged-data.json | 84 +++++++++++++++-------- package-lock.json | 9 +++ package.json | 1 + scripts/update.js | 2 + scripts/update/index.js | 0 scripts/update/ozon-wb-dpr.js | 124 ++++++++++++++++++++++++++++++++++ scripts/utils.js | 80 ++++++++++++++++------ 8 files changed, 321 insertions(+), 79 deletions(-) create mode 100644 scripts/update/index.js create mode 100644 scripts/update/ozon-wb-dpr.js diff --git a/data/03_ozon-wb-dpr.json b/data/03_ozon-wb-dpr.json index 1b55b12..185f3a9 100644 --- a/data/03_ozon-wb-dpr.json +++ b/data/03_ozon-wb-dpr.json @@ -7,9 +7,9 @@ 37.845475, 47.994778 ], - "name": "ПВЗ г.Донецк, ул. Харитонова, 3", + "name": "ПВЗ г.Донецк, ул.Харитонова, 3", + "address": "г.Донецк, ул.Харитонова, 3", "link": "https://ozon.ru/point/517058", - "address": "г.Донецк, ул. Харитонова, 3", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -17,9 +17,9 @@ 37.790642, 47.988073 ], - "name": "ПВЗ Донецк, пр-т. Ленинский, 4", + "name": "ПВЗ г.Донецк, пр.Ленинский, 4", + "address": "г.Донецк, пр.Ленинский, 4", "link": "https://ozon.ru/point/517054", - "address": "г.Донецк, пр-т. Ленинский, 4", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -27,9 +27,9 @@ 37.694046, 47.949874 ], - "name": "ПВЗ: Донецк, ул. Петровского, 111в", + "name": "ПВЗ г.Донецк, ул.Петровского, 111в", + "address": "г.Донецк, ул.Петровского, 111в", "link": "https://ozon.ru/point/517053", - "address": "г.Донецк, ул. Петровского, 111в", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -37,9 +37,9 @@ 37.798637, 48.009 ], - "name": "ПВЗ г.Донецк, ул. Университетская, 34", + "name": "ПВЗ г.Донецк, ул.Университетская, 34", + "address": "г.Донецк, ул.Университетская, 34", "link": "https://ozon.ru/point/514822", - "address": "г.Донецк, ул. Университетская, 34", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -47,9 +47,9 @@ 37.899868, 47.991365 ], - "name": "ПВЗ г.Донецк, ул. Полоцкая, 9", + "name": "ПВЗ г.Донецк, ул.Полоцкая, 9", + "address": "г.Донецк, ул.Полоцкая, 9", "link": "https://ozon.ru/point/517056", - "address": "г.Донецк, ул. Полоцкая, 9", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -57,9 +57,9 @@ 37.551447, 47.106867 ], - "name": "ПВЗ г.Мариуполь, пр. Металлургов, 94", + "name": "ПВЗ г.Мариуполь, пр.Металлургов, 94", + "address": "г.Мариуполь, пр.Металлургов, 94", "link": "https://ozon.ru/point/516734", - "address": "г.Мариуполь, пр. Металлургов, 94", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -67,9 +67,9 @@ 37.960468, 48.041197 ], - "name": "ПВЗ г. Макеевка, ул.Рябцева, 1", + "name": "ПВЗ г.Макеевка, ул.Рябцева, 1", + "address": "г.Макеевка, ул.Рябцева, 1", "link": "https://ozon.ru/point/517062", - "address": "г.Макеевка, ул. Рябцева, 1", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -77,9 +77,9 @@ 37.781488, 48.03651 ], - "name": "ПВЗ г.Донецк, ул. Артема, 148а", + "name": "ПВЗ г.Донецк, ул.Артема, 148а", + "address": "г.Донецк, ул.Артема, 148а", "link": "https://ozon.ru/point/517055", - "address": "г.Донецк, ул. Артема, 148а", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -87,9 +87,9 @@ 37.7964, 48.00381 ], - "name": "ПВЗ Донецк, пр-т. Гурова, 7", + "name": "ПВЗ г.Донецк, пр.Гурова, 7", + "address": "г.Донецк, пр.Гурова, 7", "link": "https://ozon.ru/point/517061", - "address": "г.Донецк, пр-т. Гурова, 7", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -97,9 +97,9 @@ 37.807934, 48.014371 ], - "name": "ПВЗ г.Донецк, ул. Челюскинцев, 167", + "name": "ПВЗ г.Донецк, ул.Челюскинцев, 167", + "address": "г.Донецк, ул.Челюскинцев, 167", "link": "https://ozon.ru/point/517059", - "address": "г.Донецк, ул. Челюскинцев, 167", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -107,9 +107,9 @@ 37.835405, 48.002471 ], - "name": "ПВЗ г.Донецк, пр. Ильича, 32", + "name": "ПВЗ г.Донецк, пр.Ильича, 32", + "address": "г.Донецк, пр.Ильича, 32", "link": "https://ozon.ru/point/514844", - "address": "г.Донецк, пр. Ильича, 32", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -117,9 +117,9 @@ 38.026077, 48.045442 ], - "name": "ПВЗ г.Макеевка, пр. Генерала Данилова, 71б", + "name": "ПВЗ г.Макеевка, пр.Генерала Данилова, 71б", + "address": "г.Макеевка, пр.Генерала Данилова, 71б", "link": "https://ozon.ru/point/534902", - "address": "г.Макеевка, пр. Генерала Данилова, 71б", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -127,9 +127,9 @@ 37.778362, 47.978513 ], - "name": "ПВЗ г.Донецк, ул. Воровского, 9", + "name": "ПВЗ г. Донецк, ул.Воровского, 9", + "address": "г. Донецк, ул.Воровского, 9", "link": "https://ozon.ru/point/534899", - "address": "г.Донецк, ул. Воровского, 9", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -137,9 +137,29 @@ 38.084391, 47.11915 ], - "name": "ПВЗ г.Новоазовск, ул. Ленина, 48", + "name": "ПВЗ г.Новоазовск, ул.Ленина, 48", + "address": "г.Новоазовск, ул.Ленина, 48", "link": "https://ozon.ru/point/533305", - "address": "г.Новоазовск, ул. Ленина, 48", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.795933, + 48.021495 + ], + "name": "ПВЗ г.Донецк, ул.Университетская, 76", + "address": "г.Донецк, ул.Университетская, 76", + "link": "https://ozon.ru/point/538086", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.958366, + 48.084373 + ], + "name": "ПВЗ г.Макеевка, ул.Рябцева, 1", + "address": "г.Макеевка, ул.Рябцева, 1", + "link": "https://ozon.ru/point/517062", "operationTime": "пн-вс с 9:00 до 17:45" }, { @@ -147,9 +167,29 @@ 37.907342, 47.977482 ], - "name": "ПВЗ г.Донецк, ул. Прожекторная, 3", + "name": "ПВЗ г.Донецк, ул.Прожекторная, 3", + "address": "г.Донецк, ул.Прожекторная, 3", "link": "https://ozon.ru/point/533308", - "address": "г.Донецк, ул. Прожекторная, 3", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.864259, + 48.009494 + ], + "name": "ПВЗ г.Донецк, бул.Шевченко, 129", + "address": "г.Донецк, бул.Шевченко, 129", + "link": "https://ozon.ru/point/538180", + "operationTime": "пн-вс с 9:00 до 17:45" + }, + { + "coordinates": [ + 37.963765, + 48.054088 + ], + "name": "ПВЗ г.Макеевка, ул.Рябцева, 1", + "address": "г.Макеевка, ул.Рябцева, 1", + "link": "https://ozon.ru/point/517062", "operationTime": "пн-вс с 9:00 до 17:45" } ] diff --git a/merged-data.json b/merged-data.json index 59af711..19da2fd 100644 --- a/merged-data.json +++ b/merged-data.json @@ -388,9 +388,9 @@ 37.845475, 47.994778 ], - "name": "ПВЗ г.Донецк, ул. Харитонова, 3", + "name": "ПВЗ г.Донецк, ул.Харитонова, 3", + "address": "г.Донецк, ул.Харитонова, 3", "link": "https://ozon.ru/point/517058", - "address": "г.Донецк, ул. Харитонова, 3", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -400,9 +400,9 @@ 37.790642, 47.988073 ], - "name": "ПВЗ Донецк, пр-т. Ленинский, 4", + "name": "ПВЗ г.Донецк, пр.Ленинский, 4", + "address": "г.Донецк, пр.Ленинский, 4", "link": "https://ozon.ru/point/517054", - "address": "г.Донецк, пр-т. Ленинский, 4", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -412,9 +412,9 @@ 37.694046, 47.949874 ], - "name": "ПВЗ: Донецк, ул. Петровского, 111в", + "name": "ПВЗ г.Донецк, ул.Петровского, 111в", + "address": "г.Донецк, ул.Петровского, 111в", "link": "https://ozon.ru/point/517053", - "address": "г.Донецк, ул. Петровского, 111в", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -424,9 +424,9 @@ 37.798637, 48.009 ], - "name": "ПВЗ г.Донецк, ул. Университетская, 34", + "name": "ПВЗ г.Донецк, ул.Университетская, 34", + "address": "г.Донецк, ул.Университетская, 34", "link": "https://ozon.ru/point/514822", - "address": "г.Донецк, ул. Университетская, 34", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -436,9 +436,9 @@ 37.899868, 47.991365 ], - "name": "ПВЗ г.Донецк, ул. Полоцкая, 9", + "name": "ПВЗ г.Донецк, ул.Полоцкая, 9", + "address": "г.Донецк, ул.Полоцкая, 9", "link": "https://ozon.ru/point/517056", - "address": "г.Донецк, ул. Полоцкая, 9", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -448,9 +448,9 @@ 37.551447, 47.106867 ], - "name": "ПВЗ г.Мариуполь, пр. Металлургов, 94", + "name": "ПВЗ г.Мариуполь, пр.Металлургов, 94", + "address": "г.Мариуполь, пр.Металлургов, 94", "link": "https://ozon.ru/point/516734", - "address": "г.Мариуполь, пр. Металлургов, 94", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -460,9 +460,9 @@ 37.960468, 48.041197 ], - "name": "ПВЗ г. Макеевка, ул.Рябцева, 1", + "name": "ПВЗ г.Макеевка, ул.Рябцева, 1", + "address": "г.Макеевка, ул.Рябцева, 1", "link": "https://ozon.ru/point/517062", - "address": "г.Макеевка, ул. Рябцева, 1", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -472,9 +472,9 @@ 37.781488, 48.03651 ], - "name": "ПВЗ г.Донецк, ул. Артема, 148а", + "name": "ПВЗ г.Донецк, ул.Артема, 148а", + "address": "г.Донецк, ул.Артема, 148а", "link": "https://ozon.ru/point/517055", - "address": "г.Донецк, ул. Артема, 148а", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -484,9 +484,9 @@ 37.7964, 48.00381 ], - "name": "ПВЗ Донецк, пр-т. Гурова, 7", + "name": "ПВЗ г.Донецк, пр.Гурова, 7", + "address": "г.Донецк, пр.Гурова, 7", "link": "https://ozon.ru/point/517061", - "address": "г.Донецк, пр-т. Гурова, 7", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -496,9 +496,9 @@ 37.807934, 48.014371 ], - "name": "ПВЗ г.Донецк, ул. Челюскинцев, 167", + "name": "ПВЗ г.Донецк, ул.Челюскинцев, 167", + "address": "г.Донецк, ул.Челюскинцев, 167", "link": "https://ozon.ru/point/517059", - "address": "г.Донецк, ул. Челюскинцев, 167", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -508,9 +508,9 @@ 37.835405, 48.002471 ], - "name": "ПВЗ г.Донецк, пр. Ильича, 32", + "name": "ПВЗ г.Донецк, пр.Ильича, 32", + "address": "г.Донецк, пр.Ильича, 32", "link": "https://ozon.ru/point/514844", - "address": "г.Донецк, пр. Ильича, 32", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -520,9 +520,9 @@ 38.026077, 48.045442 ], - "name": "ПВЗ г.Макеевка, пр. Генерала Данилова, 71б", + "name": "ПВЗ г.Макеевка, пр.Генерала Данилова, 71б", + "address": "г.Макеевка, пр.Генерала Данилова, 71б", "link": "https://ozon.ru/point/534902", - "address": "г.Макеевка, пр. Генерала Данилова, 71б", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -532,9 +532,9 @@ 37.778362, 47.978513 ], - "name": "ПВЗ г.Донецк, ул. Воровского, 9", + "name": "ПВЗ г. Донецк, ул.Воровского, 9", + "address": "г. Донецк, ул.Воровского, 9", "link": "https://ozon.ru/point/534899", - "address": "г.Донецк, ул. Воровского, 9", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -544,9 +544,21 @@ 38.084391, 47.11915 ], - "name": "ПВЗ г.Новоазовск, ул. Ленина, 48", + "name": "ПВЗ г.Новоазовск, ул.Ленина, 48", + "address": "г.Новоазовск, ул.Ленина, 48", "link": "https://ozon.ru/point/533305", - "address": "г.Новоазовск, ул. Ленина, 48", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.795933, + 48.021495 + ], + "name": "ПВЗ г.Донецк, ул.Университетская, 76", + "address": "г.Донецк, ул.Университетская, 76", + "link": "https://ozon.ru/point/538086", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" @@ -556,9 +568,21 @@ 37.907342, 47.977482 ], - "name": "ПВЗ г.Донецк, ул. Прожекторная, 3", + "name": "ПВЗ г.Донецк, ул.Прожекторная, 3", + "address": "г.Донецк, ул.Прожекторная, 3", "link": "https://ozon.ru/point/533308", - "address": "г.Донецк, ул. Прожекторная, 3", + "operationTime": "пн-вс с 9:00 до 17:45", + "source": "https://t.me/ozon_wb_dpr/627", + "provider": "ПВЗ ДНР" + }, + { + "coordinates": [ + 37.864259, + 48.009494 + ], + "name": "ПВЗ г.Донецк, бул.Шевченко, 129", + "address": "г.Донецк, бул.Шевченко, 129", + "link": "https://ozon.ru/point/538180", "operationTime": "пн-вс с 9:00 до 17:45", "source": "https://t.me/ozon_wb_dpr/627", "provider": "ПВЗ ДНР" diff --git a/package-lock.json b/package-lock.json index 52e6641..63aa8e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "free-ozon-dpr", "version": "0.0.0", "dependencies": { + "fastest-levenshtein": "^1.0.16", "jsdom": "^24.1.0", "modern-async": "^2.0.0", "node-fetch": "^3.3.2", @@ -918,6 +919,14 @@ "@esbuild/win32-x64": "0.20.2" } }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "engines": { + "node": ">= 4.9.1" + } + }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", diff --git a/package.json b/package.json index d3366ee..13ee756 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "vite-plugin-webfont-dl": "^3.9.4" }, "dependencies": { + "fastest-levenshtein": "^1.0.16", "jsdom": "^24.1.0", "modern-async": "^2.0.0", "node-fetch": "^3.3.2", diff --git a/scripts/update.js b/scripts/update.js index 12b11a7..97d8dd6 100644 --- a/scripts/update.js +++ b/scripts/update.js @@ -2,6 +2,7 @@ import fs from "node:fs/promises"; import { asyncMap } from "modern-async"; import { JSDOM } from "jsdom"; import { getFinalURL } from "./utils.js"; +import ozonWbDpr from "./update/ozon-wb-dpr.js"; async function woyag() { const apiResponse = await fetch("https://login.woyag.ru/ajax/pvz-list"); @@ -84,6 +85,7 @@ async function sevenDostavka() { async function main() { await woyag(); await sevenDostavka(); + await ozonWbDpr(); } main(); diff --git a/scripts/update/index.js b/scripts/update/index.js new file mode 100644 index 0000000..e69de29 diff --git a/scripts/update/ozon-wb-dpr.js b/scripts/update/ozon-wb-dpr.js new file mode 100644 index 0000000..7f3a047 --- /dev/null +++ b/scripts/update/ozon-wb-dpr.js @@ -0,0 +1,124 @@ +import { distance } from "fastest-levenshtein"; +import { getFinalURL, getTelegramMessage } from "../utils.js"; +import { JSDOM } from "jsdom"; +import { asyncMap } from "modern-async"; +import fs from "node:fs/promises"; + +const MAIN_URL = "https://t.me/ozon_wb_dpr/627"; + +const QR_FOR_PVZ_STRING = "QR для ПВЗ"; + +const closestObj = (str, arr, key) => { + let min_distance = Infinity; + let min_index = 0; + for (let i = 0; i < arr.length; i++) { + const dist = distance(str, arr[i][key]); + if (dist < min_distance) { + min_distance = dist; + min_index = i; + } + } + return arr[min_index]; +}; + +async function getPVZFromPost(post) { + const message = await getTelegramMessage(post); + const dom = new JSDOM(message.text); + const document = dom.window.document; + + const linkElement = document.querySelector( + 'a[href*="vk.cc"],a[href*="ozon.ru"]' + ); + + const link = await getFinalURL(linkElement["href"]).then((u) => { + const final = new URL(u); + final.search = ""; + return final.toString(); + }); + + return link; +} + +async function getFromTelegram() { + const message = await getTelegramMessage(MAIN_URL); + + const dom = new JSDOM(message.text); + const document = dom.window.document; + + const links = document.querySelectorAll("a"); + + return ( + await asyncMap(links, async (link) => { + const textContent = link.textContent; + + if (textContent.startsWith(QR_FOR_PVZ_STRING)) { + const address = textContent.replace(QR_FOR_PVZ_STRING, "").trim(); + + let postLink = link["href"]; + // TEMP FIX + if (address === "г.Донецк, ул.Университетская, 76") { + postLink = "https://t.me/ozon_wb_dpr/774"; + } + + return { + name: `ПВЗ ${address}`, + address, + link: await getPVZFromPost(postLink), + operationTime: "пн-вс с 9:00 до 17:45", + }; + } + }) + ).filter(Boolean); +} + +async function getFromSite() { + const res = await fetch("https://ozon-wb-dpr.ru/"); + const html = await res.text(); + + const dom = new JSDOM(html); + const document = dom.window.document; + + const scripts = document.querySelectorAll("script"); + + for (let script of scripts) { + if (script.textContent.includes('descr: "Бесплатный озон')) { + let x = script.textContent.split("[\n{\n").pop().split("\n},\n]")[0]; + + if (x) { + const points = new Function(`return [{${x}}]`)(); + return points; + } + } + } +} + +async function ozonWbDpr() { + const telegramPoints = await getFromTelegram(); + let points = (await getFromSite()).map((point) => ({ + coordinates: [parseFloat(point["lng"]), parseFloat(point["lat"])], + name: point.title, + })); + + points = points.map((point) => { + const obj = closestObj(point.name, telegramPoints, "name"); + return { + coordinates: point.coordinates, + ...obj, + }; + }); + + await fs.writeFile( + "data/03_ozon-wb-dpr.json", + JSON.stringify( + { + name: "ПВЗ ДНР", + source: MAIN_URL, + points, + }, + undefined, + 4 + ) + ); +} + +export default ozonWbDpr; diff --git a/scripts/utils.js b/scripts/utils.js index 992d50d..687fcab 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -1,23 +1,65 @@ +import { JSDOM } from "jsdom"; + +async function resolveVKcc(url) { + const response = await fetch(url); + const text = await response.text(); + + const match = new RegExp(/value=["']([^"']+)["']/).exec(text); + + if (match && match.length > 1) { + return match[1]; + } else { + return; + } +} + export async function getFinalURL(url) { - let response = await fetch(url, { + if (url?.startsWith('https://vk.cc')) { + url = await resolveVKcc(url); + } + + if (!url) { + return; + } + + let response = await fetch(url, { + method: "HEAD", + redirect: "manual", + }); + while ( + response.status >= 300 && + response.status < 400 && + response.headers.get("location") && + !url.startsWith('https://ozon.ru/point/') + ) { + url = response.headers.get("location"); + if (!url.startsWith("http")) { + const baseUrl = new URL(response.url); + url = `${baseUrl.protocol}//${baseUrl.host}${url}`; + } + response = await fetch(url, { method: "HEAD", redirect: "manual", }); - while ( - response.status >= 300 && - response.status < 400 && - response.headers.get("location") && - new URL(url).hostname !== 'ozon.ru' - ) { - url = response.headers.get("location"); - if (!url.startsWith("http")) { - const baseUrl = new URL(response.url); - url = `${baseUrl.protocol}//${baseUrl.host}${url}`; - } - response = await fetch(url, { - method: "HEAD", - redirect: "manual", - }); - } - return url; - } \ No newline at end of file + } + return url; +} + +export async function getTelegramMessage(input) { + const url = new URL(input); + + url.search = "?embed=1&mode=tme"; + + const res = await fetch(url); + const htmlText = await res.text(); + + const dom = new JSDOM(htmlText); + + const document = dom.window.document; + const message = document.querySelector(".tgme_widget_message"); + + return { + text: message.querySelector("div.tgme_widget_message_text.js-message_text") + .innerHTML, + }; +}