0
0
mirror of https://github.com/Maks1mS/free-ozon-dpr.git synced 2024-12-23 10:32:58 +03:00

add auto update ozon_wb_dpr

This commit is contained in:
Maxim Slipenko 2024-06-06 19:38:01 +03:00
parent 1093d592ca
commit da2fed1fd2
8 changed files with 321 additions and 79 deletions

View File

@ -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"
}
]

View File

@ -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": "ПВЗ ДНР"

9
package-lock.json generated
View File

@ -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",

View File

@ -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",

View File

@ -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();

0
scripts/update/index.js Normal file
View File

View File

@ -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;

View File

@ -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;
}
}
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,
};
}