Hobbi2025
Vacancy Scraper Bot
Azərbaycan iş saytlarından vakansiya və təcrübə elanlarını toplayıb kanallarda dərc edən Telegram botu.
- Mənbələr
- HelloJob.az · Tecrube.az
- Əmrlər
- 7
- Kanallar
- Test + Prod
- Verilənlər bazası
- MongoDB
01Ümumi baxış
Bot vakansiyaların Telegram kanallarına əl ilə köçürülməsini əvəz edir. Adminlər toplamanı başladır, toplananı yoxlayır və paketlərlə dərc edir - əvvəl test kanalına, sonra production-a.
02Arxitektura
Nazik əmr qatı mənbəyə xas scraper servisləri və Mongoose modelləri üzərində dayanır. Hər əmr yalnız adminlər üçün olan middleware-dən keçir.
Telegram
Admin çatı
/scrap /send /list /log
Kanallar
Test və production
Bot
Autentifikasiya middleware
ALLOWED_USERS ağ siyahısı
Əmr marşrutlaşdırıcısı
Hər əmr üçün bir modul
Mesaj emalçısı
Mənbəyə görə formatlama
Scraper-lər
Mənbə 1
HelloJob.az
Mənbə 2
Tecrube.az
Alətlər
Axios + Cheerio, Puppeteer
Data
Job
Vakansiyalar
Intern
Təcrübə proqramları
ScrapeInfo
Hər mənbənin son işləmə vaxtı
03Komponentlər
Scraper servisləri
Elanları çıxarır
- Statik HTML üçün Axios + Cheerio, JavaScript ilə render olunan səhifələr üçün Puppeteer.
- Hər mənbə eyni formanı qaytarır: başlıq, link, şirkət, tarix və təsvir.
Dərc
Nəzarətli çatdırılma
- /send növbəti 10 göndərilməmiş elanı və ya id ilə konkret bir elanı dərc edir.
- Mesaj formatları mənbəyə görə fərqlənir (məsələn, təcrübə proqramları üçün başlama və bitmə tarixləri).
04Necə işləyir
- 1
/scrap
Admin mənbəni seçir; scraper elan səhifəsini yükləyir və təhlil edir.
- 2
Təkrarları sil
Hər elan link ilə yoxlanılır; yalnız yeniləri saxlanılır.
- 3
Qeyd et
ScrapeInfo /start statistikası üçün son işləmə vaxtını saxlayır.
- 4
/send test
Paket yoxlanış üçün test kanalına gedir.
- 5
/send prod
Eyni paket dərc olunur; /log nəyin göndərildiyini göstərir.
05Texniki təhlil
İdempotent toplama
Link vakansiyanın təbii açarıdır. Toplamanı təkrar işə salmaq heç vaxt dublikat yaratmır, ona görə adminlər istədikləri qədər toplaya bilərlər.
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 },
);06Dizayn qərarları
Dizayn etibarilə yalnız admin
Ağ siyahı middleware-i hər əmri qoruyur, ona görə bot ictimai kanallarda təhlükəsiz işləyə bilir.
Mənbələr konfiqurasiya kimi
Mənbələr mühit konfiqurasiyası ilə qeydə alınır, yeni sayt əlavə etmək bir scraper modulu əlavə etmək deməkdir.
Əvvəl test, sonra prod
İki kanal ayrıca admin interfeysi olmadan dərci yoxlanıla bilən edir.
07Texnologiyalar
- İcra mühiti
- Node.jsExpressnode-telegram-bot-api
- Toplama
- AxiosCheerioPuppeteer
- Data
- MongoDBMongoose
Növbəti case study
Aments Storefront
Ciddi Route → Query → Mapper → UI data arxitekturası olan, serverdə render olunan Next.js onlayn mağazası.