Saya selalu tertarik dengan cara mendistribusikan buku di perpustakaan elektronik saya dengan lebih baik. Akibatnya, saya sampai pada opsi ini dengan perhitungan otomatis jumlah halaman dan barang lainnya. Saya bertanya semua yang tertarik di bawah kucing.
Bagian 1. Dropbox
Semua buku yang saya miliki ada di dropbox. Ada 4 kategori di mana saya membagi semuanya: Buku Pelajaran, Referensi, Artistik, Non-artistik. Tapi saya tidak menambahkan buku referensi ke tablet.
Sebagian besar buku adalah .epub, sisanya adalah .pdf. Artinya, solusi terakhir harus entah bagaimana mencakup kedua opsi.
Jalan menuju buku adalah seperti ini:
///// / .epub
Jika buku itu fiksi, maka kategori (yaitu, "Desain" dalam kasus di atas) dihapus.
Saya memutuskan untuk tidak repot dengan dropbox API, untungnya saya punya aplikasi mereka yang menyinkronkan folder. Artinya, rencananya adalah ini: ambil buku dari folder, jalankan setiap buku melalui penghitung kata, tambahkan ke Notion.
Bagian 2. Tambahkan baris
Tabel itu sendiri harus terlihat seperti ini. PERHATIAN: nama kolom paling baik dilakukan dalam huruf Latin.

Kami akan menggunakan Notion API tidak resmi, karena yang resmi belum dikirim.

Pergi ke Notion, tekan Ctrl + Shift + J, buka Application -> Cookies, salin token_v2 dan sebut TOKEN. Kemudian kita pergi ke halaman yang kita butuhkan dengan plat perpustakaan dan menyalin tautannya. Panggil NOTION.
Lalu kami menulis kode untuk terhubung ke Notion.
database = client.get_collection_view(NOTION) current_rows = database.default_query().execute()
Selanjutnya, mari kita menulis fungsi untuk menambahkan baris ke label.
def add_row(path, file, words_count, pages_count, hours): row = database.collection.add_row() row.title = file tags = path.split("/") if len(tags) >= 1: row.what = tags[0] if len(tags) >= 2: row.state = tags[1] if len(tags) >= 3: if tags[0] == "": row.author = tags[2] elif tags[0] == "": row.tags = tags[2] elif tags[0] == "": row.tags = tags[2] if len(tags) >= 4: row.author = tags[3] row.hours = hours row.pages = pages_count row.words = words_count
Apa yang sedang terjadi di sini. Kami mengambil dan menambahkan baris baru ke tabel di baris pertama. Selanjutnya, kami membagi jalur kami dengan "/" dan mendapatkan tag. Tag - dalam hal "Artistik", "Desain", siapa penulis dan sebagainya. Lalu kami mengatur semua bidang pelat yang diperlukan.
Bagian 3. Menghitung kata, jam tangan, dan kesenangan lainnya
Ini adalah tugas yang lebih rumit. Seperti yang kita ingat, kita memiliki dua format: epab dan pdf. Jika semuanya jelas dengan epab - mungkin ada kata-kata di sana, lalu bagaimana dengan pdf tidak begitu sederhana: itu hanya dapat terdiri dari gambar terpaku.
Jadi fungsi untuk menghitung kata dalam pdf akan terlihat seperti ini: kita mengambil jumlah halaman dan mengalikannya dengan konstanta tertentu (jumlah rata-rata kata per halaman).
Ini dia:
def get_words_count(pages_number): return pages_number * WORDS_PER_PAGE
Ini adalah WORDS_PER_PAGE untuk halaman A4 sekitar 300.
Sekarang mari kita menulis fungsi untuk menghitung halaman. Kami akan menggunakan PyPDF2 .
def get_pdf_pages_number(path, filename): pdf = PdfFileReader(open(os.path.join(path, filename), 'rb')) return pdf.getNumPages()
Selanjutnya, kami akan menulis sedikit untuk menghitung halaman di epaba. Kami menggunakan epub_converter . Di sini kita mengambil sebuah buku, mengubahnya menjadi beberapa baris, dan untuk setiap baris kita menghitung kata-kata.
def get_epub_pages_number(path, filename): book = open_book(os.path.join(path, filename)) lines = convert_epub_to_lines(book) words_count = 0 for line in lines: words_count += len(line.split(" ")) return round(words_count / WORDS_PER_PAGE)
Sekarang mari kita lakukan penghitungan waktu. Kami mengambil jumlah kata favorit kami dan membaginya dengan kecepatan membaca Anda.
def get_reading_time(words_count): return round(((words_count / WORDS_PER_MINUTE) / 60) * 10) / 10
Bagian 4. Menghubungkan semua bagian
Kita perlu menelusuri semua jalur yang mungkin ada di folder buku kita. Periksa apakah sudah ada buku di Notion: jika ada, kita tidak perlu lagi membuat garis.
Maka kita perlu menentukan jenis file, tergantung pada ini, menghitung jumlah kata. Tambahkan buku di bagian akhir.
Ini kode yang kita dapat:
for root, subdirs, files in os.walk(BOOKS_DIR): if len(files) > 0 and check_for_excusion(root): for file in files: array = file.split(".") filetype = file.split(".")[len(array) - 1] filename = file.replace("." + filetype, "") local_root = root.replace(BOOKS_DIR, "") print("Dir: {}, file: {}".format(local_root, file)) if not check_for_existence(filename): print("Dir: {}, file: {}".format(local_root, file)) if filetype == "pdf": count = get_pdf_pages_number(root, file) else: count = get_epub_pages_number(root, file) words_count = get_words_count(count) hours = get_reading_time(words_count) print("Pages: {}, Words: {}, Hours: {}".format(count, words_count, hours)) add_row(local_root, filename, words_count, count, hours)
Dan fungsi untuk memeriksa apakah buku yang ditambahkan terlihat seperti ini:
def check_for_existence(filename): for row in current_rows: if row.title in filename: return True elif filename in row.title: return True return False
Kesimpulan
Terima kasih kepada semua orang yang membaca artikel ini. Saya harap dia membantu Anda membaca lebih lanjut :)