FRS24/academic-aggregator
0
๐ Academic Aggregator
Academic Aggregator adalah mesin pencari akademis berbasis web yang mengumpulkan artikel, jurnal, dan e-book dari berbagai sumber open access dan gratis. Dibangun dengan FastAPI + SQLite, dirancang untuk membantu mahasiswa, peneliti, dan akademisi dalam menyelesaikan tugas akhir, skripsi, atau riset.
โจ Fitur Utama
- ๐ Multi-Source Search โ Mencari artikel dari 15+ sumber sekaligus (OpenAlex, arXiv, PubMed, DOAJ, BASE, Semantic Scholar, CORE, Unpaywall, dll.)
- ๐ Full-Text Parsing โ Baca dan ekstrak konten dari PDF, EPUB, DOCX (termasuk OCR untuk gambar)
- ๐ง AI-Powered Search Engine โ Integrasi dengan Semantic Scholar, Consensus, dan Elicit (scraping)
- ๐ E-Book Indexing โ Upload e-book, di-index, dan bisa dicari isinya secara lokal (Whoosh)
- ๐ Multi-Layer Architecture โ Provider dibagi menjadi 3 layer: Free (no key), Key-based, dan Scraping (fallback)
- ๐ Safe & Legal โ Hanya menggunakan sumber open access dan repository resmi (SCI-HUB opsional)
- ๐ณ Docker-Ready โ Jalankan dengan satu perintah
docker-compose up -d - ๐ฆ Modular & Extensible โ Tambahkan sumber baru dengan mudah (tinggal buat file di
providers/)
๐ ๏ธ Teknologi
๐ Prasyarat
- Python 3.11+ (jika tanpa Docker)
- Docker & Docker Compose (jika pakai Docker)
- Minimal 2GB RAM
- Koneksi internet stabil
๐ Instalasi & Menjalankan
Opsi 1: Menggunakan Docker (Rekomendasi)
- Clone repository
git clone https://github.com/yourusername/academic-aggregator.git
cd academic-aggregator- Setup environment
cp .env.example .env
nano .env # isi API keys (optional, yang gratis)- Build & run
docker-compose up -d --build- Akses aplikasi Buka browser:
http://localhost:8000
- Stop
docker-compose downOpsi 2: Manual (Tanpa Docker)
- Buat virtual environment
python3 -m venv venv
source venv/bin/activate # Linux/Mac
# atau
venv\Scripts\activate # Windows- Install dependencies
pip install -r requirements.txt- Setup environment
cp .env.example .env
nano .env # isi konfigurasi- Buat folder data
mkdir -p data/db data/uploads data/cache- Jalankan aplikasi
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000- Akses aplikasi Buka browser:
http://localhost:8000
๐ Struktur Project
academic-aggregator/
โโโ docker-compose.yml
โโโ Dockerfile
โโโ .env.example
โโโ requirements.txt
โโโ README.md
โ
โโโ app/
โ โโโ __init__.py
โ โโโ main.py
โ โโโ config.py
โ โ
โ โโโ core/
โ โ โโโ base.py # BaseProvider (abstract)
โ โ โโโ registry.py # Registry (provider manager)
โ โ
โ โโโ models/
โ โ โโโ database.py
โ โ โโโ article.py
โ โ โโโ ebook.py
โ โ
โ โโโ providers/
โ โ โโโ layer_1_free/ # OpenAlex, arXiv, PubMed, DOAJ, BASE
โ โ โโโ layer_2_key/ # Semantic Scholar, CORE, Unpaywall
โ โ โโโ layer_3_scrape/ # Google Scholar, Consensus, Elicit, dll.
โ โ
โ โโโ resolvers/
โ โ โโโ scihub.py
โ โ โโโ unpaywall_resolver.py
โ โ
โ โโโ routes/
โ โ โโโ pages.py
โ โ โโโ search.py
โ โ โโโ upload.py
โ โ โโโ read.py
โ โ
โ โโโ utils/
โ โ โโโ parsers.py
โ โ โโโ indexer.py
โ โ โโโ dedup.py
โ โ โโโ proxy.py
โ โ
โ โโโ templates/
โ โ โโโ base.html
โ โ โโโ index.html
โ โ โโโ results.html
โ โ
โ โโโ static/
โ โโโ css/
โ โโโ js/
โ
โโโ data/
โ โโโ db/
โ โโโ uploads/
โ
โโโ tests/
โโโ test_providers/
โโโ test_parsers.pyโ๏ธ Konfigurasi (.env)
Catatan: Isi API key hanya jika ingin menggunakan provider layer 2. Provider layer 1 (OpenAlex, arXiv, PubMed, DOAJ, BASE) tidak butuh API key.
๐งช Testing
pytest tests/ -v๐ Cara Penggunaan
1. Mencari Artikel
- Buka
http://localhost:8000 - Masukkan keyword di form search
- Pilih sumber (atau biarkan semua)
- Klik "Search"
- Hasil akan muncul dalam bentuk card dengan judul, penulis, tahun, abstrak, dan sumber
2. Membaca Full-Text
- Klik tombol "Baca Full Text" pada card artikel
- Akan diarahkan ke halaman baca dengan teks lengkap (jika tersedia)
3. Upload E-Book
- Klik tab "Upload E-Book"
- Pilih file (PDF/EPUB/DOCX)
- Tunggu proses parsing & indexing
- Nanti bisa dicari isinya melalui fitur "Search E-Book"
4. Download Article
- Pada halaman hasil, klik icon download untuk menyimpan file PDF (jika tersedia)
๐ Menambahkan Sumber Baru
- Buat file baru di
providers/layer_1_free/ataulayer_2_key/ataulayer_3_scrape/ - Import
BaseProviderdaricore/base.py - Implementasikan method
fetch(query)danparse(response) - Tambahkan provider ke
registry.py
Contoh:
# providers/layer_1_free/example.py
from app.core.base import BaseProvider
class ExampleProvider(BaseProvider):
source_name = "Example"
base_url = "https://api.example.com"
async def fetch(self, query: str, limit: int = 10):
# Implementasi fetch
pass
async def parse(self, raw_data: dict):
# Implementasi parse
pass๐ก๏ธ Keamanan & Privasi
- Tidak menyimpan data pribadi user
- Semua file upload disimpan di
data/uploads/(tidak di-share ke publik) - API key disimpan di environment, tidak terekspos di frontend
- Semua request melalui HTTPS (jika di-deploy dengan SSL)
๐ Lisensi
MIT License โ silakan digunakan, dimodifikasi, dan didistribusikan.
