Masalah Keamanan? Silakan baca ini! - TheKingTermux/myanimelist-nekopoi-scrapper GitHub Wiki
Wiki MyAnimeList dan Nekopoi Scrapper
Versi Skrip: 13* *Versi akan berubah mengikuti versi yang sedang dikembangkan!
Ringkasan Kode dan Arsitektur
Ini adalah skrip Python murni (~936 baris untuk CLI + 576 baris untuk GUI + 1417 baris untuk localization) yang mengumpulkan data anime publik dari dua situs web dan menyimpannya secara lokal. Tidak ada file biner yang dikompilasi, tidak ada ketergantungan eksternal di luar perpustakaan standar, dan tidak ada proses yang berjalan terus-menerus. Versi 13 memperkenalkan dukungan proxy opsional dan retry otomatis untuk menghindari blokir anti-scraping, GUI untuk antarmuka pengguna, dan sistem localization untuk 9 bahasa, tetapi semua operasi tetap lokal dan transparan.
1. Bagian Impor (Baris 1-10)
import requests
from bs4 import BeautifulSoup
import re
import os
from datetime import datetime
import time
import random
import logging
import threading
import sys
Analisis Keamanan:
- requests: Perpustakaan HTTP standar untuk membuat permintaan web. Tidak ada backdoor dalam paket resmi. Versi 13 menggunakan ini dengan header standar dan dukungan proxy opsional.
- BeautifulSoup: Parser HTML murni Python. Hanya memproses string HTML lokal, tidak ada kode jaringan.
- re, os, datetime, time, random, logging, threading, sys: Semua modul bawaan Python. Tidak ada ketergantungan eksternal yang dapat disusupi.
- Tidak ada impor mencurigakan: Tidak ada indikator malware umum seperti
socket(untuk koneksi tidak sah),subprocess(untuk menjalankan perintah sistem),smtplib(untuk pengiriman email),ftplib(untuk unggahan file), atau modulkeylogger.
2. Variabel Global dan Konfigurasi (Baris 12-36)
logging.basicConfig(level=logging.INFO, format='%(message)s')
loading_active = False
DANGER_GENRES = {"Adult", "Boys Love", "Yaoi", "Crossdressing", "Ecchi", "Girls Love", "Yuri", "Hentai", "Erotica"}
EPS_REGEX = re.compile(r'(\d+)(?:\s*eps)?')
DURATION_REGEX = re.compile(r'(\d+)\s*min')
Analisis Keamanan:
- logging: Dikonfigurasi untuk output konsol saja. Tidak ada pencatatan file atau transmisi eksternal.
- loading_active: Bendera boolean sederhana untuk animasi antarmuka pengguna. Tidak ada keadaan persisten.
- DANGER_GENRES: Kumpulan string yang dikodekan secara statis untuk penyaringan konten. Tidak ada kode yang dieksekusi.
- Pola regex: Dikompilasi sekali saat startup untuk kinerja. Pemrosesan teks murni, tidak ada eksekusi kode.
- Tidak ada perubahan berbahaya: Versi 13 mempertahankan konfigurasi ini tanpa menambahkan variabel global baru yang mencurigakan.
3. Fungsi Animasi Pemuatan (Baris 18-28)
def loading_animation(message="🔄 Memproses..."):
spinner = ['|', '/', '-', '\\']
i = 0
while loading_active:
sys.stdout.write(f'\r{message} {spinner[i % len(spinner)]}')
sys.stdout.flush()
time.sleep(0.15)
i += 1
sys.stdout.write(f'\r{message} completed ✓\n')
sys.stdout.flush()
Analisis Keamanan:
- Fungsi antarmuka konsol murni. Tidak ada akses file, panggilan jaringan, atau modifikasi sistem.
- Menggunakan bendera global
loading_activeuntuk mengontrol loop. time.sleep()hanya untuk timing animasi, bukan untuk anti-deteksi.- Tidak ada perubahan: Tetap sama seperti versi sebelumnya, aman.
4. Fungsi Utilitas (Baris 38-80)
Ini adalah fungsi bantu untuk penerjemahan tanggal dan parsing jumlah anggota.
translate_month() (Baris 38-54):
- Manipulasi string murni menggunakan penggantian regex.
- Menerjemahkan nama bulan dari bahasa Inggris ke bahasa Indonesia.
- Tidak ada panggilan eksternal atau penyimpanan data.
parse_date_flexible() (Baris 56-69):
- Memparsing string tanggal menggunakan
datetime.strptime(). - Mengembalikan
Nonejika gagal. Tidak ada transmisi kesalahan.
parse_member_count() (Baris 71-79):
- Mengonversi teks seperti "10K" menjadi bilangan bulat menggunakan matematika dasar.
- Menggunakan
re.sub()untuk pembersihan teks. Perhitungan murni.
Analisis Keamanan: Semua adalah fungsi stateless yang memproses string secara lokal. Tidak ada efek samping. Versi 13 tidak mengubah fungsi ini.
5. Fungsi Ekstraksi Data (Baris 81-142)
get_anime_data(entry):
- Menerima elemen HTML BeautifulSoup.
- Mengekstrak data anime menggunakan selektor CSS (misalnya,
entry.select_one('div.title > div > h2 > a')). - Mengembalikan kamus string/bilangan bulat.
Analisis Keamanan:
- Pemrosesan HTML murni dengan BeautifulSoup.
- Tidak ada eksekusi JavaScript, tidak ada unduhan file.
- Semua data berasal dari elemen HTML yang diberikan (diteruskan dari fungsi pengikisan).
- Penanganan kesalahan hanya dicatat secara lokal.
- Tidak ada perubahan berbahaya: Versi 13 mempertahankan ekstraksi data yang aman.
6. Fungsi Pengikisan Nekopoi (Baris 144-297)
scrape_nekopoi(max_retries=3, use_proxy=False, proxy_list=None):
- Melakukan hingga 3 percobaan HTTP GET ke
https://nekopoi.care/jadwal-new-hentai/. - Header: User-Agent dan Accept-Language standar.
- Mendukung proxy opsional untuk menghindari blokir.
- Memproses HTML dengan BeautifulSoup.
- Mengembalikan kamus data yang diproses.
Poin Keamanan Utama:
- Permintaan HTTP terbatas: Hanya ke URL target. Tidak ada pengalihan ke situs berbahaya.
- Timeout: 15 detik mencegah program macet.
- Pelacakan data:
data_usage += len(response.content)- hanya menghitung byte secara lokal. - Threading: Menggunakan thread daemon untuk animasi, mati saat fungsi berakhir.
- Proxy opsional: Jika diaktifkan, menggunakan proxy dari daftar yang disediakan pengguna, tetapi tidak menyimpan atau mengirim data proxy.
- Retry dengan backoff: Exponential backoff untuk menghindari deteksi, tetapi hanya untuk retry lokal.
- Tidak ada transmisi data: Semua pemrosesan dilakukan secara lokal.
Analisis Keamanan Versi 13: Penambahan proxy dan retry meningkatkan ketahanan, tetapi tetap aman karena proxy hanya digunakan untuk routing permintaan HTTP standar dan tidak ada penyimpanan kredensial.
7. Fungsi Pengambilan Data MAL (Baris 325-442)
scrape_mal_seasonal(url, max_retries=3, use_proxy=False, proxy_list=None):
- Mirip dengan fungsi Nekopoi, tetapi untuk halaman musim MyAnimeList.
- Melakukan hingga 3 percobaan GET dengan header yang sama.
- Mendukung proxy opsional.
- Memeriksa CAPTCHA di URL (hanya penanganan kesalahan).
- Memparsing kategori anime yang berbeda.
Analisis Keamanan:
- Pola aman yang sama seperti scraper Nekopoi.
- URL dibangun dari masukan pengguna (tahun/musim) tetapi diverifikasi.
- Tidak ada eksekusi kode sembarangan dari data yang dikumpulkan.
- Penambahan proxy dan retry: Sama seperti Nekopoi, aman karena lokal.
8. Fungsi Status Cetak (Baris 299-323)
print_status(scraping_start_time=None, continuous=False):
- Mencetak waktu scraping, penggunaan data, dan waktu saat ini.
- Menggunakan variabel global untuk pelacakan.
Analisis Keamanan:
- Hanya output konsol. Tidak ada akses jaringan atau file sensitif.
- Baru di versi 13: Ditambahkan untuk pelacakan waktu yang lebih baik, tetapi tetap aman.
9. Fungsi Penyimpanan File (Baris 444-736)
save_to_file():
- Menerima kamus data dan menulis ke file teks.
- Menggunakan
open()dengan enkoding UTF-8. - Membuat direktori dengan
os.makedirs()jika diperlukan.
Analisis Keamanan:
- Hanya menulis ke file lokal di direktori
./AnimeList/. - Tidak membaca file sensitif.
- Template header adalah string yang dikodekan secara statis dengan placeholder.
- Tidak ada unggahan berkas atau transmisi eksternal.
- Tidak ada perubahan berbahaya: Versi 13 mempertahankan penyimpanan lokal.
10. Fungsi Header Tampilan (Baris 737-746)
tampilkan_header():
- Menampilkan header program dengan versi 13.
Analisis Keamanan:
- Output konsol murni. Tidak ada operasi berbahaya.
11. Fungsi Utama (Baris 747-935)
main():
- Mengelola masukan pengguna dengan loop validasi.
- Memanggil fungsi pengikisan data.
- Menyimpan data dan mencetak status.
Validasi Masukan:
- Tahun: Harus berupa angka, dalam rentang yang wajar.
- Musim: Pilihan 1-4.
- Batas anggota: Angka dengan sufiks K/M.
- Nama file: Opsional, default ke pola aman.
Analisis Keamanan:
- Semua masukan adalah string yang digunakan untuk konstruksi URL atau penamaan file.
- Tidak ada
eval(),exec(), atau injeksi perintah. os.system('cls')hanya membersihkan konsol (spesifik Windows).- Penggunaan data disimpan ke
data_usage.txtsecara lokal. - Tidak ada perubahan berbahaya: Versi 13 menambahkan validasi yang lebih ketat, tetapi tetap aman.
12. Titik Masuk (Baris 935-936)
if __name__ == "__main__":
main()
Analisis Keamanan: Titik masuk Python standar. Tidak ada eksekusi otomatis atau proses latar belakang.
13. GUI Scraper (gui_scraper.py - Baris 1-541)
Impor GUI (Baris 1-28):
import tkinter as tk
from tkinter import ttk, filedialog, messagebox, scrolledtext
import threading
import os
import sys
import json
import csv
import pandas as pd
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from datetime import datetime
import requests
from bs4 import BeautifulSoup
import re
import time
import random
import logging
import random
# Import existing functions from the main script
from MyAnimeList_and_Nekopoi_Scrapper import (
scrape_mal_seasonal, scrape_nekopoi, save_to_file, translate_month,
parse_date_flexible, parse_member_count, get_anime_data, loading_animation,
print_status, tampilkan_header, DANGER_GENRES, EPS_REGEX, DURATION_REGEX
)
# Import localization
from localization import i18n
Analisis Keamanan:
- tkinter: Perpustakaan GUI standar Python. Tidak ada backdoor, hanya antarmuka pengguna lokal.
- pandas, reportlab: Digunakan untuk ekspor data (CSV, PDF). Pemrosesan data lokal, tidak ada transmisi.
- Import dari main script: Menggunakan fungsi yang sudah dianalisis aman.
- Import localization: Sistem terjemahan lokal, tidak ada panggilan eksternal.
Kelas AnimeScraperGUI (Baris 30-576):
- Membuat antarmuka GUI dengan Tkinter.
- Mengelola input pengguna, scraping, penyimpanan, dan penyaringan.
- Menggunakan threading untuk operasi non-blocking.
Analisis Keamanan:
- Semua operasi GUI lokal. Tidak ada akses jaringan kecuali melalui fungsi scraping yang sudah aman.
- Penyimpanan file menggunakan
filedialogstandar, hanya ke path yang dipilih pengguna. - Tidak ada eksekusi kode dari input pengguna.
- Threading digunakan untuk UI responsiveness, tetapi tidak untuk operasi berbahaya.
- Tidak ada backdoor: GUI hanya wrapper untuk fungsi CLI yang aman.
14. Sistem Localization (localization.py - Baris 1-1417)
Kelas Localization (Baris 4-1417):
- Mengelola terjemahan untuk 9 bahasa.
- Memuat string terjemahan dari kode sumber.
- Menyediakan metode untuk mengubah bahasa dan mendapatkan teks terjemahan.
Analisis Keamanan:
- Semua data terjemahan dikodekan secara statis dalam kode.
- Tidak ada pembacaan file eksternal atau panggilan jaringan.
- Hanya manipulasi string dan kamus Python.
- Tidak ada risiko: Sistem localization murni untuk UI, tidak mempengaruhi logika scraping.
Keamanan Aliran Data
Masukan Pengguna (string yang diverifikasi) → Konstruksi URL → HTTP GET (hanya 2 permintaan, dengan retry/proxy opsional) → Parsing HTML → Kamus Lokal → Output Berkas Teks/JSON/CSV/PDF
- Tidak ada transmisi data eksternal: Semua data tetap di mesin lokal.
- Tidak ada pengumpulan data pengguna: Hanya meminta parameter untuk pengikisan.
- Tidak ada penyimpanan permanen: Berkas dibuat sesuai permintaan, tidak ada basis data atau registri.
- Proxy opsional: Jika digunakan, hanya untuk routing permintaan, tidak menyimpan data.
- GUI dan Localization: Tambahan UI lokal, tidak mengubah aliran data inti.
Pola Malware Umum - Mengapa Tidak Ada
- Keylogger: Tidak ada hook keyboard/mouse, tidak ada pemantauan input.
- Pengambilan Data: Tidak ada permintaan SMTP, FTP, atau HTTP POST.
- Akses Jarak Jauh: Tidak ada koneksi soket, tidak ada port yang mendengarkan.
- Pencurian File: Hanya membaca file
data_usage.txtmiliknya sendiri, menulis ke file yang ditentukan pengguna. - Modifikasi Sistem: Tidak ada pengeditan registri, tidak ada instalasi layanan, tidak ada entri startup.
- Obfuskasi Kode: Semua kode dapat dibaca, tidak ada base64, tidak ada minifikasi.
- Anti-Analisis: Tidak ada deteksi VM, tidak ada pemeriksaan debugger. Retry dan proxy hanya untuk menghindari blokir, bukan untuk menyembunyikan aktivitas berbahaya.
Verifikasi Ketergantungan
Berkas requirements.txt berisi:
requests>=2.25.0
beautifulsoup4>=4.9.0
pandas>=1.3.0
reportlab>=3.6.0
Ini adalah paket standar yang telah diaudit dan tidak memiliki pintu belakang yang diketahui. Versi 13 menambahkan pandas dan reportlab untuk ekspor data, tetapi tetap aman.
Transparansi GitHub
Kode tersedia secara publik di https://github.com/TheKingTermux/myanimelist-nekopoi-scrapper. Siapa pun dapat:
- Meninjau kode sumber
- Memeriksa riwayat commit
- Memverifikasi tidak ada commit tersembunyi
- Menjalankan kode di sandbox
Jaminan Akhir
Skrip ini melakukan persis seperti yang diklaim: mengumpulkan data anime publik dan menyimpannya secara lokal. Tidak ada pintu belakang, tidak ada pengumpulan data di luar yang ditampilkan, dan tidak ada mekanisme untuk pengendalian jarak jauh atau pencurian data. Kode ini transparan, menggunakan perpustakaan aman, dan mengikuti praktik standar Python. Penambahan proxy, retry, GUI, dan multi-bahasa di versi 13 hanya meningkatkan fungsionalitas tanpa mengorbankan keamanan.
Jika Anda masih ragu, saya menyarankan Anda untuk:
- Meninjau repositori GitHub
- Menjalankan skrip di lingkungan virtual
- Memeriksa lalu lintas jaringan (hanya 2 permintaan GET, dengan proxy opsional)
- Memeriksa file output (hanya data teks/JSON/CSV/PDF)