{"id":31836260,"url":"https://github.com/dzakwanalifi/stadata-x","last_synced_at":"2026-01-20T17:31:42.460Z","repository":{"id":316399202,"uuid":"1063183785","full_name":"dzakwanalifi/stadata-x","owner":"dzakwanalifi","description":"Terminal UI untuk menjelajahi dan mengunduh data BPS Indonesia secara interaktif","archived":false,"fork":false,"pushed_at":"2025-10-06T02:15:49.000Z","size":532,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-06T02:21:22.500Z","etag":null,"topics":["bps-api","cli-app","data-analysis","data-visualization","indonesia-statistics","indonesian-data","open-data","python","statistics","terminal-ui","textual","tui"],"latest_commit_sha":null,"homepage":"https://github.com/dzakwanalifi/stadata-x","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dzakwanalifi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-24T09:25:47.000Z","updated_at":"2025-10-06T02:15:52.000Z","dependencies_parsed_at":"2025-09-24T12:18:23.620Z","dependency_job_id":null,"html_url":"https://github.com/dzakwanalifi/stadata-x","commit_stats":null,"previous_names":["dzakwanalifi/stadata-x"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/dzakwanalifi/stadata-x","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzakwanalifi%2Fstadata-x","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzakwanalifi%2Fstadata-x/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzakwanalifi%2Fstadata-x/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzakwanalifi%2Fstadata-x/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dzakwanalifi","download_url":"https://codeload.github.com/dzakwanalifi/stadata-x/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dzakwanalifi%2Fstadata-x/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279009766,"owners_count":26084647,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bps-api","cli-app","data-analysis","data-visualization","indonesia-statistics","indonesian-data","open-data","python","statistics","terminal-ui","textual","tui"],"created_at":"2025-10-12T01:28:42.969Z","updated_at":"2025-10-12T01:28:47.176Z","avatar_url":"https://github.com/dzakwanalifi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# STADATA-X\r\n\r\n[![Python Version](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n[![PyPI version](https://img.shields.io/pypi/v/stadata-x.svg)](https://pypi.org/project/stadata-x/)\r\n[![Tests](https://github.com/dzakwanalifi/stadata-x/actions/workflows/ci.yml/badge.svg)](https://github.com/dzakwanalifi/stadata-x/actions)\r\n[![Code Coverage](https://codecov.io/gh/dzakwanalifi/stadata-x/branch/main/graph/badge.svg)](https://codecov.io/gh/dzakwanalifi/stadata-x)\r\n[![GitHub Release](https://img.shields.io/github/v/release/dzakwanalifi/stadata-x)](https://github.com/dzakwanalifi/stadata-x/releases)\r\n\r\n**Membuka Data Statistik Indonesia, Satu Perintah Sekaligus.**\r\n\r\n`stadata-x` adalah sebuah aplikasi terminal (TUI) modern yang dirancang untuk menjelajahi, melihat, dan mengunduh data dari Badan Pusat Statistik (BPS) Indonesia secara interaktif. Dibangun dengan Python dan [Textual](https://github.com/textualize/textual), aplikasi ini menyediakan antarmuka yang cepat dan efisien untuk mengakses kekayaan data publik BPS langsung dari command line Anda.\r\n\r\nLupakan mengunduh file secara manual. Dengan `stadata-x`, Anda dapat dengan mudah menavigasi data berdasarkan wilayah, mencari tabel statistik, melihat pratinjau, dan mengunduhnya dalam berbagai format (CSV, Excel, JSON).\r\n\r\n## 📸 Screenshots\r\n\r\n### Layar Selamat Datang\r\n![Layar Selamat Datang](assets/welcome-screen.png)\r\n\r\n### Pemilihan Wilayah\r\n![Pemilihan Wilayah](assets/region-selection.png)\r\n\r\n---\r\n\r\n## ✨ Fitur Utama\r\n\r\n-   🎯 **Navigasi Interaktif**: Jelajahi data BPS berdasarkan wilayah (Provinsi/Kabupaten/Kota) melalui antarmuka yang responsif.\r\n-   📊 **Pratinjau Tabel**: Lihat isi tabel statistik langsung di terminal sebelum mengunduh, dengan pewarnaan dan perataan kolom otomatis untuk keterbacaan maksimal.\r\n-   📥 **Unduhan Multi-Format**: Unduh data yang Anda butuhkan dalam format CSV, Excel (.xlsx), atau JSON.\r\n-   ⚙️ **Manajemen Konfigurasi**: Simpan Token API BPS dan atur folder unduhan default dengan mudah.\r\n-   🔄 **Penanganan Error Cerdas**: Dilengkapi dengan mekanisme *retry* otomatis untuk mengatasi *rate limiting* API dan penanganan error koneksi yang tangguh.\r\n-   🚀 **Caching**: Permintaan data yang sering diakses (seperti daftar wilayah) disimpan dalam cache untuk mempercepat waktu muat.\r\n-   🎨 **Antarmuka Modern**: Pengalaman pengguna yang mulus dan modern di dalam terminal Anda.\r\n\r\n## 📋 Persyaratan Sistem\r\n\r\n-   **Python**: 3.9 atau yang lebih baru\r\n-   **Terminal**: Terminal modern yang mendukung ANSI colors (Windows Terminal, iTerm2, GNOME Terminal, dll.)\r\n-   **Token API BPS**: Diperlukan untuk mengakses data (gratis dari portal developer BPS)\r\n\r\n## 📈 Status \u0026 Coverage\r\n\r\n- ✅ **113 Tests Passed** - Test suite lengkap dengan coverage tinggi\r\n- ✅ **Cross-platform** - Kompatibel Windows, Linux, dan macOS (Python 3.9-3.13)\r\n- ✅ **CI/CD Active** - GitHub Actions dengan testing multi-platform\r\n- ✅ **PyPI Published** - Tersedia untuk instalasi global via `pip install stadata-x`\r\n\r\n## 🚀 Instalasi\r\n\r\nPastikan Anda memiliki Python 3.9 atau yang lebih baru. `stadata-x` dapat diinstal dengan mudah menggunakan `pip`, `pipx`, atau `uv`.\r\n\r\n### Menggunakan `pipx` (Direkomendasikan)\r\n\r\n`pipx` menginstal paket Python dalam lingkungan terisolasi, yang merupakan cara terbaik untuk menginstal aplikasi command-line.\r\n\r\n```bash\r\npipx install stadata-x\r\n```\r\n\r\n### Menggunakan `pip`\r\n\r\n```bash\r\npip install stadata-x\r\n```\r\n\r\n### Menggunakan `uv`\r\n\r\n```bash\r\nuv pip install stadata-x\r\n```\r\n\r\n### Verifikasi Instalasi\r\n\r\nSetelah instalasi, verifikasi bahwa aplikasi terinstal dengan benar:\r\n\r\n```bash\r\nstadata-x --version\r\n```\r\n\r\n## 🔧 Troubleshooting\r\n\r\n### Masalah Instalasi Umum\r\n\r\n#### **1. Build Error dengan `lxml`**\r\n**Error**: `fatal error C1083: Cannot open include file: 'libxml/xmlversion.h'`\r\n\r\n**Solusi**:\r\n```bash\r\n# Gunakan wheel-only installation\r\npip install stadata-x --only-binary=all\r\n\r\n# Atau gunakan uv\r\nuv pip install stadata-x --only-binary=all\r\n```\r\n\r\n**Penjelasan**: `stadata-x` menggunakan `lxml\u003e=6.0.0` yang sudah include libxml2 binaries.\r\n\r\n#### **2. Python Version Compatibility**\r\n**Error**: `TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'`\r\n\r\n**Solusi**:\r\n- Pastikan menggunakan Python 3.9 atau yang lebih baru\r\n- `stadata-x` mendukung Python 3.9-3.13\r\n\r\n#### **3. Permission Error (Windows)**\r\n**Error**: `PermissionError: [Errno 13] Permission denied`\r\n\r\n**Solusi**:\r\n```bash\r\n# Jalankan sebagai administrator atau gunakan virtual environment\r\npython -m venv venv\r\nvenv\\Scripts\\activate\r\npip install stadata-x\r\n```\r\n\r\n#### **4. SSL/Connection Error**\r\n**Error**: `ssl.SSLCertVerificationError` atau connection timeout\r\n\r\n**Solusi**:\r\n```bash\r\n# Update pip dan certificates\r\npip install --upgrade pip certifi\r\n\r\n# Atau gunakan HTTP instead HTTPS\r\npip install stadata-x --trusted-host pypi.org --trusted-host files.pythonhosted.org\r\n```\r\n\r\n#### **5. Dependency Conflict**\r\n**Error**: `ERROR: Cannot install stadata-x because these package versions have conflicting dependencies`\r\n\r\n**Solusi**:\r\n```bash\r\n# Gunakan virtual environment terisolasi\r\npython -m venv isolated_env\r\nisolated_env\\Scripts\\activate\r\npip install stadata-x\r\n\r\n# Atau gunakan pip-tools untuk resolve dependencies\r\npip install pip-tools\r\npip-compile --output-file=requirements.txt pyproject.toml\r\npip-sync\r\n```\r\n\r\n### Alternative Installation Methods\r\n\r\n#### **Menggunakan Conda (Windows Recommended)**\r\n```bash\r\n# Install Miniconda atau Anaconda\r\n# Buat environment baru\r\nconda create -n stadata-env python=3.11\r\nconda activate stadata-env\r\n\r\n# Install package\r\npip install stadata-x\r\n```\r\n\r\n#### **Menggunakan pipx (Isolated Environment)**\r\n```bash\r\npipx install stadata-x\r\n```\r\n\r\n#### **Manual Installation dari Source**\r\n```bash\r\n# Clone repository\r\ngit clone https://github.com/dzakwanalifi/stadata-x.git\r\ncd stadata-x\r\n\r\n# Install dengan uv\r\nuv sync --dev\r\nuv run stadata-x --version\r\n```\r\n\r\n### Debug dan Logging\r\n\r\n#### **Enable Verbose Output**\r\n```bash\r\n# Untuk pip\r\npip install stadata-x -v\r\n\r\n# Untuk uv\r\nuv pip install stadata-x --verbose\r\n```\r\n\r\n#### **Check System Information**\r\n```bash\r\n# Python version\r\npython --version\r\n\r\n# pip version\r\npip --version\r\n\r\n# OS information\r\npython -c \"import platform; print(platform.platform())\"\r\n\r\n# Check installed packages\r\npip list | grep -E \"(stadata|lxml|textual)\"\r\n```\r\n\r\n### Masalah Runtime\r\n\r\n#### **API Token Error**\r\n```\r\nApiTokenError: Token API tidak diatur\r\n```\r\n\r\n**Solusi**:\r\n1. Jalankan `stadata-x`\r\n2. Tekan `s` untuk Settings\r\n3. Masukkan Token API BPS Anda\r\n4. Test koneksi dengan tombol \"Tes Koneksi\"\r\n\r\n#### **Network/Connection Error**\r\n```\r\nNoInternetError: Tidak ada koneksi internet\r\n```\r\n\r\n**Solusi**:\r\n- Check koneksi internet\r\n- Coba lagi dalam beberapa saat (rate limiting)\r\n- Gunakan VPN jika diperlukan\r\n\r\n#### **Cache Issues**\r\n```bash\r\n# Clear cache\r\n# Windows\r\nrmdir /s %USERPROFILE%\\.stadata-x\r\n\r\n# Linux/Mac\r\nrm -rf ~/.stadata-x\r\n```\r\n\r\n### Getting Help\r\n\r\nJika masalah berlanjut:\r\n\r\n1. **Check GitHub Issues**: https://github.com/dzakwanalifi/stadata-x/issues\r\n2. **Create New Issue**: Sertakan:\r\n   - Python version (`python --version`)\r\n   - OS information\r\n   - Full error traceback\r\n   - Installation method used\r\n3. **Contact**: dzakwan624@gmail.com\r\n\r\n## ⚡ Quick Start\r\n\r\n1. **Konfigurasi Token API BPS**:\r\n   ```bash\r\n   stadata-x\r\n   # Tekan 's' untuk masuk ke pengaturan\r\n   # Tempel token API BPS Anda\r\n   ```\r\n\r\n2. **Jelajahi Data**:\r\n   ```bash\r\n   stadata-x\r\n   # Pilih wilayah → Pilih tabel → Lihat pratinjau → Unduh\r\n   ```\r\n\r\n## Konfigurasi Awal: API Key BPS\r\n\r\nUntuk menggunakan aplikasi ini, Anda memerlukan Token API dari BPS. Token ini gratis dan berfungsi sebagai kunci untuk mengakses data.\r\n\r\n#### Cara Mendapatkan Token API\r\n\r\n1.  **Kunjungi Portal WebAPI BPS**: Buka [webapi.bps.go.id/developer/](https://webapi.bps.go.id/developer/).\r\n2.  **Daftar/Masuk**: Buat akun baru atau masuk jika Anda sudah memilikinya.\r\n3.  **Salin Token**: Setelah masuk, salin Token API yang ditampilkan di dashboard Anda.\r\n4.  **Konfigurasi di `stadata-x`**:\r\n    -   Jalankan aplikasi: `stadata-x`\r\n    -   Tekan `s` untuk masuk ke menu Pengaturan.\r\n    -   Tempel Token API Anda, lalu simpan.\r\n    -   Gunakan tombol \"Tes Koneksi\" untuk memvalidasi token Anda.\r\n\r\n## Penggunaan\r\n\r\nJalankan aplikasi dari terminal Anda:\r\n\r\n```bash\r\nstadata-x\r\n```\r\n\r\n### ⌨️ Navigasi Dasar\r\n\r\n| Tombol | Fungsi |\r\n|--------|--------|\r\n| `↑/↓` atau `j/k` | Bergerak di dalam daftar |\r\n| `Enter` | Pilih item (wilayah atau tabel) |\r\n| `Escape` | Kembali ke level sebelumnya |\r\n| `s` | Buka halaman Pengaturan |\r\n| `d` | Buka dialog unduhan (saat di pratinjau tabel) |\r\n| `q` | Keluar dari aplikasi |\r\n\r\n### 📁 Struktur Proyek\r\n\r\n```\r\nstadata-x/\r\n├── stadata_x/          # Kode aplikasi utama\r\n│   ├── assets/         # CSS dan asset statis\r\n│   ├── screens/        # Layar-layar aplikasi\r\n│   ├── widgets/        # Komponen UI kustom\r\n│   └── *.py            # Modul utama\r\n├── assets/             # Screenshot dan gambar dokumentasi\r\n├── .gitignore          # File yang diabaikan Git\r\n├── LICENSE             # Lisensi MIT\r\n├── pyproject.toml      # Konfigurasi proyek Python\r\n└── README.md           # Dokumentasi ini\r\n```\r\n\r\n## 🤝 Kontribusi\r\n\r\nKontribusi, laporan bug, dan permintaan fitur sangat kami hargai! 🎉\r\n\r\n### Cara Berkontribusi\r\n\r\n1. **Fork** repositori ini\r\n2. **Buat branch** untuk fitur Anda (`git checkout -b feature/AmazingFeature`)\r\n3. **Commit** perubahan Anda (`git commit -m 'Add some AmazingFeature'`)\r\n4. **Push** ke branch (`git push origin feature/AmazingFeature`)\r\n5. **Buka Pull Request**\r\n\r\n### Pengembangan Lokal\r\n\r\nUntuk pengembangan lokal, kloning repositori dan instal dependensi:\r\n\r\n```bash\r\ngit clone https://github.com/dzakwanalifi/stadata-x.git\r\ncd stadata-x\r\npip install -e \".[dev]\"\r\n```\r\n\r\nJalankan aplikasi dalam mode pengembangan dengan *hot-reloading*:\r\n\r\n```bash\r\ntextual run --dev stadata_x/main.py\r\n```\r\n\r\n### Panduan Pengembangan\r\n\r\n-   Gunakan `ruff` untuk linting dan formatting\r\n-   Ikuti konvensi penamaan PEP 8\r\n-   Tambahkan docstring untuk fungsi baru\r\n-   Update dokumentasi jika diperlukan\r\n\r\n## 🙏 Acknowledgments\r\n\r\n-   **Badan Pusat Statistik (BPS)** - Untuk menyediakan data publik yang berharga\r\n-   **[Textual](https://github.com/textualize/textual)** - Framework TUI yang powerful\r\n-   **[stadata](https://github.com/bps-statistics/stadata)** - Library Python resmi untuk API BPS\r\n\r\n## 📞 Dukungan\r\n\r\nJika Anda mengalami masalah atau memiliki pertanyaan:\r\n\r\n-   📧 **Email**: dzakwan624@gmail.com\r\n-   🐛 **Issues**: [GitHub Issues](https://github.com/dzakwanalifi/stadata-x/issues)\r\n-   📖 **Dokumentasi**: [README ini](README.md)\r\n\r\n## 📄 Lisensi\r\n\r\nProyek ini dilisensikan di bawah [Lisensi MIT](LICENSE) - lihat file [LICENSE](LICENSE) untuk detail lebih lanjut.\r\n\r\n---\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n\r\n**Dibuat dengan ❤️ untuk komunitas data Indonesia**\r\n\r\n⭐ Jika Anda menyukai proyek ini, berikan bintang di GitHub!\r\n\r\n\u003c/div\u003e\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdzakwanalifi%2Fstadata-x","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdzakwanalifi%2Fstadata-x","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdzakwanalifi%2Fstadata-x/lists"}