Krijimi i një biblioteke në shtëpi me Notion dhe Python

Gjithmonë kam qenë i interesuar se si t'i shpërndaj më mirë librat në bibliotekën time elektronike. Në fund, arrita te ky opsion me llogaritjen automatike të numrit të faqeve dhe të mirave të tjera. Kërkoj të gjithë të interesuarit nën cat.

Pjesa 1. Dropbox

Të gjithë librat e mi janë në dropbox. Janë 4 kategori në të cilat kam ndarë gjithçka: Teksti mësimor, Referenca, Fiction, Non-fiction. Por unë nuk shtoj libra referimi në tabelë.

Shumica e librave janë .epub, pjesa tjetër janë .pdf. Kjo do të thotë, zgjidhja përfundimtare duhet të mbulojë disi të dyja opsionet.

Rrugët e mia drejt librave janë diçka si kjo:

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

Nëse libri është fiksion, atëherë kategoria (d.m.th., "Dizajn" në rastin e mësipërm) hiqet.

Vendosa të mos shqetësohem me Dropbox API, pasi kam aplikacionin e tyre që sinkronizon dosjen. Kjo do të thotë, plani është ky: ne marrim libra nga dosja, e kalojmë çdo libër përmes një numëruesi të fjalëve dhe e shtojmë atë te Notion.

Pjesa 2. Shtoni një rresht

Tabela në vetvete duhet të duket diçka si kjo. KUJDES: është më mirë të bëni emrat e kolonave në latinisht.

Krijimi i një biblioteke në shtëpi me Notion dhe Python

Ne do të përdorim Notion API jozyrtare, sepse ajo zyrtare nuk është dorëzuar ende.

Krijimi i një biblioteke në shtëpi me Notion dhe Python

Shkoni te Notion, shtypni Ctrl + Shift + J, shkoni te Aplikacioni -> Cookies, kopjoni token_v2 dhe quajeni TOKEN. Më pas shkojmë në faqen që na nevojitet me shenjën e bibliotekës dhe kopjojmë lidhjen. Ne e quajmë atë NOCION.

Më pas shkruajmë kodin për t'u lidhur me Notion.

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

Më pas, le të shkruajmë një funksion për të shtuar një rresht në 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

Cfare po ndodh ketu. Marrim dhe shtojmë një rresht të ri në tabelën në rreshtin e parë. Më pas, ne ndajmë rrugën tonë përgjatë "/" dhe marrim etiketa. Etiketat - për sa i përket "Artit", "Dizajnit", kush është autori, etj. Më pas vendosim të gjitha fushat e nevojshme të pllakës.

Pjesa 3. Numërimi i fjalëve, orëve dhe kënaqësive të tjera

Kjo është një detyrë më e vështirë. Siç e kujtojmë, kemi dy formate: epub dhe pdf. Nëse gjithçka është e qartë me epub - fjalët me siguri janë atje, atëherë gjithçka nuk është aq e qartë në lidhje me pdf: ai thjesht mund të përbëhet nga imazhe të ngjitura.

Pra, funksioni ynë për numërimin e fjalëve në PDF do të duket kështu: marrim numrin e faqeve dhe shumëzojmë me një konstante të caktuar (numri mesatar i fjalëve për faqe).

Këtu është ajo:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

Kjo WORDS_PER_PAGE për një faqe A4 është afërsisht 300.

Tani le të shkruajmë një funksion për të numëruar faqet. ne do të përdorim pyPDF2.

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

Më pas, ne do të shkruajmë një gjë për numërimin e faqeve në Epub. Ne përdorim epub_konverter. Këtu marrim librin, e kthejmë në rreshta dhe numërojmë fjalët për çdo rresht.

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)

Tani le të llogarisim kohën. Ne marrim numërimin e fjalëve tona të preferuara dhe e ndajmë atë me shpejtësinë tuaj të leximit.

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

Pjesa 4. Lidhja e të gjitha pjesëve

Ne duhet të kalojmë nëpër të gjitha shtigjet e mundshme në dosjen tonë të librave. Kontrolloni nëse ka tashmë një libër në Notion: nëse ka, nuk kemi më nevojë të krijojmë një rresht.
Pastaj duhet të përcaktojmë llojin e skedarit, në varësi të kësaj, numëroni numrin e fjalëve. Shtoni një libër në fund.

Ky është kodi që marrim:

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)

Dhe funksioni për të kontrolluar nëse një libër është shtuar duket si ky:

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

Përfundim

Faleminderit të gjithëve që lexuan këtë artikull. Shpresoj se ju ndihmon të lexoni më shumë :)

Burimi: www.habr.com

Shto një koment