Bütün layihələr

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. 1

    /scrap

    Admin mənbəni seçir; scraper elan səhifəsini yükləyir və təhlil edir.

  2. 2

    Təkrarları sil

    Hər elan link ilə yoxlanılır; yalnız yeniləri saxlanılır.

  3. 3

    Qeyd et

    ScrapeInfo /start statistikası üçün son işləmə vaxtını saxlayır.

  4. 4

    /send test

    Paket yoxlanış üçün test kanalına gedir.

  5. 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.

services/scraper_model_1.jsjs
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ı.