Membuat perpustakaan rumah dengan Notion dan Python

Saya selalu tertarik pada cara terbaik untuk mendistribusikan buku di perpustakaan elektronik saya. Pada akhirnya, saya sampai pada opsi ini dengan perhitungan otomatis jumlah halaman dan barang lainnya. Saya bertanya kepada semua orang yang berkepentingan di bawah kucing.

Bagian 1. Dropbox

Semua buku saya ada di dropbox. Ada 4 kategori yang saya bagi semuanya: Buku Teks, Referensi, Fiksi, Nonfiksi. Tapi saya tidak menambahkan buku referensi ke tabel.

Sebagian besar bukunya berformat .epub, sisanya berformat .pdf. Artinya, solusi akhir harus mencakup kedua opsi tersebut.

Jalan saya menuju buku kira-kira seperti ini:

/Книги/Нехудожественное/Новое/Дизайн/Юрий Гордон/Книга про буквы от А до Я.epub 

Jika buku tersebut fiksi, maka kategorinya (yaitu, “Desain” dalam kasus di atas) dihapus.

Saya memutuskan untuk tidak repot dengan API Dropbox, karena saya memiliki aplikasinya yang menyinkronkan folder. Artinya, rencananya begini: kita mengambil buku dari folder, menjalankan setiap buku melalui penghitung kata, dan menambahkannya ke Notion.

Bagian 2. Tambahkan baris

Tabelnya sendiri akan terlihat seperti ini. PERHATIAN: sebaiknya nama kolom dibuat dalam bahasa latin.

Membuat perpustakaan rumah dengan Notion dan Python

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

Membuat perpustakaan rumah dengan Notion dan Python

Buka Notion, tekan Ctrl + Shift + J, buka Aplikasi -> Cookies, salin token_v2 dan beri nama TOKEN. Lalu kita pergi ke halaman yang kita butuhkan dengan tanda perpustakaan dan salin linknya. Kami menyebutnya PANGGILAN.

Kemudian kami menulis kode untuk terhubung ke Notion.

database = client.get_collection_view(NOTION)
current_rows = database.default_query().execute()

Selanjutnya, mari kita tulis fungsi untuk menambahkan baris ke tabel.

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 terjadi di sini. Kami mengambil dan menambahkan baris baru ke tabel di baris pertama. Selanjutnya, kami membagi jalur kami sepanjang “/” dan mendapatkan tag. Tag - dalam istilah “Seni”, “Desain”, siapa penulisnya, dan sebagainya. Lalu kami mengatur semua bidang pelat yang diperlukan.

Bagian 3. Menghitung kata, jam dan kesenangan lainnya

Ini adalah tugas yang lebih sulit. Seingat kami, kami memiliki dua format: epub dan pdf. Jika semuanya jelas dengan epub - kata-katanya mungkin ada, maka semuanya tidak begitu jelas tentang pdf: mungkin hanya terdiri dari gambar yang direkatkan.

Jadi fungsi kita untuk menghitung kata di PDF akan terlihat seperti ini: kita ambil jumlah halaman dan mengalikannya dengan konstanta tertentu (rata-rata jumlah kata per halaman).

Ini dia:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

WORDS_PER_PAGE untuk halaman A4 ini kira-kira 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 kita akan menulis sesuatu untuk menghitung halaman di Epub. Kita gunakan epub_converter. Di sini kita mengambil buku itu, mengubahnya menjadi beberapa baris, dan menghitung kata untuk setiap baris.

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 hitung waktunya. Kami menghitung 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 melewati semua jalur yang mungkin ada di folder buku kita. Periksa apakah sudah ada buku di Notion: jika sudah ada, kita tidak perlu lagi membuat garis.
Kemudian kita perlu menentukan jenis file dan, bergantung pada ini, menghitung jumlah kata. Tambahkan buku di akhir.

Ini adalah kode yang kami dapatkan:

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 mengecek apakah suatu buku sudah ditambahkan tampilannya 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 ini membantu Anda membaca lebih lanjut :)

Sumber: www.habr.com

Tambah komentar