mirror of
https://github.com/Maks1mS/free-ozon-dpr.git
synced 2025-11-28 08:11:56 +03:00
Compare commits
42 Commits
6579e2b94b
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| d8df3c804f | |||
| f18d854f99 | |||
| 679ca9b8bf | |||
|
|
8f5c35ba2b | ||
| a4cd93b09a | |||
| b6043843e4 | |||
| 84af1913c5 | |||
| fadb204413 | |||
| 9f4f0838d7 | |||
| 9409fbe1b4 | |||
| 93f36be0d5 | |||
| 36fd635c53 | |||
| d7dce20a0f | |||
| 7b0b892e70 | |||
| 2708952473 | |||
| 1932d2a4b0 | |||
| 01df7305cf | |||
| 3e8e219c34 | |||
| b465d70517 | |||
|
|
f7a6431681 | ||
|
|
48ae10bdac | ||
| 3cc83c531d | |||
| cdba0bfa16 | |||
| f6b26f049f | |||
|
|
47ad0aef22 | ||
| 8e12f4a9cb | |||
| c11e80178d | |||
| 41a33e6516 | |||
| 5f07385314 | |||
| 964009cdc3 | |||
| 9b68dea419 | |||
| 799de028da | |||
| baa73c0c2e | |||
| be1acbbbf8 | |||
| d1085dfcba | |||
| 9215bc9522 | |||
| 64394ada44 | |||
| 3701d2b125 | |||
| 24f5a53913 | |||
| deeed2e2ef | |||
| ccdce54b73 | |||
| 70364d671a |
@@ -2,6 +2,26 @@
|
|||||||
"name": "WOЯЖ",
|
"name": "WOЯЖ",
|
||||||
"source": "https://login.woyag.ru/map",
|
"source": "https://login.woyag.ru/map",
|
||||||
"points": [
|
"points": [
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.804049,
|
||||||
|
47.993063
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-01 Планета",
|
||||||
|
"address": "Донецк, ул. Артема 50а",
|
||||||
|
"link": "https://ozon.ru/point/620808",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.96675,
|
||||||
|
48.042848
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-02 Макеевка",
|
||||||
|
"address": "Макеевка, ул. Островского, 2/37",
|
||||||
|
"link": "https://ozon.ru/point/1217157",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
37.689712,
|
37.689712,
|
||||||
@@ -10,7 +30,17 @@
|
|||||||
"name": "ПВЗ-03 Ляшенко",
|
"name": "ПВЗ-03 Ляшенко",
|
||||||
"address": "Донецк, Ляшенко 1а",
|
"address": "Донецк, Ляшенко 1а",
|
||||||
"link": "https://ozon.ru/point/538097",
|
"link": "https://ozon.ru/point/538097",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
38.484234,
|
||||||
|
48.038333
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-07 Шахтерск",
|
||||||
|
"address": "Шахтёрск, ул. Берегового 11",
|
||||||
|
"link": "https://ozon.ru/point/1215804",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -20,7 +50,7 @@
|
|||||||
"name": "ПВЗ-08 Первомайская",
|
"name": "ПВЗ-08 Первомайская",
|
||||||
"address": "Донецк, ул. Первомайская (АС Центр)",
|
"address": "Донецк, ул. Первомайская (АС Центр)",
|
||||||
"link": "https://ozon.ru/point/538186",
|
"link": "https://ozon.ru/point/538186",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -30,7 +60,7 @@
|
|||||||
"name": "ПВЗ-10 Театральный",
|
"name": "ПВЗ-10 Театральный",
|
||||||
"address": "Донецк, ул. Университетская 26",
|
"address": "Донецк, ул. Университетская 26",
|
||||||
"link": "https://ozon.ru/point/524639",
|
"link": "https://ozon.ru/point/524639",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -40,7 +70,7 @@
|
|||||||
"name": "ПВЗ-11 Шевченко",
|
"name": "ПВЗ-11 Шевченко",
|
||||||
"address": "Донецк, бул. Шевченко 77",
|
"address": "Донецк, бул. Шевченко 77",
|
||||||
"link": "https://ozon.ru/point/536833",
|
"link": "https://ozon.ru/point/536833",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -50,7 +80,7 @@
|
|||||||
"name": "ПВЗ-13 Торез",
|
"name": "ПВЗ-13 Торез",
|
||||||
"address": "Торез, ул. Пионерская 1",
|
"address": "Торез, ул. Пионерская 1",
|
||||||
"link": "https://ozon.ru/point/536825",
|
"link": "https://ozon.ru/point/536825",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -60,7 +90,7 @@
|
|||||||
"name": "ПВЗ-14 Ильича",
|
"name": "ПВЗ-14 Ильича",
|
||||||
"address": "Донецк, пр. Ильича 27",
|
"address": "Донецк, пр. Ильича 27",
|
||||||
"link": "https://ozon.ru/point/538179",
|
"link": "https://ozon.ru/point/538179",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -70,7 +100,7 @@
|
|||||||
"name": "ПВЗ-15 Боссе",
|
"name": "ПВЗ-15 Боссе",
|
||||||
"address": "Донецк, ул. Речная 24б",
|
"address": "Донецк, ул. Речная 24б",
|
||||||
"link": "https://ozon.ru/point/536838",
|
"link": "https://ozon.ru/point/536838",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -80,7 +110,7 @@
|
|||||||
"name": "ПВЗ-16 Харцызск",
|
"name": "ПВЗ-16 Харцызск",
|
||||||
"address": "Харцызск, ул. Шалимова 14б",
|
"address": "Харцызск, ул. Шалимова 14б",
|
||||||
"link": "https://ozon.ru/point/536623",
|
"link": "https://ozon.ru/point/536623",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -90,7 +120,27 @@
|
|||||||
"name": "ПВЗ-17 Зугрэс",
|
"name": "ПВЗ-17 Зугрэс",
|
||||||
"address": "Зугрэс, ул. Рыночная 1",
|
"address": "Зугрэс, ул. Рыночная 1",
|
||||||
"link": "https://ozon.ru/point/536839",
|
"link": "https://ozon.ru/point/536839",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.78178,
|
||||||
|
48.035305
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-19 Северный",
|
||||||
|
"address": "Донецк, ул. Университетская 107",
|
||||||
|
"link": "https://ozon.ru/point/1224270",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.799398,
|
||||||
|
47.992543
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-20 Пассаж",
|
||||||
|
"address": "Донецк, пл. Коммунаров 1",
|
||||||
|
"link": "https://ozon.ru/point/620821",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -100,7 +150,7 @@
|
|||||||
"name": "ПВЗ-21 Крытый",
|
"name": "ПВЗ-21 Крытый",
|
||||||
"address": "Донецк, ул. 50-летия СССР 150",
|
"address": "Донецк, ул. 50-летия СССР 150",
|
||||||
"link": "https://ozon.ru/point/533314",
|
"link": "https://ozon.ru/point/533314",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -110,7 +160,7 @@
|
|||||||
"name": "ПВЗ-22 Независимости",
|
"name": "ПВЗ-22 Независимости",
|
||||||
"address": "Донецк, ул. Независимости 16д",
|
"address": "Донецк, ул. Независимости 16д",
|
||||||
"link": "https://ozon.ru/point/536826",
|
"link": "https://ozon.ru/point/536826",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -120,7 +170,7 @@
|
|||||||
"name": "ПВЗ-23 Раздольная",
|
"name": "ПВЗ-23 Раздольная",
|
||||||
"address": "Донецк, ул. Раздольная 6",
|
"address": "Донецк, ул. Раздольная 6",
|
||||||
"link": "https://ozon.ru/point/533348",
|
"link": "https://ozon.ru/point/533348",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -130,7 +180,7 @@
|
|||||||
"name": "ПВЗ-24 Соловки",
|
"name": "ПВЗ-24 Соловки",
|
||||||
"address": "Донецк, ул. Пилотная 28",
|
"address": "Донецк, ул. Пилотная 28",
|
||||||
"link": "https://ozon.ru/point/536830",
|
"link": "https://ozon.ru/point/536830",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -140,7 +190,7 @@
|
|||||||
"name": "ПВЗ-25 МК3 Черемушки",
|
"name": "ПВЗ-25 МК3 Черемушки",
|
||||||
"address": "Макеевка, квартал Северный 17",
|
"address": "Макеевка, квартал Северный 17",
|
||||||
"link": "https://ozon.ru/point/534957",
|
"link": "https://ozon.ru/point/534957",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -150,7 +200,7 @@
|
|||||||
"name": "ПВЗ-26 Шахтостроителей",
|
"name": "ПВЗ-26 Шахтостроителей",
|
||||||
"address": "Донецк, бул. Шахтостроителей 20",
|
"address": "Донецк, бул. Шахтостроителей 20",
|
||||||
"link": "https://ozon.ru/point/534949",
|
"link": "https://ozon.ru/point/534949",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -160,7 +210,17 @@
|
|||||||
"name": "ПВЗ-27 Детский Мир",
|
"name": "ПВЗ-27 Детский Мир",
|
||||||
"address": "Донецк, ул. Артема 147а",
|
"address": "Донецк, ул. Артема 147а",
|
||||||
"link": "https://ozon.ru/point/536823",
|
"link": "https://ozon.ru/point/536823",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.926916,
|
||||||
|
47.964525
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-29 Объединенный",
|
||||||
|
"address": "Донецк, ул. Буденновских партизан",
|
||||||
|
"link": "https://ozon.ru/point/538369",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -170,7 +230,27 @@
|
|||||||
"name": "ПВЗ-30 Постышева",
|
"name": "ПВЗ-30 Постышева",
|
||||||
"address": "Донецк, ул. Постышева 43",
|
"address": "Донецк, ул. Постышева 43",
|
||||||
"link": "https://ozon.ru/point/538183",
|
"link": "https://ozon.ru/point/538183",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
38.762477,
|
||||||
|
48.022609
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-31 Снежное",
|
||||||
|
"address": "Снежное, ул. Крестьянская 43",
|
||||||
|
"link": "https://ozon.ru/point/1217165",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.858368,
|
||||||
|
48.003342
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-32 Макаронка",
|
||||||
|
"address": "Донецк, пр. Ильича 84",
|
||||||
|
"link": "https://ozon.ru/point/620816",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -180,7 +260,7 @@
|
|||||||
"name": "ПВЗ-33 Пирамида",
|
"name": "ПВЗ-33 Пирамида",
|
||||||
"address": "Донецк, ул. 50-летия СССР 100",
|
"address": "Донецк, ул. 50-летия СССР 100",
|
||||||
"link": "https://ozon.ru/point/533329",
|
"link": "https://ozon.ru/point/533329",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -190,7 +270,7 @@
|
|||||||
"name": "ПВЗ-34 Киевский",
|
"name": "ПВЗ-34 Киевский",
|
||||||
"address": "Донецк, пр. Киевский 24",
|
"address": "Донецк, пр. Киевский 24",
|
||||||
"link": "https://ozon.ru/point/538182",
|
"link": "https://ozon.ru/point/538182",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -200,7 +280,7 @@
|
|||||||
"name": "ПВЗ-35 Топаз",
|
"name": "ПВЗ-35 Топаз",
|
||||||
"address": "Донецк, ул. Куйбышева 169б",
|
"address": "Донецк, ул. Куйбышева 169б",
|
||||||
"link": "https://ozon.ru/point/538096",
|
"link": "https://ozon.ru/point/538096",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -210,7 +290,17 @@
|
|||||||
"name": "ПВЗ-36 МК-4 Даки",
|
"name": "ПВЗ-36 МК-4 Даки",
|
||||||
"address": "Макеевка, ул. 50 лет Образования СССР 24а",
|
"address": "Макеевка, ул. 50 лет Образования СССР 24а",
|
||||||
"link": "https://ozon.ru/point/538184",
|
"link": "https://ozon.ru/point/538184",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.749093,
|
||||||
|
48.042633
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-37 ЖД Космос",
|
||||||
|
"address": "Донецк, ул. Артема 275",
|
||||||
|
"link": "https://ozon.ru/point/1217174",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -220,7 +310,7 @@
|
|||||||
"name": "ПВЗ-38 Волна",
|
"name": "ПВЗ-38 Волна",
|
||||||
"address": "Донецк, ул. Куйбышева 217Б",
|
"address": "Донецк, ул. Куйбышева 217Б",
|
||||||
"link": "https://ozon.ru/point/533332",
|
"link": "https://ozon.ru/point/533332",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -230,7 +320,7 @@
|
|||||||
"name": "ПВЗ-39 Семашко",
|
"name": "ПВЗ-39 Семашко",
|
||||||
"address": "Донецк, ул. Коммунаров 38",
|
"address": "Донецк, ул. Коммунаров 38",
|
||||||
"link": "https://ozon.ru/point/535056",
|
"link": "https://ozon.ru/point/535056",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -240,7 +330,17 @@
|
|||||||
"name": "ПВЗ-40 Островского20",
|
"name": "ПВЗ-40 Островского20",
|
||||||
"address": "Донецк, ул. Островского 20",
|
"address": "Донецк, ул. Островского 20",
|
||||||
"link": "https://ozon.ru/point/533345",
|
"link": "https://ozon.ru/point/533345",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.774099,
|
||||||
|
48.037829
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-41 Маяк",
|
||||||
|
"address": "Донецк, ул. Артема 179б",
|
||||||
|
"link": "https://ozon.ru/point/1215788",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -250,7 +350,7 @@
|
|||||||
"name": "ПВЗ-43 Гурова 22",
|
"name": "ПВЗ-43 Гурова 22",
|
||||||
"address": "Донецк, пр. Гурова 22",
|
"address": "Донецк, пр. Гурова 22",
|
||||||
"link": "https://ozon.ru/point/538094",
|
"link": "https://ozon.ru/point/538094",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
@@ -260,7 +360,137 @@
|
|||||||
"name": "ПВЗ-44 Кольцова15",
|
"name": "ПВЗ-44 Кольцова15",
|
||||||
"address": "Донецк, ул. Кольцова 15",
|
"address": "Донецк, ул. Кольцова 15",
|
||||||
"link": "https://ozon.ru/point/538095",
|
"link": "https://ozon.ru/point/538095",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.800047,
|
||||||
|
48.001798
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-45 Гринкевича 9",
|
||||||
|
"address": "Донецк, пр. Гринкевича 9",
|
||||||
|
"link": "https://ozon.ru/point/549337",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.88167,
|
||||||
|
47.963065
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-46 Буденного",
|
||||||
|
"address": "Донецк, пл. Буденного (трамвайное кольцо)",
|
||||||
|
"link": "https://ozon.ru/point/1217171",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.91487,
|
||||||
|
47.974376
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-47 Раздольная 34б (Юта)",
|
||||||
|
"address": "Донецк, ул. Раздольная 34б",
|
||||||
|
"link": "https://ozon.ru/point/620819",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.859927,
|
||||||
|
48.036184
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-48 МК-5 Кронштадская 69",
|
||||||
|
"address": "Макеевка, ул. Кронштадтская 69",
|
||||||
|
"link": "https://ozon.ru/point/622517",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.983099,
|
||||||
|
48.015676
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-49 МК-6 Репина 26",
|
||||||
|
"address": "Макеевка, ул. Репина 26",
|
||||||
|
"link": "https://ozon.ru/point/622515",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.882111,
|
||||||
|
47.959607
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-50 Октября 24",
|
||||||
|
"address": "Донецк, ул. Октября 24",
|
||||||
|
"link": "https://ozon.ru/point/1215819",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.850286,
|
||||||
|
47.981267
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-52 Бессарабская 19",
|
||||||
|
"address": "Донецк, ул. Бессарабская 19",
|
||||||
|
"link": "https://ozon.ru/point/1255353",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.918123,
|
||||||
|
47.98129
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-54 Щетинина 23а",
|
||||||
|
"address": "Донецк, ул. Щетинина 23а",
|
||||||
|
"link": "https://ozon.ru/point/1229358",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.795304,
|
||||||
|
48.011411
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-55 Щорса 38",
|
||||||
|
"address": "Донецк, ул. Щорса 38",
|
||||||
|
"link": "https://ozon.ru/point/1229562",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.983865,
|
||||||
|
48.08509
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-53 МК-7 Монтажная 48/11",
|
||||||
|
"address": "Макеевка, ул. Монтажная 48/11",
|
||||||
|
"link": "https://ozon.ru/point/1255364",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.966101,
|
||||||
|
47.955685
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-56 Палладина 22",
|
||||||
|
"address": "Донецк, ул. Палладина 22",
|
||||||
|
"link": "https://ozon.ru/point/1230956",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.898197,
|
||||||
|
48.067402
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-58 МК-9 Героев Сталинграда",
|
||||||
|
"address": "Макеевка, ул. Героев Сталинграда 19",
|
||||||
|
"link": "https://ozon.ru/point/1255360",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
38.02035,
|
||||||
|
47.751643
|
||||||
|
],
|
||||||
|
"name": "ПВЗ-60 Старобешево",
|
||||||
|
"address": "пгт. Старобешево, ул. Победы 94б",
|
||||||
|
"link": "https://ozon.ru/point/1263965",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 18:00"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -1,66 +1,76 @@
|
|||||||
{
|
{
|
||||||
"name": "Global Express",
|
"name": "Global Express",
|
||||||
"source": "https://t.me/Mariupol_global_express/1989",
|
"source": "https://t.me/global_express_dnr/784",
|
||||||
"points": [
|
"points": [
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
37.775896,
|
37.849239,
|
||||||
47.959707
|
48.009934
|
||||||
],
|
],
|
||||||
"name": "Донецк 7 (микр-н Звездный)",
|
"link": "https://ozon.ru/point/538177",
|
||||||
"link": "https://ozon.ru/point/534953",
|
"name": "г. Донецк Калининский рынок (рядом с гостиницей Нива) бульвар Шевченко, 66",
|
||||||
"address": "Донецк, пр-кт Ленинский 98А",
|
"address": "г. Донецк Калининский рынок (рядом с гостиницей Нива) бульвар Шевченко, 66",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:00"
|
"operationTime": "<a href=\"https://vk.com/global_express_dnr?w=address-124759560_72654\">ГРАФИК РАБОТЫ</a>"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
37.811995,
|
37.811995,
|
||||||
48.011767
|
48.011767
|
||||||
],
|
],
|
||||||
"name": "Донецк 8 (Крытый рынок)",
|
|
||||||
"link": "https://ozon.ru/point/533323",
|
"link": "https://ozon.ru/point/533323",
|
||||||
"address": "Донецк, ул. 50-летия СССР 157А",
|
"name": "г. Донецк, ул. 50-летия СССР, 157А",
|
||||||
"operationTime": "пн-пт с 9:00 до 17:00"
|
"address": "г. Донецк, ул. 50-летия СССР, 157А",
|
||||||
|
"operationTime": "<a href=\"https://vk.com/global_express_dnr?w=address-124759560_72654\">ГРАФИК РАБОТЫ</a>"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
37.799192,
|
37.799192,
|
||||||
47.991666
|
47.991666
|
||||||
],
|
],
|
||||||
"name": "Донецк 1 (Южный)",
|
|
||||||
"link": "https://ozon.ru/point/533347",
|
"link": "https://ozon.ru/point/533347",
|
||||||
"address": "Донецк, площадь Коммунаров 1к1, ТЦ «Южный»",
|
"name": " г. Донецк, площадь Коммунаров 1к1, ТЦ «Южный» ",
|
||||||
"operationTime": "пн-пт с 9:00 до 17:00, сб-вс с 10:00 ло 17:00"
|
"address": " г. Донецк, площадь Коммунаров 1к1, ТЦ «Южный» ",
|
||||||
|
"operationTime": "<a href=\"https://vk.com/global_express_dnr?w=address-124759560_72654\">ГРАФИК РАБОТЫ</a>"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.775896,
|
||||||
|
47.959707
|
||||||
|
],
|
||||||
|
"link": "https://ozon.ru/point/534953",
|
||||||
|
"name": "г. Донецк, пр - кт Ленинский, 98А остановка «Звездный»",
|
||||||
|
"address": "г. Донецк, пр - кт Ленинский, 98А остановка «Звездный»",
|
||||||
|
"operationTime": "<a href=\"https://vk.com/global_express_dnr?w=address-124759560_72654\">ГРАФИК РАБОТЫ</a>"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
38.635921,
|
38.635921,
|
||||||
48.047327
|
48.047327
|
||||||
],
|
],
|
||||||
"name": "Торез 3",
|
|
||||||
"link": "https://ozon.ru/point/533350",
|
"link": "https://ozon.ru/point/533350",
|
||||||
|
"name": "г. Торез, 4й микрорайон, (торговые павильоны в районе дома 23)",
|
||||||
"address": "г. Торез, 4й микрорайон, (торговые павильоны в районе дома 23)",
|
"address": "г. Торез, 4й микрорайон, (торговые павильоны в районе дома 23)",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:00"
|
"operationTime": "<a href=\"https://vk.com/global_express_dnr?w=address-124759560_72654\">ГРАФИК РАБОТЫ</a>"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
38.761523,
|
38.761523,
|
||||||
48.021133
|
48.021133
|
||||||
],
|
],
|
||||||
"name": "Снежное",
|
|
||||||
"link": "https://ozon.ru/point/534920",
|
"link": "https://ozon.ru/point/534920",
|
||||||
"address": "Снежное, ул. Дзержинского, 2",
|
"name": "г. Снежное, ул. Дзержинского, 2 ",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:00"
|
"address": "г. Снежное, ул. Дзержинского, 2 ",
|
||||||
|
"operationTime": "<a href=\"https://vk.com/global_express_dnr?w=address-124759560_72654\">ГРАФИК РАБОТЫ</a>"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
38.208714,
|
38.208714,
|
||||||
48.221055
|
48.221055
|
||||||
],
|
],
|
||||||
"name": "Енакиево",
|
|
||||||
"link": "https://ozon.ru/point/534903",
|
"link": "https://ozon.ru/point/534903",
|
||||||
"address": "Енакиево, проспект Ленина, 98в",
|
"name": "Енакиево, проспект Ленина, 98 ",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:00"
|
"address": "Енакиево, проспект Ленина, 98 ",
|
||||||
|
"operationTime": "<a href=\"https://vk.com/global_express_dnr?w=address-124759560_72654\">ГРАФИК РАБОТЫ</a>"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -7,9 +7,9 @@
|
|||||||
37.845475,
|
37.845475,
|
||||||
47.994778
|
47.994778
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Донецк, ул.Харитонова, 3",
|
"name": "ПВЗ г. Донецк, ул. Харитонова, 3а",
|
||||||
"address": "г.Донецк, ул.Харитонова, 3",
|
"address": "г. Донецк, ул. Харитонова, 3а",
|
||||||
"link": "https://ozon.ru/point/517058",
|
"link": "https://ozon.ru/t/lNMb4a7",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -17,9 +17,9 @@
|
|||||||
37.790642,
|
37.790642,
|
||||||
47.988073
|
47.988073
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Донецк, пр.Ленинский, 4",
|
"name": "ПВЗ г. Донецк, пр-кт Ленинский, 4",
|
||||||
"address": "г.Донецк, пр.Ленинский, 4",
|
"address": "г. Донецк, пр-кт Ленинский, 4",
|
||||||
"link": "https://ozon.ru/point/517054",
|
"link": "https://ozon.ru/t/bJKdjAE",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -27,9 +27,9 @@
|
|||||||
37.694046,
|
37.694046,
|
||||||
47.949874
|
47.949874
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Донецк, ул.Петровского, 111в",
|
"name": "ПВЗ г. Донецк, ул. Петровского, 111в",
|
||||||
"address": "г.Донецк, ул.Петровского, 111в",
|
"address": "г. Донецк, ул. Петровского, 111в",
|
||||||
"link": "https://ozon.ru/point/517053",
|
"link": "https://ozon.ru/t/QlR8LlD",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -37,19 +37,9 @@
|
|||||||
37.798637,
|
37.798637,
|
||||||
48.009
|
48.009
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Донецк, ул.Университетская, 34",
|
"name": "ПВЗ г. Донецк, ул. Университетская, 34",
|
||||||
"address": "г.Донецк, ул.Университетская, 34",
|
"address": "г. Донецк, ул. Университетская, 34",
|
||||||
"link": "https://ozon.ru/point/514822",
|
"link": "https://ozon.ru/t/WkV05VJ",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"coordinates": [
|
|
||||||
37.899868,
|
|
||||||
47.991365
|
|
||||||
],
|
|
||||||
"name": "ПВЗ г.Донецк, ул.Полоцкая, 9",
|
|
||||||
"address": "г.Донецк, ул.Полоцкая, 9",
|
|
||||||
"link": "https://ozon.ru/point/517056",
|
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -57,9 +47,9 @@
|
|||||||
37.551447,
|
37.551447,
|
||||||
47.106867
|
47.106867
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Мариуполь, пр.Металлургов, 94",
|
"name": "ПВЗ г. Мариуполь, пр-кт Металлургов, 94",
|
||||||
"address": "г.Мариуполь, пр.Металлургов, 94",
|
"address": "г. Мариуполь, пр-кт Металлургов, 94",
|
||||||
"link": "https://ozon.ru/point/516734",
|
"link": "https://ozon.ru/t/85ALaJb",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -67,9 +57,9 @@
|
|||||||
37.960468,
|
37.960468,
|
||||||
48.041197
|
48.041197
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Макеевка, ул.Рябцева, 1",
|
"name": "ПВЗ г. Макеевка, ул. Рябцева, 1",
|
||||||
"address": "г.Макеевка, ул.Рябцева, 1",
|
"address": "г. Макеевка, ул. Рябцева, 1",
|
||||||
"link": "https://ozon.ru/point/517062",
|
"link": "https://ozon.ru/t/akMALGL",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -77,9 +67,9 @@
|
|||||||
37.781488,
|
37.781488,
|
||||||
48.03651
|
48.03651
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Донецк, ул.Артема, 148а",
|
"name": "ПВЗ г. Донецк, ул. Артема, 148а",
|
||||||
"address": "г.Донецк, ул.Артема, 148а",
|
"address": "г. Донецк, ул. Артема, 148а",
|
||||||
"link": "https://ozon.ru/point/517055",
|
"link": "https://ozon.ru/t/grW5Y08",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -87,19 +77,19 @@
|
|||||||
37.7964,
|
37.7964,
|
||||||
48.00381
|
48.00381
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Донецк, пр.Гурова, 7",
|
"name": "ПВЗ г. Донецк, пр-кт Гурова, 7",
|
||||||
"address": "г.Донецк, пр.Гурова, 7",
|
"address": "г. Донецк, пр-кт Гурова, 7",
|
||||||
"link": "https://ozon.ru/point/517061",
|
"link": "https://ozon.ru/t/R9egGrb",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"coordinates": [
|
"coordinates": [
|
||||||
37.807934,
|
37.807755,
|
||||||
48.014371
|
48.016661
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Донецк, ул.Челюскинцев, 167",
|
"name": "ПВЗ г. Донецк, пр-кт Мира, 13",
|
||||||
"address": "г.Донецк, ул.Челюскинцев, 167",
|
"address": "г. Донецк, пр-кт Мира, 13",
|
||||||
"link": "https://ozon.ru/point/517059",
|
"link": "https://ozon.ru/t/EMEA7XD",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -107,9 +97,9 @@
|
|||||||
37.835405,
|
37.835405,
|
||||||
48.002471
|
48.002471
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Донецк, пр.Ильича, 32",
|
"name": "ПВЗ г. Донецк, пр-кт Ильича, 32",
|
||||||
"address": "г.Донецк, пр.Ильича, 32",
|
"address": "г. Донецк, пр-кт Ильича, 32",
|
||||||
"link": "https://ozon.ru/point/514844",
|
"link": "https://ozon.ru/t/P9LAMA4",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -117,9 +107,9 @@
|
|||||||
38.026077,
|
38.026077,
|
||||||
48.045442
|
48.045442
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Макеевка, пр.Генерала Данилова, 71б",
|
"name": "ПВЗ г. Макеевка, ул. Ленина, 85",
|
||||||
"address": "г.Макеевка, пр.Генерала Данилова, 71б",
|
"address": "г. Макеевка, ул. Ленина, 85",
|
||||||
"link": "https://ozon.ru/point/534902",
|
"link": "https://ozon.ru/point/1224455",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -127,8 +117,8 @@
|
|||||||
37.778362,
|
37.778362,
|
||||||
47.978513
|
47.978513
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г. Донецк, ул.Воровского, 9",
|
"name": "ПВЗ г. Донецк, ул. Воровского, 9",
|
||||||
"address": "г. Донецк, ул.Воровского, 9",
|
"address": "г. Донецк, ул. Воровского, 9",
|
||||||
"link": "https://ozon.ru/point/534899",
|
"link": "https://ozon.ru/point/534899",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
@@ -137,8 +127,8 @@
|
|||||||
38.084391,
|
38.084391,
|
||||||
47.11915
|
47.11915
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Новоазовск, ул.Ленина, 48",
|
"name": "ПВЗ г. Новоазовск, ул. Ленина, 48",
|
||||||
"address": "г.Новоазовск, ул.Ленина, 48",
|
"address": "г. Новоазовск, ул. Ленина, 48",
|
||||||
"link": "https://ozon.ru/point/533305",
|
"link": "https://ozon.ru/point/533305",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
@@ -147,8 +137,8 @@
|
|||||||
37.795933,
|
37.795933,
|
||||||
48.021495
|
48.021495
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Донецк, ул.Университетская, 76",
|
"name": "ПВЗ г. Донецк, ул. Университетская, 76",
|
||||||
"address": "г.Донецк, ул.Университетская, 76",
|
"address": "г. Донецк, ул. Университетская, 76",
|
||||||
"link": "https://ozon.ru/point/538086",
|
"link": "https://ozon.ru/point/538086",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
@@ -157,9 +147,9 @@
|
|||||||
37.958366,
|
37.958366,
|
||||||
48.084373
|
48.084373
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Макеевка, ул.Рябцева, 1",
|
"name": "ПВЗ г. Макеевка, ул. Ленина, 152",
|
||||||
"address": "г.Макеевка, ул.Рябцева, 1",
|
"address": "г. Макеевка, ул. Ленина, 152",
|
||||||
"link": "https://ozon.ru/point/517062",
|
"link": "https://ozon.ru/point/1215795",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -167,8 +157,8 @@
|
|||||||
37.907342,
|
37.907342,
|
||||||
47.977482
|
47.977482
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Донецк, ул.Прожекторная, 3",
|
"name": "ПВЗ г. Донецк, ул. Прожекторная, 3",
|
||||||
"address": "г.Донецк, ул.Прожекторная, 3",
|
"address": "г. Донецк, ул. Прожекторная, 3",
|
||||||
"link": "https://ozon.ru/point/533308",
|
"link": "https://ozon.ru/point/533308",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
@@ -177,8 +167,8 @@
|
|||||||
37.864259,
|
37.864259,
|
||||||
48.009494
|
48.009494
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Донецк, бул.Шевченко, 129",
|
"name": "ПВЗ г. Донецк, б-р Шевченко, 129",
|
||||||
"address": "г.Донецк, бул.Шевченко, 129",
|
"address": "г. Донецк, б-р Шевченко, 129",
|
||||||
"link": "https://ozon.ru/point/538180",
|
"link": "https://ozon.ru/point/538180",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
},
|
},
|
||||||
@@ -187,9 +177,239 @@
|
|||||||
37.963765,
|
37.963765,
|
||||||
48.054088
|
48.054088
|
||||||
],
|
],
|
||||||
"name": "ПВЗ г.Макеевка, ул.Рябцева, 1",
|
"name": "ПВЗ г. Макеевка, ул. Ленина, 85",
|
||||||
"address": "г.Макеевка, ул.Рябцева, 1",
|
"address": "г. Макеевка, ул. Ленина, 85",
|
||||||
"link": "https://ozon.ru/point/517062",
|
"link": "https://ozon.ru/point/1224455",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.799239,
|
||||||
|
47.987542
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, ул. Первомайская, 19",
|
||||||
|
"address": "г. Донецк, ул. Первомайская, 19",
|
||||||
|
"link": "https://ozon.ru/point/549338",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.694468,
|
||||||
|
47.942444
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, ул. Харитонова, 3а",
|
||||||
|
"address": "г. Донецк, ул. Харитонова, 3а",
|
||||||
|
"link": "https://ozon.ru/t/lNMb4a7",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
38.02918,
|
||||||
|
48.298144
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, ул. Первомайская, 19",
|
||||||
|
"address": "г. Донецк, ул. Первомайская, 19",
|
||||||
|
"link": "https://ozon.ru/point/549338",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.769091,
|
||||||
|
48.007909
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, пр-кт Панфилова, 118",
|
||||||
|
"address": "г. Донецк, пр-кт Панфилова, 118",
|
||||||
|
"link": "https://ozon.ru/point/565085",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
36.792443,
|
||||||
|
46.755655
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Макеевка, ул. Ленина, 85",
|
||||||
|
"address": "г. Макеевка, ул. Ленина, 85",
|
||||||
|
"link": "https://ozon.ru/point/1224455",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.828003,
|
||||||
|
47.991136
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, ул. Мушкетовская, 5",
|
||||||
|
"address": "г. Донецк, ул. Мушкетовская, 5",
|
||||||
|
"link": "https://ozon.ru/point/1217155",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.777302,
|
||||||
|
48.060357
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, пр-кт Партизанский, 75",
|
||||||
|
"address": "г. Донецк, пр-кт Партизанский, 75",
|
||||||
|
"link": "https://ozon.ru/point/1224264",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.82926,
|
||||||
|
48.008801
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, б-р Шевченко, 27",
|
||||||
|
"address": "г. Донецк, б-р Шевченко, 27",
|
||||||
|
"link": "https://ozon.ru/point/549324",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.801502,
|
||||||
|
47.97817
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, ул. И. Ткаченко, 121а",
|
||||||
|
"address": "г. Донецк, ул. И. Ткаченко, 121а",
|
||||||
|
"link": "https://ozon.ru/point/565090",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
36.815574,
|
||||||
|
46.747857
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, ул. Харитонова, 3а",
|
||||||
|
"address": "г. Донецк, ул. Харитонова, 3а",
|
||||||
|
"link": "https://ozon.ru/t/lNMb4a7",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.766495,
|
||||||
|
47.942046
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, ул. Шутова, 16а",
|
||||||
|
"address": "г. Донецк, ул. Шутова, 16а",
|
||||||
|
"link": "https://ozon.ru/point/1224266",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
38.063011,
|
||||||
|
48.327194
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Макеевка, ул. Ленина, 85",
|
||||||
|
"address": "г. Макеевка, ул. Ленина, 85",
|
||||||
|
"link": "https://ozon.ru/point/1224455",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.810225,
|
||||||
|
48.032287
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, ул. Северская, 23а",
|
||||||
|
"address": "г. Донецк, ул. Северская, 23а",
|
||||||
|
"link": "https://ozon.ru/point/1215785",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
38.026527,
|
||||||
|
48.048848
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Макеевка, микрорайон Зеленый, 6а",
|
||||||
|
"address": "г. Макеевка, микрорайон Зеленый, 6а",
|
||||||
|
"link": "https://ozon.ru/point/534902",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
38.155744,
|
||||||
|
48.036233
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Харцызск, ул. Октябрьская, 34б",
|
||||||
|
"address": "г. Харцызск, ул. Октябрьская, 34б",
|
||||||
|
"link": "https://ozon.ru/point/1224267",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
38.068456,
|
||||||
|
47.666574
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Комсомольское, ул. Горького, 69б",
|
||||||
|
"address": "г. Комсомольское, ул. Горького, 69б",
|
||||||
|
"link": "https://ozon.ru/point/1215789",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.898826,
|
||||||
|
47.989924
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, ул. Вышнеградского, 25",
|
||||||
|
"address": "г. Донецк, ул. Вышнеградского, 25",
|
||||||
|
"link": "https://ozon.ru/t/7nArwJX",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.905976,
|
||||||
|
48.071797
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Макеевка, ул. Коккинаки, 60",
|
||||||
|
"address": "г. Макеевка, ул. Коккинаки, 60",
|
||||||
|
"link": "https://ozon.ru/point/1236281",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.8616,
|
||||||
|
48.03683
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Макеевка, ул. Ленина, 85",
|
||||||
|
"address": "г. Макеевка, ул. Ленина, 85",
|
||||||
|
"link": "https://ozon.ru/point/1224455",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.85559,
|
||||||
|
47.977886
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, ул. Майская, 18б",
|
||||||
|
"address": "г. Донецк, ул. Майская, 18б",
|
||||||
|
"link": "https://ozon.ru/point/1236293",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.873395,
|
||||||
|
47.979135
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, ул. Майская, 18б",
|
||||||
|
"address": "г. Донецк, ул. Майская, 18б",
|
||||||
|
"link": "https://ozon.ru/point/1236293",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.782243,
|
||||||
|
48.020904
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Донецк, пр-кт Панфилова, 118",
|
||||||
|
"address": "г. Донецк, пр-кт Панфилова, 118",
|
||||||
|
"link": "https://ozon.ru/point/565085",
|
||||||
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.931821,
|
||||||
|
48.026767
|
||||||
|
],
|
||||||
|
"name": "ПВЗ г. Макеевка, ул. Рябцева, 1",
|
||||||
|
"address": "г. Макеевка, ул. Рябцева, 1",
|
||||||
|
"link": "https://ozon.ru/t/akMALGL",
|
||||||
"operationTime": "пн-вс с 9:00 до 17:45"
|
"operationTime": "пн-вс с 9:00 до 17:45"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
46
data/06_tvoya_dostavka.json
Normal file
46
data/06_tvoya_dostavka.json
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"name": "Твоя доставка",
|
||||||
|
"source": "https://t.me/twoya_dostavka/650",
|
||||||
|
"points": [
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.833752,
|
||||||
|
47.991413
|
||||||
|
],
|
||||||
|
"name": "пр-кт Павших Коммунаров 96",
|
||||||
|
"link": "https://ozon.ru/point/1233432",
|
||||||
|
"address": "Донецк, пр-кт Павших Коммунаров 96",
|
||||||
|
"operationTime": "Ежедневно с 9.00-18.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.778757,
|
||||||
|
47.956758
|
||||||
|
],
|
||||||
|
"name": "ул.Актюбинская 5а",
|
||||||
|
"link": "https://ozon.ru/point/1233413",
|
||||||
|
"address": "Донецк, ул.Актюбинская 5а",
|
||||||
|
"operationTime": "Ежедневно с 9.00-18.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.805042,
|
||||||
|
47.990069
|
||||||
|
],
|
||||||
|
"name": "ул. Артема 41 Каб.113",
|
||||||
|
"link": "https://ozon.ru/point/1233419",
|
||||||
|
"address": "Донецк, ул. Артема 41 Каб.113",
|
||||||
|
"operationTime": "Ежедневно с 9.00-18.00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"coordinates": [
|
||||||
|
37.777041,
|
||||||
|
47.966956
|
||||||
|
],
|
||||||
|
"name": "ул. Артема 41 Каб.113",
|
||||||
|
"link": "https://ozon.ru/point/1236298",
|
||||||
|
"address": "Донецк, ул. Днепродзержинская 5",
|
||||||
|
"operationTime": "Ежедневно с 9.00-18.00"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
16
eslint.config.js
Normal file
16
eslint.config.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import globals from "globals";
|
||||||
|
import pluginJs from "@eslint/js";
|
||||||
|
|
||||||
|
export default [
|
||||||
|
{
|
||||||
|
// files: ["src/**/*.js"],
|
||||||
|
ignores: [
|
||||||
|
"dist/**/*.js",
|
||||||
|
"!scripts/**/*.js"
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
languageOptions: { globals: { ...globals.browser, ...globals.node } },
|
||||||
|
},
|
||||||
|
pluginJs.configs.recommended,
|
||||||
|
];
|
||||||
31
index.html
31
index.html
@@ -1,31 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
|
|
||||||
<title>БЕСПЛАТНЫЕ ПВЗ ОЗОН В ДНР</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="map" class="map"></div>
|
|
||||||
<div id="popup" class="ol-popup">
|
|
||||||
<a href="#" id="popup-closer" class="ol-popup-closer">✖</a>
|
|
||||||
<div id="popup-content">
|
|
||||||
<p id="popup-name"></p>
|
|
||||||
<a id="popup-address"></a>
|
|
||||||
<p>График работы: <span id="popup-operation-time">неизвестно</span></p>
|
|
||||||
<p>
|
|
||||||
Отсканируйте QR или нажмите на него
|
|
||||||
<a id="popup-link" href="">
|
|
||||||
<canvas id="popup-canvas"></canvas>
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<a id="popup-source">Источник</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<script type="module" src="/main.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
38
map.js
38
map.js
@@ -1,38 +0,0 @@
|
|||||||
import 'ol/ol.css';
|
|
||||||
import Map from 'ol/Map';
|
|
||||||
import View from 'ol/View';
|
|
||||||
import TileLayer from 'ol/layer/Tile';
|
|
||||||
import { fromLonLat } from 'ol/proj';
|
|
||||||
import { XYZ } from 'ol/source';
|
|
||||||
import { createXYZ } from 'ol/tilegrid';
|
|
||||||
|
|
||||||
const MAP_TARGET = 'map';
|
|
||||||
const MAP_CENTER = fromLonLat([37.57725139554275, 48.02287702854201]);
|
|
||||||
const MAP_ZOOM = 8.5;
|
|
||||||
|
|
||||||
const customTileSource = new TileLayer({
|
|
||||||
source: new XYZ({
|
|
||||||
// url: 'https://tile-server.ozon.ru/tile/default/{z}/{x}/{y}.png'
|
|
||||||
|
|
||||||
tileUrlFunction: ([z, x, y]) => {
|
|
||||||
const s = x % 4 + (y % 4) * 4
|
|
||||||
return `https://i${s}.wikimapia.org/?x=${x}&y=${y}&zoom=${z}&type=map&lng=1`
|
|
||||||
},
|
|
||||||
maxZoom: 18,
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
export const view = new View({
|
|
||||||
center: MAP_CENTER,
|
|
||||||
zoom: MAP_ZOOM,
|
|
||||||
})
|
|
||||||
|
|
||||||
const map = new Map({
|
|
||||||
target: MAP_TARGET,
|
|
||||||
layers: [
|
|
||||||
customTileSource
|
|
||||||
],
|
|
||||||
view,
|
|
||||||
});
|
|
||||||
|
|
||||||
export default map;
|
|
||||||
7572
merged-data.json
7572
merged-data.json
File diff suppressed because it is too large
Load Diff
1314
package-lock.json
generated
1314
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
10
package.json
10
package.json
@@ -6,15 +6,23 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "vite build",
|
"build": "vite build",
|
||||||
"preview": "vite preview"
|
"preview": "vite preview",
|
||||||
|
"lint": "eslint"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@eslint/js": "^9.4.0",
|
||||||
|
"collapse-white-space": "^2.1.0",
|
||||||
|
"eslint": "^9.4.0",
|
||||||
|
"globals": "^15.4.0",
|
||||||
"vite": "^5.2.0",
|
"vite": "^5.2.0",
|
||||||
|
"vite-plugin-html-config": "^1.0.11",
|
||||||
"vite-plugin-radar": "^0.9.6",
|
"vite-plugin-radar": "^0.9.6",
|
||||||
|
"vite-plugin-static-copy": "^1.0.5",
|
||||||
"vite-plugin-webfont-dl": "^3.9.4"
|
"vite-plugin-webfont-dl": "^3.9.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fastest-levenshtein": "^1.0.16",
|
"fastest-levenshtein": "^1.0.16",
|
||||||
|
"js-cookie": "^3.0.5",
|
||||||
"jsdom": "^24.1.0",
|
"jsdom": "^24.1.0",
|
||||||
"modern-async": "^2.0.0",
|
"modern-async": "^2.0.0",
|
||||||
"node-fetch": "^3.3.2",
|
"node-fetch": "^3.3.2",
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import fs from "node:fs/promises";
|
import fs from "node:fs/promises";
|
||||||
import { asyncMap } from "modern-async";
|
import { asyncMap } from "modern-async";
|
||||||
import { getDistance } from "ol/sphere.js";
|
import { getDistance } from "ol/sphere.js";
|
||||||
|
import { extractIDFromURL } from "./utils.js";
|
||||||
|
|
||||||
function removeDuplicatesByUrl(points) {
|
function removeDuplicatesByUrl(points) {
|
||||||
const uniquePoints = [];
|
const uniquePoints = [];
|
||||||
@@ -64,6 +65,12 @@ async function main() {
|
|||||||
data = data.flatMap((v) => v);
|
data = data.flatMap((v) => v);
|
||||||
data = removeDuplicatesByUrl(data);
|
data = removeDuplicatesByUrl(data);
|
||||||
data = removeDuplicatesByRadius(data, 10);
|
data = removeDuplicatesByRadius(data, 10);
|
||||||
|
|
||||||
|
// pick all except url
|
||||||
|
data = data.map(x => {
|
||||||
|
const { link, ...rest } = x;
|
||||||
|
return { id: extractIDFromURL(link), ...rest };
|
||||||
|
});
|
||||||
await fs.writeFile("merged-data.json", JSON.stringify(data, undefined, 2));
|
await fs.writeFile("merged-data.json", JSON.stringify(data, undefined, 2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,49 +1,15 @@
|
|||||||
import fs from "node:fs/promises";
|
import {
|
||||||
import { asyncMap } from "modern-async";
|
woyag,
|
||||||
import { getFinalURL } from "./utils.js";
|
// sevenDostavka,
|
||||||
import ozonWbDpr from "./update/ozon-wb-dpr.js";
|
ozonWbDpr,
|
||||||
import sevenDostavka from "./update/sevenDostavka.js";
|
globalExpress
|
||||||
|
} from './update/index.js';
|
||||||
async function woyag() {
|
|
||||||
const apiResponse = await fetch("https://login.woyag.ru/ajax/pvz-list");
|
|
||||||
const json = await apiResponse.json();
|
|
||||||
|
|
||||||
let points = json.filter((point) => !!point.link);
|
|
||||||
|
|
||||||
points = await asyncMap(points, async (point) => {
|
|
||||||
const link = await getFinalURL(point.link).then(u => {
|
|
||||||
const final = new URL(u);
|
|
||||||
final.search = '';
|
|
||||||
return final.toString();
|
|
||||||
})
|
|
||||||
|
|
||||||
return {
|
|
||||||
coordinates: [parseFloat(point["geo_lng"]), parseFloat(point["geo_lat"])],
|
|
||||||
name: point.name,
|
|
||||||
address: point.address,
|
|
||||||
link,
|
|
||||||
operationTime: "пн-вс с 9:00 до 17:45",
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
await fs.writeFile(
|
|
||||||
"data/01_woyag.json",
|
|
||||||
JSON.stringify(
|
|
||||||
{
|
|
||||||
name: "WOЯЖ",
|
|
||||||
source: "https://login.woyag.ru/map",
|
|
||||||
points,
|
|
||||||
},
|
|
||||||
undefined,
|
|
||||||
4
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
await woyag();
|
await woyag();
|
||||||
await sevenDostavka();
|
// await sevenDostavka();
|
||||||
await ozonWbDpr();
|
await ozonWbDpr();
|
||||||
|
await globalExpress();
|
||||||
}
|
}
|
||||||
|
|
||||||
main();
|
main();
|
||||||
|
|||||||
193
scripts/update/globalExpress.js
Normal file
193
scripts/update/globalExpress.js
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
import fs from "node:fs/promises";
|
||||||
|
|
||||||
|
import { JSDOM } from "jsdom";
|
||||||
|
import { asyncMap } from "modern-async";
|
||||||
|
import { getTelegramMessage } from "../utils.js";
|
||||||
|
import { collapseWhiteSpace } from "collapse-white-space";
|
||||||
|
|
||||||
|
const OUTPUT_FILE = "data/02_global-express.json";
|
||||||
|
const MAIN_URL = "https://t.me/global_express_dnr/784";
|
||||||
|
|
||||||
|
/*
|
||||||
|
function generateReadableSchedule(schedule) {
|
||||||
|
const dayMappings = {
|
||||||
|
mon: "Пн",
|
||||||
|
tue: "Вт",
|
||||||
|
wed: "Ср",
|
||||||
|
thu: "Чт",
|
||||||
|
fri: "Пт",
|
||||||
|
sat: "Сб",
|
||||||
|
sun: "Вс",
|
||||||
|
};
|
||||||
|
|
||||||
|
let readableSchedule = "";
|
||||||
|
|
||||||
|
Object.keys(dayMappings).forEach((key) => {
|
||||||
|
const day = dayMappings[key];
|
||||||
|
const daySchedule = schedule[key];
|
||||||
|
|
||||||
|
if (
|
||||||
|
daySchedule &&
|
||||||
|
daySchedule.open_time !== null &&
|
||||||
|
daySchedule.close_time !== null
|
||||||
|
) {
|
||||||
|
const openTime = formatTime(daySchedule.open_time);
|
||||||
|
const closeTime = formatTime(daySchedule.close_time);
|
||||||
|
const breakStart = daySchedule.break_open_time
|
||||||
|
? daySchedule.break_open_time
|
||||||
|
: daySchedule.close_time;
|
||||||
|
const breakEnd = daySchedule.break_close_time
|
||||||
|
? daySchedule.break_close_time
|
||||||
|
: daySchedule.close_time;
|
||||||
|
|
||||||
|
if (breakStart === daySchedule.close_time) {
|
||||||
|
readableSchedule += `${day} ${openTime} - ${closeTime}\n`;
|
||||||
|
} else {
|
||||||
|
const breakStartFormatted = formatTime(breakStart);
|
||||||
|
const breakEndFormatted = formatTime(breakEnd);
|
||||||
|
readableSchedule += `${day} ${openTime} - ${breakStartFormatted}, ${breakEndFormatted} - ${closeTime}\n`;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
readableSchedule += `${day} Выходной\n`;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return readableSchedule.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
function formatTime(minutes) {
|
||||||
|
if (minutes < 0) return "00:00"; // Время меньше 0, возвращаем 00:00
|
||||||
|
const hours = Math.floor(minutes / 60);
|
||||||
|
const mins = minutes % 60;
|
||||||
|
return `${padZero(hours)}:${padZero(mins)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function padZero(num) {
|
||||||
|
return num.toString().padStart(2, "0");
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
async function getPVZFromPost(post) {
|
||||||
|
const message = await getTelegramMessage(post);
|
||||||
|
|
||||||
|
const dom = new JSDOM(message.text);
|
||||||
|
const document = dom.window.document;
|
||||||
|
|
||||||
|
// Ищем координаты, которые всегда в скобках, возможно с пробелами
|
||||||
|
const coordinatesNode = Array.from(document.querySelectorAll("br"))
|
||||||
|
.map((br) => br.nextSibling)
|
||||||
|
.find(
|
||||||
|
(node) =>
|
||||||
|
node &&
|
||||||
|
node.nodeType === 3 &&
|
||||||
|
/\(\s*\d+(\.\d+)?\s*,\s*\d+(\.\d+)?\s*\)/.test(node.nodeValue.trim())
|
||||||
|
);
|
||||||
|
|
||||||
|
let coordinates = null;
|
||||||
|
if (coordinatesNode) {
|
||||||
|
const matches = coordinatesNode.nodeValue.trim().match(/\(\s*([^)]*)\s*\)/);
|
||||||
|
if (matches) {
|
||||||
|
const [lat, lng] = matches[1]
|
||||||
|
.split(",")
|
||||||
|
.map((coord) => parseFloat(coord.trim()));
|
||||||
|
coordinates = [lng, lat];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ищем ссылку, которая начинается с https://ozon.ru/point
|
||||||
|
const linkNode = document.querySelector('a[href^="https://ozon.ru/point"]');
|
||||||
|
const link = linkNode ? linkNode.href : null;
|
||||||
|
|
||||||
|
return {
|
||||||
|
coordinates,
|
||||||
|
link,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getFromTelegram() {
|
||||||
|
const message = await getTelegramMessage(MAIN_URL);
|
||||||
|
|
||||||
|
const dom = new JSDOM(message.text);
|
||||||
|
const document = dom.window.document;
|
||||||
|
|
||||||
|
const addressesSection = Array.from(document.querySelectorAll("b")).find(
|
||||||
|
(b) => b.textContent.includes("Наши адреса ПВЗ с OZON")
|
||||||
|
);
|
||||||
|
const privilegesSection = Array.from(document.querySelectorAll("a")).find(
|
||||||
|
(u) => u.textContent.includes("КАК ЗАКАЗАТЬ САМОСТОЯТЕЛЬНО С : OZON/ Wildberries/ Яндекс Маркет")
|
||||||
|
);
|
||||||
|
|
||||||
|
const links = [];
|
||||||
|
let currentElement = addressesSection.nextElementSibling;
|
||||||
|
|
||||||
|
while (currentElement && currentElement !== privilegesSection) {
|
||||||
|
if (currentElement.tagName === "A") {
|
||||||
|
links.push(currentElement);
|
||||||
|
}
|
||||||
|
currentElement = currentElement.nextElementSibling;
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await asyncMap(links, async (link) => {
|
||||||
|
const textContent = collapseWhiteSpace(
|
||||||
|
link.innerHTML.replace(/<br\s*\/?>/gi, " ")
|
||||||
|
);
|
||||||
|
let pvzData = await getPVZFromPost(link.href.replace('Mariupol_global_express', 'global_express_dnr'));
|
||||||
|
|
||||||
|
if (!pvzData || !pvzData.coordinates) return undefined;
|
||||||
|
|
||||||
|
return {
|
||||||
|
...pvzData,
|
||||||
|
name: textContent,
|
||||||
|
address: textContent,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
return data.filter(Boolean);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
async function getFromVK() {
|
||||||
|
const group_id = 124759560;
|
||||||
|
const access_token = "";
|
||||||
|
const v = "5.199";
|
||||||
|
|
||||||
|
const res = await fetch(
|
||||||
|
`https://api.vk.com/method/groups.getAddresses?group_id=${group_id}&access_token=${access_token}&count=999&v=${v}`,
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
"Accept-Language": "ru,en;q=0.9",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
const items = (await res.json()).response.items;
|
||||||
|
|
||||||
|
return items.map((item) => ({
|
||||||
|
address: `${item.city.title}, ${item.address}`,
|
||||||
|
timetable: item.timetable,
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
async function globalExpress() {
|
||||||
|
const points = await getFromTelegram();
|
||||||
|
// const points = await getFromVK();
|
||||||
|
|
||||||
|
fs.writeFile(
|
||||||
|
OUTPUT_FILE,
|
||||||
|
JSON.stringify(
|
||||||
|
{
|
||||||
|
name: "Global Express",
|
||||||
|
source: MAIN_URL,
|
||||||
|
points: points.map((p) => ({
|
||||||
|
...p,
|
||||||
|
operationTime: `<a href="https://vk.com/global_express_dnr?w=address-124759560_72654">ГРАФИК РАБОТЫ</a>`,
|
||||||
|
})),
|
||||||
|
},
|
||||||
|
undefined,
|
||||||
|
4
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default globalExpress;
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
export { default as woyag } from "./woyag.js";
|
||||||
|
export { default as ozonWbDpr } from "./ozon-wb-dpr.js";
|
||||||
|
export { default as sevenDostavka } from "./sevenDostavka.js";
|
||||||
|
export { default as globalExpress } from "./globalExpress.js";
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import { JSDOM } from "jsdom";
|
|||||||
import { asyncMap } from "modern-async";
|
import { asyncMap } from "modern-async";
|
||||||
import fs from "node:fs/promises";
|
import fs from "node:fs/promises";
|
||||||
|
|
||||||
|
const OUTPUT_FILE = "data/03_ozon-wb-dpr.json";
|
||||||
|
|
||||||
const MAIN_URL = "https://t.me/ozon_wb_dpr/627";
|
const MAIN_URL = "https://t.me/ozon_wb_dpr/627";
|
||||||
|
|
||||||
const QR_FOR_PVZ_STRING = "QR для ПВЗ";
|
const QR_FOR_PVZ_STRING = "QR для ПВЗ";
|
||||||
@@ -81,8 +83,8 @@ async function getFromSite() {
|
|||||||
const scripts = document.querySelectorAll("script");
|
const scripts = document.querySelectorAll("script");
|
||||||
|
|
||||||
for (let script of scripts) {
|
for (let script of scripts) {
|
||||||
if (script.textContent.includes('descr: "Бесплатный озон')) {
|
if (script.textContent.includes('descr:"Бесплатный озон')) {
|
||||||
let x = script.textContent.split("[\n{\n").pop().split("\n},\n]")[0];
|
let x = script.textContent.split("[{").pop().split("},]")[0];
|
||||||
|
|
||||||
if (x) {
|
if (x) {
|
||||||
const points = new Function(`return [{${x}}]`)();
|
const points = new Function(`return [{${x}}]`)();
|
||||||
@@ -108,7 +110,7 @@ async function ozonWbDpr() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
await fs.writeFile(
|
await fs.writeFile(
|
||||||
"data/03_ozon-wb-dpr.json",
|
OUTPUT_FILE,
|
||||||
JSON.stringify(
|
JSON.stringify(
|
||||||
{
|
{
|
||||||
name: "ПВЗ ДНР",
|
name: "ПВЗ ДНР",
|
||||||
|
|||||||
@@ -1,12 +1,33 @@
|
|||||||
import fs from "node:fs/promises";
|
import fs from "node:fs/promises";
|
||||||
import { JSDOM } from "jsdom";
|
import { JSDOM } from "jsdom";
|
||||||
|
|
||||||
|
const OUTPUT_FILE = "data/99_sevenDostavka.json";
|
||||||
|
|
||||||
const linkRegexp = new RegExp(/https:\/\/ozon\.ru\/point\/\d+/);
|
const linkRegexp = new RegExp(/https:\/\/ozon\.ru\/point\/\d+/);
|
||||||
|
|
||||||
async function sevenDostavka() {
|
async function sevenDostavka() {
|
||||||
const res = await fetch("https://dostavka.7telecom.ru");
|
const res = await fetch(
|
||||||
|
"https://yandex.ru/maps/?from=mapframe&ll=37.686304%2C47.189563&mode=usermaps&source=mapframe&um=constructor%3A3126b0c176a2b846a523a2cd2488869ea2f984ec51bcb43b2807ff27a2de39f4&utm_source=share&z=11",
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
|
||||||
|
'Accept-Encoding': 'gzip, deflate, br',
|
||||||
|
'Accept-Language': 'en-US,en;q=0.9',
|
||||||
|
'Cache-Control': 'no-cache',
|
||||||
|
'Connection': 'keep-alive',
|
||||||
|
'DNT': '1',
|
||||||
|
'Host': 'yandex.ru',
|
||||||
|
'Pragma': 'no-cache',
|
||||||
|
'Referer': 'https://yandex.ru/',
|
||||||
|
'Upgrade-Insecure-Requests': '1',
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
const htmlText = await res.text();
|
const htmlText = await res.text();
|
||||||
|
|
||||||
|
console.log(htmlText)
|
||||||
|
|
||||||
const dom = new JSDOM(htmlText);
|
const dom = new JSDOM(htmlText);
|
||||||
const document = dom.window.document;
|
const document = dom.window.document;
|
||||||
const scripts = document.querySelectorAll("script");
|
const scripts = document.querySelectorAll("script");
|
||||||
@@ -19,7 +40,7 @@ async function sevenDostavka() {
|
|||||||
const points = new Function(`return [{${x}}]`)();
|
const points = new Function(`return [{${x}}]`)();
|
||||||
|
|
||||||
fs.writeFile(
|
fs.writeFile(
|
||||||
"data/99_sevenDostavka.json",
|
OUTPUT_FILE,
|
||||||
JSON.stringify(
|
JSON.stringify(
|
||||||
{
|
{
|
||||||
name: "7dostavka",
|
name: "7dostavka",
|
||||||
@@ -44,4 +65,4 @@ async function sevenDostavka() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default sevenDostavka;
|
export default sevenDostavka;
|
||||||
|
|||||||
43
scripts/update/woyag.js
Normal file
43
scripts/update/woyag.js
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
import fs from "node:fs/promises";
|
||||||
|
import { asyncMap } from "modern-async";
|
||||||
|
import { getFinalURL } from "../utils.js";
|
||||||
|
|
||||||
|
const OUTPUT_FILE = "data/01_woyag.json";
|
||||||
|
|
||||||
|
async function woyag() {
|
||||||
|
const apiResponse = await fetch("https://login.woyag.ru/ajax/pvz-list");
|
||||||
|
const json = await apiResponse.json();
|
||||||
|
|
||||||
|
let points = json.filter((point) => !!point.link);
|
||||||
|
|
||||||
|
points = await asyncMap(points, async (point) => {
|
||||||
|
const link = await getFinalURL(point.link).then(u => {
|
||||||
|
const final = new URL(u);
|
||||||
|
final.search = '';
|
||||||
|
return final.toString();
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
coordinates: [parseFloat(point["geo_lng"]), parseFloat(point["geo_lat"])],
|
||||||
|
name: point.name,
|
||||||
|
address: point.address,
|
||||||
|
link,
|
||||||
|
operationTime: "пн-вс с 9:00 до 18:00",
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
await fs.writeFile(
|
||||||
|
OUTPUT_FILE,
|
||||||
|
JSON.stringify(
|
||||||
|
{
|
||||||
|
name: "WOЯЖ",
|
||||||
|
source: "https://login.woyag.ru/map",
|
||||||
|
points,
|
||||||
|
},
|
||||||
|
undefined,
|
||||||
|
4
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default woyag
|
||||||
@@ -46,6 +46,7 @@ export async function getFinalURL(url) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getTelegramMessage(input) {
|
export async function getTelegramMessage(input) {
|
||||||
|
console.log(input);
|
||||||
const url = new URL(input);
|
const url = new URL(input);
|
||||||
|
|
||||||
url.search = "?embed=1&mode=tme";
|
url.search = "?embed=1&mode=tme";
|
||||||
@@ -63,3 +64,15 @@ export async function getTelegramMessage(input) {
|
|||||||
.innerHTML,
|
.innerHTML,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Извлекает идентификатор пункта выдачи OZON из ссылки
|
||||||
|
* @param {string} url
|
||||||
|
*/
|
||||||
|
export function extractIDFromURL(url) {
|
||||||
|
const match = url.match(/https:\/\/ozon\.ru\/point\/([0-9]+)/);
|
||||||
|
if (match) {
|
||||||
|
return match[1];
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
33
src/analytics.js
Normal file
33
src/analytics.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
import { el } from "./utils.js";
|
||||||
|
|
||||||
|
class Analytics {
|
||||||
|
static event(name, data = undefined) {
|
||||||
|
if (typeof ym !== 'undefined') {
|
||||||
|
// eslint-disable-next-line no-undef
|
||||||
|
ym(window.YANDEX_METRICA_ID, 'reachGoal', name, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
|
const popupPVZId = el("popup-pvz-id");
|
||||||
|
|
||||||
|
const popupLink = el("popup-link");
|
||||||
|
const sourceLink = el("popup-source");
|
||||||
|
const infoPopupButton = el("info-popup-button");
|
||||||
|
|
||||||
|
popupLink.addEventListener("click", function () {
|
||||||
|
const pvzData = { pvz: popupPVZId.innerText };
|
||||||
|
Analytics.event("pvz-link-clicked", pvzData);
|
||||||
|
});
|
||||||
|
|
||||||
|
sourceLink.addEventListener("click", function () {
|
||||||
|
const pvzData = { pvz: popupPVZId.innerText };
|
||||||
|
Analytics.event("pvz-source-clicked", pvzData);
|
||||||
|
});
|
||||||
|
|
||||||
|
infoPopupButton.addEventListener("click", function () {
|
||||||
|
Analytics.event("info-popup-closed");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ function createFeatures(places) {
|
|||||||
geometry: new Point(fromLonLat(place.coordinates)),
|
geometry: new Point(fromLonLat(place.coordinates)),
|
||||||
name: `[${place.provider}] ${place.name}`,
|
name: `[${place.provider}] ${place.name}`,
|
||||||
address: place.address,
|
address: place.address,
|
||||||
link: place.link,
|
id: place.id,
|
||||||
source: place.source,
|
source: place.source,
|
||||||
operationTime: place.operationTime,
|
operationTime: place.operationTime,
|
||||||
});
|
});
|
||||||
123
src/index.html
Normal file
123
src/index.html
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
||||||
|
<title>БЕСПЛАТНЫЕ ПВЗ ОЗОН В ДНР</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<meta
|
||||||
|
name="description"
|
||||||
|
content="Бесплатные ПВЗ Озон в ДНР. Найдите ближайший пункт выдачи заказов Озон и воспользуйтесь бесплатной доставкой в ДНР."
|
||||||
|
/>
|
||||||
|
<meta
|
||||||
|
name="keywords"
|
||||||
|
content="ПВЗ Озон, бесплатная доставка, ДНР, пункты выдачи заказов, Озон ДНР"
|
||||||
|
/>
|
||||||
|
<meta property="og:title" content="БЕСПЛАТНЫЕ ПВЗ ОЗОН В ДНР" />
|
||||||
|
<meta
|
||||||
|
property="og:description"
|
||||||
|
content="Найдите ближайший пункт выдачи заказов Озон в ДНР и воспользуйтесь бесплатной доставкой."
|
||||||
|
/>
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:image" content="https://cdn1.ozone.ru/s3/cms/logo/og_ozon_ru.png" />
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css2?family=Roboto&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
<style>
|
||||||
|
#popup {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.ol-overlay-container > #popup {
|
||||||
|
display: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-popup {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
z-index: 999;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
background: white;
|
||||||
|
padding: 1rem;
|
||||||
|
font-size: 14pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-popup-content {
|
||||||
|
max-width: 1000px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-popup-content > footer {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1rem;
|
||||||
|
border-top: 1px solid black;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-popup-content > footer > button {
|
||||||
|
font-size: 14pt;
|
||||||
|
padding: 10px;
|
||||||
|
max-width: 300px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="info-popup" class="info-popup">
|
||||||
|
<div class="info-popup-content">
|
||||||
|
<h1>Важная информация перед использованием сайта</h1>
|
||||||
|
<h2>Пожалуйста, прочитайте внимательно</h2>
|
||||||
|
<p>
|
||||||
|
На сайте собраны данные о пунктах выдачи заказов (ПВЗ) от разных служб доставок, чтобы вам было удобнее выбирать. <b>Создатели сайта не несут ответственности за точность информации о пунктах выдачи.</b> Информация собирается из открытых источников. Для каждого ПВЗ указан источник, откуда была взята информация, чтобы вы смогли сами проверить.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<b>Как пользоваться?</b>
|
||||||
|
<ol>
|
||||||
|
<li>Найдите удобный для вас пункт выдачи заказов на карте.</li>
|
||||||
|
<li>Сканируйте QR-код или переходите по ссылке, чтобы добавить адрес пункта выдачи.</li>
|
||||||
|
<li>В приложении новый пункт выдачи отобразится как "обл. Ростовская, Пункт Партнёра XXXXXX". Не переживайте – это нормально. Просто сделайте заказ на этот адрес.</li>
|
||||||
|
<li>Когда получите уведомление о готовности заказа, приходите в выбранный вами пункт выдачи. Чтобы забрать заказ необходимо будет показать штрих-код из приложения.</li>
|
||||||
|
</ol>
|
||||||
|
</p>
|
||||||
|
<p>Сайт не является коммерческим и не связан ни с одной из служб доставки или с OZON.</p>
|
||||||
|
<p>Все товарные знаки, логотипы и обозначения, упомянутые на сайте, являются собственностью их соответствующих владельцев.</p>
|
||||||
|
<p>Проект является проектом с открытым исходным кодом. Если хотите посмотреть исходный код или поучаствовать в проекте - <a href="https://github.com/Maks1mS/free-ozon-dpr">вот ссылка</a>.</p>
|
||||||
|
<p>Для улучшения работы сайта и анализа трафика мы используем Яндекс Метрику.</p>
|
||||||
|
<p>Мы используем cookie-файлы. Вы можете прочитать подробнее о cookie-файлах или изменить настройки браузера. Продолжая пользоваться сайтом без изменения настроек, вы даёте согласие на использование ваших cookie-файлов.</p>
|
||||||
|
<footer>
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" name="no-show">
|
||||||
|
Больше не показывать
|
||||||
|
</label>
|
||||||
|
<button id="info-popup-button">Я прочитал и понял прочитанное</button>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="map" class="map"></div>
|
||||||
|
<div id="popup" class="ol-popup">
|
||||||
|
<a href="#" id="popup-closer" class="ol-popup-closer">✖</a>
|
||||||
|
<div id="popup-content">
|
||||||
|
<p id="popup-name"></p>
|
||||||
|
<a id="popup-address"></a>
|
||||||
|
<p>График работы: <span id="popup-operation-time">неизвестно</span></p>
|
||||||
|
<p>
|
||||||
|
Отсканируйте QR или нажмите на него
|
||||||
|
<a id="popup-link" href="">
|
||||||
|
<canvas id="popup-canvas"></canvas>
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Пункт Партнёра <span id="popup-pvz-id"></span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a id="popup-source">Источник</a>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script type="module" src="/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
51
src/info-popup.js
Normal file
51
src/info-popup.js
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
import Cookies from "js-cookie";
|
||||||
|
import { el } from "./utils.js";
|
||||||
|
|
||||||
|
const HIDE_INFO_POPUP = "hideInfoPopup";
|
||||||
|
|
||||||
|
let infoPopup;
|
||||||
|
let map;
|
||||||
|
|
||||||
|
function getHidePopup() {
|
||||||
|
const hidePopupCookie = Cookies.get(HIDE_INFO_POPUP);
|
||||||
|
return hidePopupCookie === 'true';
|
||||||
|
}
|
||||||
|
|
||||||
|
function setHidePopup(hidePopupCookie) {
|
||||||
|
Cookies.set(HIDE_INFO_POPUP, hidePopupCookie ? "true" : "false", { expires: 400 });
|
||||||
|
}
|
||||||
|
|
||||||
|
export function showPopup() {
|
||||||
|
infoPopup.style.display = "block";
|
||||||
|
map.style.display = "none";
|
||||||
|
|
||||||
|
const hidePopupCookie = getHidePopup();
|
||||||
|
|
||||||
|
if (hidePopupCookie) {
|
||||||
|
const noShowCheckbox = document.querySelector('input[name="no-show"]');
|
||||||
|
noShowCheckbox.checked = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function hidePopup() {
|
||||||
|
infoPopup.style.display = "none";
|
||||||
|
map.style.display = "block";
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
|
infoPopup = el("info-popup");
|
||||||
|
const noShowCheckbox = document.querySelector('input[name="no-show"]');
|
||||||
|
const confirmButton = document.querySelector(".info-popup footer button");
|
||||||
|
map = el("map");
|
||||||
|
|
||||||
|
const hidePopupCookie = getHidePopup();
|
||||||
|
|
||||||
|
if (!hidePopupCookie) {
|
||||||
|
showPopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
confirmButton.addEventListener("click", function () {
|
||||||
|
setHidePopup(noShowCheckbox.checked);
|
||||||
|
hidePopup();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -2,9 +2,11 @@ import "./style.css";
|
|||||||
|
|
||||||
import map from "./map";
|
import map from "./map";
|
||||||
|
|
||||||
|
import "./info-popup";
|
||||||
import "./popup";
|
import "./popup";
|
||||||
|
import "./analytics";
|
||||||
|
|
||||||
import mergedData from "./merged-data.json";
|
import mergedData from "../merged-data.json";
|
||||||
import { createFeatures } from "./features";
|
import { createFeatures } from "./features";
|
||||||
import VectorSource from "ol/source/Vector";
|
import VectorSource from "ol/source/Vector";
|
||||||
import VectorLayer from "ol/layer/Vector";
|
import VectorLayer from "ol/layer/Vector";
|
||||||
63
src/map.js
Normal file
63
src/map.js
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
import "ol/ol.css";
|
||||||
|
import Map from "ol/Map";
|
||||||
|
import View from "ol/View";
|
||||||
|
import TileLayer from "ol/layer/Tile";
|
||||||
|
import { fromLonLat } from "ol/proj";
|
||||||
|
import { XYZ } from "ol/source";
|
||||||
|
import { Control, defaults as defaultControls } from "ol/control.js";
|
||||||
|
// import { createXYZ } from 'ol/tilegrid';
|
||||||
|
import { showPopup } from "./info-popup.js";
|
||||||
|
|
||||||
|
const MAP_TARGET = "map";
|
||||||
|
const MAP_CENTER = fromLonLat([37.57725139554275, 48.02287702854201]);
|
||||||
|
const MAP_ZOOM = 8.5;
|
||||||
|
|
||||||
|
const customTileSource = new TileLayer({
|
||||||
|
source: new XYZ({
|
||||||
|
attributionsCollapsible: false,
|
||||||
|
attributions: ['© <a href="https://wikimapia.org/">Wikimapia</a>'],
|
||||||
|
tileUrlFunction: ([z, x, y]) => {
|
||||||
|
const s = (x % 4) + (y % 4) * 4;
|
||||||
|
return `https://i${s}.wikimapia.org/?x=${x}&y=${y}&zoom=${z}&type=map&lng=1`;
|
||||||
|
},
|
||||||
|
maxZoom: 18,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
class InfoButton extends Control {
|
||||||
|
constructor(opt_options) {
|
||||||
|
const options = opt_options || {};
|
||||||
|
|
||||||
|
const button = document.createElement("button");
|
||||||
|
button.innerHTML = "i";
|
||||||
|
|
||||||
|
const element = document.createElement("div");
|
||||||
|
element.className = "info-button ol-unselectable ol-control";
|
||||||
|
element.appendChild(button);
|
||||||
|
|
||||||
|
super({
|
||||||
|
element: element,
|
||||||
|
target: options.target,
|
||||||
|
});
|
||||||
|
|
||||||
|
button.addEventListener("click", this.showInfo.bind(this), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
showInfo() {
|
||||||
|
showPopup();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const view = new View({
|
||||||
|
center: MAP_CENTER,
|
||||||
|
zoom: MAP_ZOOM,
|
||||||
|
});
|
||||||
|
|
||||||
|
const map = new Map({
|
||||||
|
controls: defaultControls().extend([new InfoButton()]),
|
||||||
|
target: MAP_TARGET,
|
||||||
|
layers: [customTileSource],
|
||||||
|
view,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default map;
|
||||||
@@ -4,18 +4,20 @@ import QRCode from "qrcode";
|
|||||||
import { el } from "./utils";
|
import { el } from "./utils";
|
||||||
import { toLonLat } from "ol/proj";
|
import { toLonLat } from "ol/proj";
|
||||||
|
|
||||||
const container = el("popup");
|
const popup = el("popup");
|
||||||
const closer = el("popup-closer");
|
const closer = el("popup-closer");
|
||||||
|
|
||||||
const popupName = el("popup-name");
|
const popupName = el("popup-name");
|
||||||
const popupAddress = el("popup-address");
|
const popupAddress = el("popup-address");
|
||||||
const popupLink = el("popup-link");
|
const popupLink = el("popup-link");
|
||||||
|
const popupPVZId = el("popup-pvz-id");
|
||||||
const popupCanvas = el("popup-canvas");
|
const popupCanvas = el("popup-canvas");
|
||||||
const popupSource = el("popup-source");
|
const popupSource = el("popup-source");
|
||||||
const popupOperationTime = el("popup-operation-time");
|
const popupOperationTime = el("popup-operation-time");
|
||||||
|
|
||||||
|
|
||||||
const overlay = new Overlay({
|
const overlay = new Overlay({
|
||||||
element: container,
|
element: popup,
|
||||||
autoPan: true,
|
autoPan: true,
|
||||||
autoPanAnimation: {
|
autoPanAnimation: {
|
||||||
duration: 250,
|
duration: 250,
|
||||||
@@ -41,16 +43,21 @@ function onClick(event) {
|
|||||||
|
|
||||||
const [lon, lat] = toLonLat(coordinates);
|
const [lon, lat] = toLonLat(coordinates);
|
||||||
|
|
||||||
|
|
||||||
|
const pvzId = feature.get("id");
|
||||||
|
|
||||||
|
const link = `https://ozon.ru/point/${pvzId}`;
|
||||||
|
|
||||||
popupName.textContent = feature.get("name");
|
popupName.textContent = feature.get("name");
|
||||||
popupAddress.textContent = feature.get("address");
|
popupAddress.textContent = feature.get("address");
|
||||||
popupAddress.href = `https://yandex.ru/maps/?whatshere[point]=${lon},${lat}&whatshere[zoom]=18&l=map`
|
popupAddress.href = `https://yandex.ru/maps/?whatshere[point]=${lon},${lat}&whatshere[zoom]=18&l=map`;
|
||||||
popupLink.href = feature.get("link");
|
popupLink.href = link;
|
||||||
popupSource.href = feature.get("source");
|
popupSource.href = feature.get("source");
|
||||||
popupOperationTime.textContent = feature.get("operationTime") ?? "неизвестно";
|
popupOperationTime.innerHTML = feature.get("operationTime") ?? "неизвестно";
|
||||||
|
popupPVZId.innerText = pvzId;
|
||||||
|
|
||||||
QRCode.toCanvas(popupCanvas, feature.get("link"), function (error) {
|
QRCode.toCanvas(popupCanvas, link, function (error) {
|
||||||
if (error) console.error(error);
|
if (error) console.error(error);
|
||||||
console.log("success!");
|
|
||||||
});
|
});
|
||||||
|
|
||||||
overlay.setPosition(coordinates);
|
overlay.setPosition(coordinates);
|
||||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
@@ -69,5 +69,17 @@ body {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#popup-operation-time {
|
#popup-operation-time {
|
||||||
white-space: pre-line
|
white-space: pre-line;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ol-attribution a:hover {
|
||||||
|
color: var(--ol-brand-color);
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-popup-content > p { text-align:justify; }
|
||||||
|
|
||||||
|
.info-button {
|
||||||
|
top: 5em;
|
||||||
|
left: .5em;
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,57 @@
|
|||||||
import webfontDownload from 'vite-plugin-webfont-dl';
|
import webfontDownload from "vite-plugin-webfont-dl";
|
||||||
import { VitePluginRadar } from 'vite-plugin-radar'
|
import { VitePluginRadar } from "vite-plugin-radar";
|
||||||
|
import htmlPlugin from "vite-plugin-html-config";
|
||||||
|
import { viteStaticCopy } from "vite-plugin-static-copy";
|
||||||
|
|
||||||
|
const metas = [];
|
||||||
|
const headScripts = [];
|
||||||
|
|
||||||
|
console.log(process.env.YANDEX_METRICA_ID);
|
||||||
|
|
||||||
|
if (process.env.YANDEX_VERIFICATION) {
|
||||||
|
metas.push({
|
||||||
|
name: "yandex-verification",
|
||||||
|
content: process.env.YANDEX_VERIFICATION,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.env.YANDEX_METRICA_ID) {
|
||||||
|
headScripts.push(`window.YANDEX_METRICA_ID=${process.env.YANDEX_METRICA_ID}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const PUBLIC_URL =
|
||||||
|
process.env.PUBLIC_URL || process.env.VERCEL_PROJECT_PRODUCTION_URL;
|
||||||
|
|
||||||
|
if (PUBLIC_URL) {
|
||||||
|
metas.push({
|
||||||
|
name: "og:url",
|
||||||
|
content: "https://" + PUBLIC_URL,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
root: "src",
|
||||||
|
build: {
|
||||||
|
outDir: "../dist",
|
||||||
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
webfontDownload(),
|
webfontDownload(),
|
||||||
VitePluginRadar({
|
VitePluginRadar({
|
||||||
metrica: {
|
metrica: {
|
||||||
id: process.env.YANDEX_METRICA_ID
|
id: process.env.YANDEX_METRICA_ID,
|
||||||
},
|
},
|
||||||
})
|
}),
|
||||||
|
htmlPlugin({
|
||||||
|
metas,
|
||||||
|
headScripts,
|
||||||
|
}),
|
||||||
|
viteStaticCopy({
|
||||||
|
targets: [
|
||||||
|
{
|
||||||
|
src: "../merged-data.json",
|
||||||
|
dest: "",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}),
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user