{"id":34502873,"url":"https://github.com/kimookoii/ig-followers-scraper","last_synced_at":"2026-04-11T06:43:23.942Z","repository":{"id":328021270,"uuid":"1108401800","full_name":"kimookoii/ig-followers-scraper","owner":"kimookoii","description":"Automated Instagram Followers Scraper using Playwright and GitHub Actions. Generates real-time JSON API + dynamic badges via GitHub Pages.","archived":false,"fork":false,"pushed_at":"2026-04-11T06:06:01.000Z","size":5304,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-11T06:42:44.107Z","etag":null,"topics":["analytics","auto-update","automation","badge-generator","followers-tracker","github-actions","github-pages","ig-followers","instagram","instagram-api","instagram-scraper","json-api","monitoring","nodejs","playwright","scraping","web-automation","web-scraping"],"latest_commit_sha":null,"homepage":"https://kimookoii.github.io/ig-followers-scraper/ziconkn_.json","language":"JavaScript","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/kimookoii.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-12-02T12:00:35.000Z","updated_at":"2025-12-07T11:25:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kimookoii/ig-followers-scraper","commit_stats":null,"previous_names":["kimookoii/ig-followers-scraper"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kimookoii/ig-followers-scraper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimookoii%2Fig-followers-scraper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimookoii%2Fig-followers-scraper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimookoii%2Fig-followers-scraper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimookoii%2Fig-followers-scraper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kimookoii","download_url":"https://codeload.github.com/kimookoii/ig-followers-scraper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kimookoii%2Fig-followers-scraper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31671629,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"online","status_checked_at":"2026-04-11T02:00:05.776Z","response_time":54,"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":["analytics","auto-update","automation","badge-generator","followers-tracker","github-actions","github-pages","ig-followers","instagram","instagram-api","instagram-scraper","json-api","monitoring","nodejs","playwright","scraping","web-automation","web-scraping"],"created_at":"2025-12-24T02:21:28.544Z","updated_at":"2026-04-11T06:43:23.921Z","avatar_url":"https://github.com/kimookoii.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Instagram Followers Scraper  \n\nSebuah otomatisasi untuk mengambil data profil Instagram (followers, following, posts, kategori, dan metadata lainnya) dengan Playwright, lalu menerbitkannya sebagai JSON melalui GitHub Pages.  \nRepositori ini menggunakan pipeline DevSecOps modern dengan validasi, scanning, dan workflow yang dapat diperluas.\n\n---\n\n## Status Data\n\u003ca href=\"https://instagram.com/ziconkn_\"\u003e\n  \u003cimg src=\"https://img.shields.io/endpoint?url=https://kimookoii.github.io/ig-followers-scraper/ig_followers_badge.json\u0026style=for-the-badge\u0026logo=instagram\u0026logoColor=white\" /\u003e\n\u003c/a\u003e\n\nSumber data utama:\n```\n\n[https://kimookoii.github.io/ig-followers-scraper/ziconkn_.json](https://kimookoii.github.io/ig-followers-scraper/ziconkn_.json)\n\n````\n\n---\n\n## 1. Gambaran Umum\nProyek ini melakukan scraping data Instagram tanpa login menggunakan Playwright Chromium.  \nHasil scrape kemudian:\n\n1. Dibuatkan file JSON terstruktur  \n2. Disimpan ke folder `out/`  \n3. Ditambahkan timestamp otomatis  \n4. Diterbitkan otomatis ke branch `gh-pages`  \n5. Dapat diakses publik sebagai API statis\n\nPipeline berjalan setiap 30 menit menggunakan GitHub Actions.\n\n---\n\n## 2. Arsitektur Sistem\nDiagram berikut menjelaskan alur end-to-end:\n\n```mermaid\nflowchart TD\n  A[GitHub Actions Runner] --\u003e B[\"Start Node.js Server (Playwright)\"]\n  B --\u003e C[\"Scrape Instagram Web API\"]\n  C --\u003e D[\"Generate JSON Output\"]\n  D --\u003e E[\"Append Timestamp\"]\n  E --\u003e F[\"Generate Badge JSON\"]\n  F --\u003e G[\"Deploy to gh-pages Branch\"]\n  G --\u003e H[\"GitHub Pages Static API\"]\n  H --\u003e I[\"README Badge + External Consumers\"]\n```\n\n---\n\n## 3. Fitur Utama\n\n* Scraping menggunakan Playwright Chromium headless\n* User-Agent custom untuk meminimalkan blok otomatis\n* JSON API publik melalui GitHub Pages\n* Badges dinamis menggunakan Shields.io endpoint\n* Workflow otomatis setiap 30 menit\n* Mendukung fallback deploy menggunakan PAT bila GITHUB_TOKEN dibatasi\n* Logging lengkap melalui `logs/server.log`\n* Struktur DevSecOps-friendly\n\n---\n\n## 4. Struktur Output JSON\n\nContoh:\n\n```json\n{\n  \"username\": \"ziconkn_\",\n  \"followers\": 5927,\n  \"following\": 2342,\n  \"posts\": 3,\n  \"profilePic\": \"https://...\",\n  \"private\": false,\n  \"verified\": false,\n  \"category\": \"Cemetery\",\n  \"lastUpdate\": \"2025-12-02T13:00:17Z\"\n}\n```\n\nFile tersedia di:\n\n```\n/ziconkn_.json\n```\n\nTautan langsung:\n\n```\nhttps://kimookoii.github.io/ig-followers-scraper/ziconkn_.json\n```\n\n---\n\n## 5. Penjelasan DevSecOps \u0026 Mitigasi Keamanan\n\n### 5.1 Risiko Scraping\n\nScraping Instagram dapat berpotensi menghadirkan risiko:\n\n* Pemblokiran IP (rate limit)\n* Deteksi bot melalui heuristik browser\n* Perubahan struktur HTML/endpoint API\n* Ketergantungan terhadap CDN eksternal\n\n### 5.2 Integritas Pipeline\n\nMitigasi keamanan yang digunakan:\n\n#### a. GitHub Actions Hardening\n\n* Penggunaan `permissions: contents: write` minimal\n* PAT fallback hanya jika disediakan\n* Cleanup server otomatis\n* Log hanya berisi output server, tidak menyimpan kredensial\n\n#### b. Dependencies Security\n\n* Playwright di-instalkan melalui `npx playwright install --with-deps`\n* Workflow siap diperluas dengan scanning tools seperti:\n\n  * Trivy\n  * npm audit\n  * CodeQL\n\n#### c. CVE Awareness\n\nBeberapa potensi CVE yang perlu diperhatikan:\n\n* Chromium vulnerabilities (Playwright otomatis mengupdate engine ke versi terbaru)\n* Node.js vulnerabilities\n* Dependency vulnerabilities via npm\n\nRekomendasi mitigasi:\n\n* Gunakan `npm audit` di CI\n* Perbarui Playwright secara berkala\n* Tambahkan CodeQL scanning pada repo\n\n---\n\n## 6. Cara Menjalankan Secara Lokal\n\n### Prasyarat\n\n* Node.js 18+\n* npm\n* Playwright\n\n### Install dependency\n\n```\nnpm install\nnpx playwright install\n```\n\n### Jalankan server lokal\n\n```\nnode index.js\n```\n\nEndpoint tersedia di:\n\n```\nhttp://localhost:3000/api/followers?username=ziconkn_\n```\n\n---\n\n## 7. Workflow GitHub Actions\n\nFile workflow berada di:\n\n```\n.github/workflows/scrape.yml\n```\n\nPipeline melakukan:\n\n1. Setup Node.js\n2. Install dependency\n3. Install Playwright browsers\n4. Start server di background\n5. Scraping IG → JSON\n6. Generate badge JSON\n7. Deploy ke gh-pages\n\n---\n\n## 8. Deployment GitHub Pages\n\nHalaman statis otomatis tersedia di:\n\n```\nhttps://kimookoii.github.io/ig-followers-scraper/\n```\n\nFile-file JSON otomatis tersaji sebagai API publik.\n\n---\n\n## 9. Troubleshooting\n\n### Tidak bisa deploy (403)\n\n* Pastikan `permissions: contents: write` ada pada workflow\n* Pastikan repository bukan fork\n* Jika branch `gh-pages` dilindungi, gunakan PAT\n\n### Server gagal start\n\nCek log:\n\n```\nlogs/server.log\n```\n\n### JSON tidak update\n\nPeriksa log workflow GitHub Actions → step \"Fetch Instagram data\".\n\n---\n\n## 10. Kontribusi\n\nPull request dipersilakan.\nSebelum melakukan PR, jalankan lint \u0026 test lokal.\n\n---\n\n## 11. Lisensi\n\nProyek ini berada di bawah lisensi MIT.\nSilakan digunakan untuk riset, belajar, maupun automasi pribadi.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkimookoii%2Fig-followers-scraper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkimookoii%2Fig-followers-scraper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkimookoii%2Fig-followers-scraper/lists"}