SKKNI HTTP Scraper adalah layanan HTTP berbasis FastAPI untuk mengambil data dokumen dan unit kompetensi dari portal resmi SKKNI (Kemnaker), lengkap dengan caching lokal menggunakan SQLite.
- 📝 Kode & komentar: ditulis dalam bahasa Inggris
- 📄 Dokumentasi & README: ditulis dalam bahasa Indonesia
- 🎯 Tujuan: memudahkan kolaborasi lintas developer (internasional) sekaligus menjaga konteks lokal untuk pengguna
- 🚀 Scraping langsung dari portal SKKNI (dokumen & unit kompetensi).
- 💾 Cache otomatis ke database lokal (SQLite) untuk menghindari scraping berulang.
- 🏷 Normalisasi sektor, bidang, sub-bidang ke tabel master terpisah.
- 📄 Swagger UI & ReDoc untuk dokumentasi API interaktif.
- 🌐 CORS support untuk integrasi dengan Odoo, n8n, dan front-end lain.
- ⚡ Limit paralel scraping & konfigurasi TTL cache.
- 🔍 Filter
force_refresh,include_merged,sektor, dan pagination.
git clone https://github.com/username/skkni-http-scraper.git
cd skkni-http-scraperpython3.12 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtuvicorn app.main:app --reloadBuat file .env di root proyek:
DATABASE_URL=sqlite:///./skkni_cache.db
HEADLESS=true
CACHE_TTL_DAYS=30
MAX_CONCURRENCY=2
ALLOWED_ORIGINS=http://localhost:5678,https://yapi.simetri-sinergi.idSetelah server berjalan, dokumentasi API tersedia di:
- 📖 Swagger UI → http://127.0.0.1:8000/docs
- 📖 ReDoc → http://127.0.0.1:8000/redoc
Ambil 2 dokumen pertama:
curl "http://127.0.0.1:8000/skkni/search-documents?page_from=1&page_to=1&limit=2"Ambil unit kompetensi dengan filter sektor:
curl "http://127.0.0.1:8000/skkni/search-units?sektor=industri&page_from=1&page_to=1&limit=2"skkni-http-scraper/
├── app/
│ ├── api/v1/endpoints/ # Endpoint API
│ ├── core/ # Config & settings
│ ├── db/ # Model & session DB
│ ├── repositories/ # Logika akses data
│ ├── utils/ # Helper (Playwright, dll)
│ └── main.py # Entry FastAPI
├── requirements.txt
├── .env.example
├── .gitignore
└── README.md
- Gunakan
--reloadsaat development. - Untuk debug scraping, set
HEADLESS=falsedi.env. - Gunakan
CACHE_TTL_DAYSlebih panjang jika scraping lambat.
- Data diambil dari SKKNI Kemnaker.
- Proyek ini dibantu pengembangannya dengan ChatGPT (OpenAI GPT-5).
💡 "Dokumentasi yang baik adalah separuh dari software yang baik" – dibuat dengan ❤️ dan bantuan ChatGPT.
Proyek ini berlisensi MIT – bebas digunakan dan dimodifikasi.