Hobby2025
Vacancy Scraper Bot
Telegram bot, ktorý zbiera pracovné ponuky a stáže z azerbajdžanských portálov a zverejňuje ich v kanáloch.
- Zdroje
- HelloJob.az · Tecrube.az
- Príkazy
- 7
- Kanály
- Test + Prod
- Databáza
- MongoDB
01Prehľad
Bot nahrádza ručné kopírovanie ponúk do Telegram kanálov. Admini spustia zber, skontrolujú, čo sa nazbieralo, a zverejňujú po dávkach - najprv v testovacom kanáli, potom v produkčnom.
02Architektúra
Tenká vrstva príkazov stojí nad službami na zber pre jednotlivé zdroje a modelmi Mongoose. Každý príkaz prechádza middlewarom len pre adminov.
Telegram
Admin chat
/scrap /send /list /log
Kanály
Test a produkcia
Bot
Autentifikačný middleware
Whitelist ALLOWED_USERS
Smerovač príkazov
Jeden modul na príkaz
Spracovanie správ
Formátovanie podľa zdroja
Scrapery
Zdroj 1
HelloJob.az
Zdroj 2
Tecrube.az
Nástroje
Axios + Cheerio, Puppeteer
Dáta
Job
Pracovné ponuky
Intern
Stáže
ScrapeInfo
Posledný beh pre každý zdroj
03Komponenty
Služby na zber
Extrahujú ponuky
- Axios + Cheerio pre statické HTML, Puppeteer pre stránky renderované JavaScriptom.
- Každý zdroj vracia rovnaký tvar: názov, odkaz, firma, dátum a popis.
Publikovanie
Riadené doručenie
- /send zverejní ďalších 10 neodoslaných ponúk alebo jednu konkrétnu podľa id.
- Formát správ sa líši podľa zdroja (napr. dátum začiatku a konca pri stážach).
04Ako to funguje
- 1
/scrap
Admin vyberie zdroj; scraper stiahne a spracuje stránku s ponukami.
- 2
Deduplikácia
Každá ponuka sa vyhľadá podľa odkazu; ukladajú sa len nové.
- 3
Záznam
ScrapeInfo uloží čas posledného behu pre štatistiky /start.
- 4
/send test
Dávka ide na kontrolu do testovacieho kanála.
- 5
/send prod
Tá istá dávka sa zverejní; /log ukáže, čo bolo odoslané.
05Technické detaily
Idempotentný zber
Odkaz je prirodzený kľúč ponuky. Opakovaný zber nikdy nevytvorí duplikáty, takže admini môžu zbierať, koľkokrát chcú.
let addedCount = 0;
for (const job of jobs) {
const exists = await Job.findOne({ link: job.link });
if (!exists) {
await Job.create(job);
addedCount++;
}
}
await ScrapeInfo.findOneAndUpdate(
{ sourceId: 1 },
{ lastScrapedAt: new Date() },
{ upsert: true, new: true },
);06Návrhové rozhodnutia
Len pre adminov už z návrhu
Whitelist middleware chráni každý príkaz, takže bot môže bezpečne fungovať vo verejných kanáloch.
Zdroje ako konfigurácia
Zdroje sa registrujú cez konfiguráciu prostredia, takže nový web znamená pridať jeden modul scrapera.
Najprv test, potom produkcia
Dva kanály umožňujú kontrolu pred zverejnením bez samostatného administračného rozhrania.
07Technológie
- Runtime
- Node.jsExpressnode-telegram-bot-api
- Zber dát
- AxiosCheerioPuppeteer
- Dáta
- MongoDBMongoose
Ďalšia prípadová štúdia
Aments Storefront
E-shop v Next.js so serverovým renderovaním a prísnou dátovou architektúrou Route → Query → Mapper → UI.