PriceTrail — трекер цін у супермаркетах: пошук товарів, графік зміни ціни й перевірка акцій.
Translation pending
CommerceJavaScript · CSSGitHub @fiMa02OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
PriceTrail — трекер цін супермаркетів з історією цін
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Трекер цін супермаркетів з історією цін: пошук товарів, картки з цінами й акціями, графік зміни ціни, перевірка «завищених» акцій. Працює як сайт і встановлюється на телефон (PWA). Зараз підтримується АТБ-Маркет (неофіційно), згодом — інші магазини.
Сайт: https://fima02.github.io/pricetrail/
Планувальник Windows (щодня 05:30) → scripts/daily.ps1 → scraper/scrape.js → site/data/*.json → git push → GitHub Actions → GitHub Pages
Ціни збираються з домашнього комп'ютера: сайт АТБ (Cloudflare) блокує запити з серверів GitHub (HTTP 403). GitHub лише публікує сайт після кожного push.
scraper/scrape.js збирає каталог atbmarket.com окремо для кожного міста зі scraper/cities.js. Асортимент і ціни залежать від магазину, тому в кожному місті береться один магазин — з найбільшим асортиментом (вибір зберігається в scraper/stores.json, його можна змінити вручну або перевибрати: node scraper/scrape.js --repick). Одне місто — ~4 хв, два міста збираються паралельно.
node scraper/scrape.js --city Хмельницькийscraper/groups.js — розділи («надкатегорії») для товарів: беруться з меню atbmarket.com, плюс ручні відповідності для категорій, яких у меню немає. Товари без відповідності потрапляють у розділ «Інше» — тоді додайте категорію в EXTRA.scripts/daily.ps1 — pull → збір → коміт → push. Журнал пишеться в daily.log.scripts/install-task.ps1 — реєструє щоденне завдання «ATB Price» у Планувальнику завдань.site/data/cities.json — список міст з даними (з координатами центрів).site/data/ukraine.json — контури областей України для мапи «Ціна в інших містах»: спрощені межі з geoBoundaries (UKR ADM1, дані OpenStreetMap, ліцензія ODbL), уже в проєкції сайту. Статичний файл, щодня не змінюється.site/data/compare/NN.json — ціни кожного товару в усіх містах (для порівняння на сторінці товару), розбиті за id % 100. Будує scraper/compare.js під час публікації (GitHub Actions) і після збору локально; у git не зберігається.site/data/cities/<місто>/extra.json — спільний каталог: товари, яких у місті немає, з цінами найближчого (по прямій між центрами міст) міста, де вони є (поле from). Будує scraper/fallback.js так само, як і порівняння; у git не зберігається.site/data/cities/<місто>/products.json — поточний каталог міста (для пошуку і карток). Товари, яких сьогодні немає в каталозі магазину, лишаються тут ще 30 днів (службове поле out); їхню ціну парсер звіряє зі сторінки товару (до 60 на місто за збір). На сайті наявність не показується.site/data/cities/<місто>/changes.json — що змінилося в останньому зборі порівняно з попереднім днем (стрічка «Що змінилося»: подешевшало, подорожчало, нові акції, акція закінчилась, нові товари). Будує scraper/changes.js.site/data/cities/<місто>/history/NN.json — історія цін міста, розбита на 100 файлів за id % 100. Зберігаються лише зміни: [дата, ціна] або [дата, ціна, ціна_без_акції] — товар у наявності; [дата, ціна, ціна_без_акції | null, 1] — товару немає в наявності, ціну взято зі сторінки товару (парсер перевіряє до 60 таких сторінок на місто за збір); [дата, null] — немає в наявності, ціна невідома. П'яте поле — ціна при оплаті карткою АТБ: [дата, ціна, null, 0, ціна_з_карткою].site/ — статичний сайт на чистому JS без збірки. Графік намальовано вручну через SVG.localStorage), подешевшання видно на сторінці «Обране» і на значку ♥. Системні сповіщення надсилає service worker (site/sw.js) через Periodic Background Sync — це працює в Chrome/Edge, коли сайт встановлено як застосунок; браузер сам вирішує, як часто перевіряти (приблизно раз на день).npm install
npm run scrape # зібрати ціни (~5–10 хв)
npm run serve # відкрити сайт на http://localhost:3000
powershell -ExecutionPolicy Bypass -File scripts\install-task.ps1
Далі все працює саме: щодня комп'ютер збирає ціни й пушить їх, а GitHub оновлює сайт. Якщо комп'ютер о 05:30 вимкнений, збір запуститься, щойно його увімкнуть.
Видалити завдання: Unregister-ScheduledTask -TaskName 'ATB Price'.
parseCards() у парсері.