Bu Python betiği, FlipHTML5 platformunda yayınlanan kitapları, sayfa resimlerini indirip tek bir PDF dosyasında birleştirerek indirmenizi sağlar.
Hazırlayan: Yasin Karateke GitHub: https://github.com/ykarateke
FlipHTML5, yayınlarınızı çevrimiçi olarak paylaşmak için kullanılan popüler bir platformdur. Bu betik, belirli bir kitabın kimliğini (ID) kullanarak, o kitaba ait sayfaların resim dosyalarını (.jpg veya .webp formatında arar, .jpg olarak kaydeder) indirir ve ardından bu resimleri sıralı bir şekilde tek bir PDF dosyasında birleştirir.
İşlemler sırasında hız kazanmak için çoklu iş parçacığı (multi-threading) kullanılır ve tqdm kütüphanesi ile indirme ve PDF oluşturma ilerlemesi gösterilir. Betik, olası hatalara karşı (ağ hataları, bulunamayan sayfalar, yapılandırma sorunları vb.) çeşitli kontroller ve hata yakalama mekanizmaları içerir.
- Kitap ID ile İndirme:
kullaniciAdi/kitapKimligiformatındaki ID ile kitapları hedefler. - Sayfa Aralığı Belirleme: İndirilecek başlangıç ve bitiş sayfalarını belirleyebilirsiniz (varsayılan olarak tüm kitap indirilir).
- Özelleştirilebilir Kayıt Yolu: İndirilen resimlerin kaydedileceği klasör adını ve oluşturulacak PDF dosyasının adını belirleyebilirsiniz.
- Mevcut Dosyaları Atlama: Daha önce indirilmiş olan sayfa resimlerini tekrar indirmeyerek zaman kazandırır (varsayılan olarak etkindir).
- Eşzamanlı İndirme: Ayarlanabilir sayıda iş parçacığı (thread) kullanarak indirme işlemini hızlandırır.
- Otomatik Yapılandırma Algılama: Kitabın sayfa bilgilerini içeren
config.jsdosyasını otomatik olarak bulup ayrıştırır (htmlConfigvebookConfigformatlarını destekler). - Esnek Resim Yolu Algılama: Farklı çözünürlük/formatlardaki resimleri bulmaya çalışır (
large,page,mobileyolları ve.webp,.jpguzantıları denenir). Tüm bulunan resimler.jpgolarak kaydedilir. - Hata Yönetimi ve Tekrar Deneme: Ağ hataları, zaman aşımları, 403 (Erişim Engellendi) ve 404 (Bulunamadı) gibi durumlarda bilgilendirme yapar. Başarısız indirmeler için bir tekrar deneme mekanizması içerir.
- PDF Oluşturma: İndirilen resimleri doğru sırada birleştirerek tek bir PDF dosyası oluşturur (
fpdf2vePyPDF2kullanılır). - Büyük PDF'ler İçin İyileştirme: Çok sayıda sayfası olan kitaplarda bellek sorunlarını önlemek için PDF oluşturma işlemi parçalar halinde yapılır (chunking).
- İlerleme Çubukları: İndirme ve PDF oluşturma aşamalarında görsel ilerleme bilgisi sunar (
tqdm). - Rastgele Kullanıcı Aracısı (User-Agent): Sunucu tarafında basit engellemeleri aşmaya yardımcı olmak için isteklerde rastgele tarayıcı kimlikleri kullanır.
- Geçici Dosya Temizliği: PDF oluşturma sırasında kullanılan geçici dosyalar işlem sonunda otomatik olarak silinir.
- Python 3.x
- Gerekli Kütüphaneler:
requests: HTTP istekleri göndermek için.Pillow(PIL Fork): Resim dosyalarını işlemek ve dönüştürmek için.tqdm: Konsolda ilerleme çubukları göstermek için.PyPDF2: PDF dosyalarını birleştirmek için.fpdf2: Resimlerden PDF sayfaları oluşturmak için (script'tefpdfolarak import edilse de, genelliklefpdf2paketi kurulur ve kullanılır).
-
Python: Henüz kurulu değilse, Python'un resmi web sitesinden Python 3'ü indirip kurun.
-
Kütüphaneler: Terminal veya komut istemcisini açın ve aşağıdaki komutu çalıştırarak gerekli kütüphaneleri yükleyin:
pip install requests Pillow tqdm PyPDF2 fpdf2
-
Betiği (
.pyuzantılı dosyayı) bilgisayarınıza indirin. -
Terminal veya komut istemcisini açın ve betiğin bulunduğu dizine gidin (
cd /path/to/script). -
Betiği Python ile çalıştırın:
python fliphtml5_downloader_v4.1.py
-
Betik sizden aşağıdaki bilgileri isteyecektir:
- Kitap ID'si: İndirmek istediğiniz kitabın FlipHTML5 üzerindeki ID'si (örn:
ornekKullanici/abcd123). Bu formatta girilmesi zorunludur. - Başlangıç Sayfası: İndirmeye başlanacak sayfa numarası. Varsayılan olarak
1. Sadece sayı girin. - Bitiş Sayfası: İndirmenin biteceği sayfa numarası. Boş bırakırsanız kitabın son sayfasına kadar indirilir. Sadece sayı girin.
- Klasör Adı: Resimlerin ve PDF'nin kaydedileceği klasör. Varsayılan olarak Kitap ID'sinden türetilen güvenli bir isim (
ornekKullanici-abcd123gibi) kullanılır. Boş bırakırsanız varsayılan kullanılır. - PDF Dosya Adı: Oluşturulacak PDF'nin adı. Varsayılan olarak klasör adıyla aynı isimde
.pdfuzantılı (ornekKullanici-abcd123.pdfgibi) bir isim kullanılır. Boş bırakırsanız varsayılan kullanılır. - Mevcut Resimleri Atla:
e(evet) veyah(hayır). Klasörde zaten var olan resim dosyalarının indirilip indirilmeyeceğini sorar. Varsayılane. - Maksimum Eşzamanlı İndirme Sayısı: Aynı anda kaç tane sayfa indirme işleminin yapılacağını belirler. Varsayılan
5. Sunucuyu yormamak adına çok yüksek değerlerden (örn. 20'den fazla) kaçının.
- Kitap ID'si: İndirmek istediğiniz kitabın FlipHTML5 üzerindeki ID'si (örn:
-
Gerekli bilgileri girdikten sonra betik önce yapılandırma dosyasını bulmaya çalışacak, ardından sayfaları indirmeye başlayacak ve son olarak PDF dosyasını oluşturacaktır.
- Yapılandırma Alma: Betik, verilen Kitap ID'si ile ilişkili
config.jsdosyasını FlipHTML5 sunucusundan çekmeye çalışır. Bu dosya genellikle kitabın sayfaları, ID'leri ve diğer ayarları içeren bir JavaScript nesnesi (htmlConfigveyabookConfig) barındırır. - Yapılandırma Ayrıştırma: JavaScript içeriğinden JSON benzeri yapı regex kullanılarak çıkarılır ve Python'un
jsonmodülü ile ayrıştırılır. Sayfa bilgileri (genellikle sayfa numarası ve benzersiz bir resim ID'si veya dosya adı) çıkarılır. - Sayfa Sırası Kaydı: İndirilecek sayfa aralığındaki sayfaların numaraları, PDF oluşturma aşamasında doğru sırayı korumak için
page_order.txtdosyasına yazılır. - Resim İndirme: Belirlenen her sayfa için, potansiyel resim URL'leri (
/files/large/,/files/page/,/files/mobile/yolları ve.webp,.jpguzantıları kombinasyonları denenerek) oluşturulur.- URL'lere istek gönderilir. İlk başarılı yanıt (HTTP 200) alındığında resim indirilir.
- İndirme işlemi hızlandırmak için
threadingile eşzamanlı yapılır. - İndirilen resimler (WebP formatında olsalar bile) standart
.jpgformatına dönüştürülerek kaydedilir. - Hata durumları (404, 403, zaman aşımı vb.) yakalanır ve loglanır. Başarısız indirmeler için kısa bir bekleme süresi sonrası bir kez daha deneme yapılır.
- PDF Oluşturma:
page_order.txtdosyasındaki sıraya göre, indirilen.jpgdosyaları bulunur.- İlk resmin boyutları okunarak PDF sayfa boyutu belirlenir (varsayılan A4).
- Çok sayıda sayfa varsa, işlem parçalara (chunks) ayrılır. Her bir parça için geçici bir PDF dosyası (
fpdf2kullanılarak) oluşturulur. Bu, bellek kullanımını optimize eder. - Tüm geçici PDF parçaları oluşturulduktan sonra,
PyPDF2kullanılarak bu parçalar nihai PDF dosyasında birleştirilir. - Geçici PDF dosyaları silinir.
- Etik Kullanım: Bu betik yalnızca erişim hakkınız olan veya kamuya açık olan içerikleri indirmek için kullanılmalıdır. Telif hakkıyla korunan materyalleri izinsiz indirmek ve dağıtmak yasa dışıdır ve etik değildir. Bu aracın kullanımından doğacak sonuçlardan kullanıcı sorumludur.
- Platform Değişiklikleri: FlipHTML5 web sitesinin yapısını veya API'lerini değiştirirse, bu betik çalışmayabilir veya hatalar verebilir. Betiğin düzenli olarak güncellenmesi gerekebilir.
- Erişim Engelleri: Yoğun kullanım veya sunucu tarafı güvenlik önlemleri nedeniyle FlipHTML5 IP adresinizi geçici veya kalıcı olarak engelleyebilir. Düşük sayıda thread kullanmak bu riski azaltabilir. Bazı kitaplar özel korumalarla indirmeye kapalı olabilir.
- Performans: İndirme hızı internet bağlantınıza, hedef sunucunun yoğunluğuna ve seçtiğiniz thread sayısına bağlıdır.
- PDF Boyutu: İndirilen resimlerin kalitesi ve sayısı PDF dosyasının boyutunu belirler. Büyük kitaplar önemli ölçüde disk alanı kaplayabilir.
- Yapılandırma Alınamıyor:
- Kitap ID'sini doğru formatta (
kullanici/kitapid) girdiğinizden emin olun. - Kitap kaldırılmış veya gizli olabilir.
- FlipHTML5 sitesinde yapılandırma dosyası formatı değişmiş olabilir.
- Ağ bağlantınızı veya bir VPN kullanmayı deneyin.
- Kitap ID'sini doğru formatta (
- Sayfalar İndirilemiyor (404 Not Found):
- Yapılandırma dosyasındaki resim yolları veya ID'leri geçersiz olabilir.
- FlipHTML5, resim dosyalarının konumunu veya adlandırma şemasını değiştirmiş olabilir.
- Kitap eksik veya bozuk yüklenmiş olabilir.
- Sayfalar İndirilemiyor (403 Forbidden):
- FlipHTML5 erişiminizi engellemiş olabilir (IP ban). Daha az thread kullanmayı veya bir süre beklemeyi deneyin. VPN kullanmak işe yarayabilir.
- Kitap korumalı olabilir ve doğrudan resim indirmeye izin vermiyor olabilir.
- PDF Oluşturulamıyor:
- Gerekli kütüphanelerin (
Pillow,PyPDF2,fpdf2) doğru kurulduğundan emin olun. page_order.txtdosyası bulunamıyor veya boş olabilir (indirme adımında sorun yaşanmış olabilir).- Bazı indirilen resim dosyaları bozuk olabilir.
- Diskte yeterli alan olmayabilir.
- Klasöre yazma izniniz olmayabilir.
- Gerekli kütüphanelerin (
- Python veya Kütüphane Hataları:
- Hata mesajını dikkatlice okuyun. Belirli bir kütüphane ile ilgiliyse,
pip install --upgrade kütüphane_adıkomutuyla güncellemeyi deneyin. - Python sürümünüzün uyumlu olduğundan emin olun (Python 3.x önerilir).
- Hata mesajını dikkatlice okuyun. Belirli bir kütüphane ile ilgiliyse,
