Nggawe perpustakaan ngarep karo Pamanggih lan Python

Aku tansah kasengsem babagan cara paling apik kanggo nyebarake buku ing perpustakaan elektronikku. Ing pungkasan, aku teka ing pilihan iki kanthi otomatis ngitung jumlah kaca lan barang liyane. Aku takon kabeh wong sing kasengsem ing kucing.

Bagean 1. Dropbox

Kabeh bukuku ana ing dropbox. Ana 4 kategori sing dakbagi kabeh: Buku Teks, Referensi, Fiksi, Nonfiksi. Nanging aku ora nambah buku referensi kanggo meja.

Umume buku .epub, liyane .pdf. Sing, solusi final kudu piye wae nutupi opsi loro.

Dalanku menyang buku kaya mangkene:

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

Yen buku fiksi, banjur kategori (yaiku, "Desain" ing kasus ndhuwur) dibusak.

Aku mutusaké kanggo ora keganggu karo Dropbox API, awit aku duwe aplikasi sing nyinkronake folder. Sing, rencana iki: kita njupuk buku saka folder, mbukak saben buku liwat tembung counter, lan ditambahake menyang Pamanggih.

Part 2. Tambah baris

Tabel dhewe kudu katon kaya iki. PERHATIAN: luwih becik nggawe jeneng kolom ing basa Latin.

Nggawe perpustakaan ngarep karo Pamanggih lan Python

Kita bakal nggunakake API Pamanggih ora resmi, amarga sing resmi durung dikirim.

Nggawe perpustakaan ngarep karo Pamanggih lan Python

Pindhah menyang Pamanggih, penet Ctrl + Shift + J, pindhah menyang Aplikasi -> Cookie, nyalin token_v2 lan sebutno TOKEN. Banjur pindhah menyang kaca sing dibutuhake kanthi tandha perpustakaan lan nyalin link kasebut. Kita ngarani NOTION.

Banjur kita nulis kode kanggo nyambung menyang Pamanggih.

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

Sabanjure, ayo nulis fungsi kanggo nambah baris menyang 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 sing kedadeyan ing kene. Kita njupuk lan nambah baris anyar kanggo meja ing baris pisanan. Sabanjure, kita pamisah dalan kita ing "/" lan entuk tag. Tag - ing istilah "Seni", "Desain", sing dadi penulis, lan liya-liyane. Banjur kita nyetel kabeh lapangan sing perlu saka piring.

Part 3. Ngetang tembung, jam lan nyenengake liyane

Iki tugas sing luwih angel. Minangka kita elinga, kita duwe rong format: epub lan pdf. Yen kabeh wis jelas karo epub - tembung kasebut bisa uga ana, mula kabeh ora jelas babagan pdf: bisa uga mung kalebu gambar terpaku.

Dadi fungsi kita kanggo ngetung tembung ing PDF bakal katon kaya iki: kita njupuk jumlah kaca lan dikalikake kanthi konstanta tartamtu (jumlah rata-rata tembung saben kaca).

Ana dheweke:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

WORDS_PER_PAGE iki kanggo kaca A4 kira-kira 300.

Saiki ayo nulis fungsi kanggo ngetung kaca. Kita bakal nggunakake pyPDF2.

def get_pdf_pages_number(path, filename):
    pdf = PdfFileReader(open(os.path.join(path, filename), 'rb'))
    return pdf.getNumPages()

Sabanjure, kita bakal nulis bab kanggo ngetang kaca ing Epub. Kita nggunakake epub_converter. Ing kene kita njupuk buku kasebut, ngowahi dadi baris, lan ngetung tembung kanggo saben 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)

Saiki ayo ngetung wektu. Kita njupuk count tembung favorit lan dibagi dening kacepetan maca.

def get_reading_time(words_count):
    return round(((words_count / WORDS_PER_MINUTE) / 60) * 10) / 10

Part 4. Nyambungake kabeh bagean

Kita kudu ngliwati kabeh dalan sing bisa ditindakake ing folder buku kita. Priksa manawa wis ana buku ing Pamanggih: yen ana, kita ora perlu maneh nggawe baris.
Banjur kita kudu nemtokake jinis file, gumantung saka iki, ngitung jumlah tembung. Tambah buku ing pungkasan.

Iki kode sing kita entuk:

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)

Lan fungsi kanggo mriksa apa buku wis ditambahake katon kaya iki:

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

Matur nuwun kanggo kabeh sing maca artikel iki. Muga-muga bisa mbantu maca liyane :)

Source: www.habr.com

Add a comment