Namų bibliotekos kūrimas naudojant „Notion“ ir „Python“.

Visada domėjausi, kaip geriausiai paskirstyti knygas savo elektroninėje bibliotekoje. Galų gale aš priėjau prie šios parinkties automatiniu puslapių skaičiaus ir kitų gėrybių skaičiavimu. Visų besidominčių prašau pagal kat.

1 dalis. Dropbox

Visos mano knygos yra „dropbox“. Yra 4 kategorijos, į kurias aš viską suskirstiau: vadovėlis, žinynas, grožinė literatūra, negrožinė literatūra. Bet žinynų prie lentelės nepridedu.

Dauguma knygų yra .epub, likusios .pdf. Tai yra, galutinis sprendimas turi kažkaip apimti abi galimybes.

Mano keliai į knygas yra maždaug tokie:

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

Jei knyga yra grožinė literatūra, kategorija (tai yra „Dizainas“ aukščiau nurodytu atveju) pašalinama.

Nusprendžiau nesivarginti su Dropbox API, nes turiu jų programą, kuri sinchronizuoja aplanką. Tai yra, planas yra toks: paimame knygas iš aplanko, kiekvieną knygą paleidžiame per žodžių skaitiklį ir pridedame prie sąvokos.

2 dalis. Pridėkite eilutę

Pati lentelė turėtų atrodyti maždaug taip. DĖMESIO: stulpelių pavadinimus geriau daryti lotyniškai.

Namų bibliotekos kūrimas naudojant „Notion“ ir „Python“.

Naudosime neoficialią Notion API, nes oficialioji dar nepateikta.

Namų bibliotekos kūrimas naudojant „Notion“ ir „Python“.

Eikite į „Notion“, paspauskite Ctrl + Shift + J, eikite į „Application -> Cookies“, nukopijuokite token_v2 ir pavadinkite jį TOKEN. Tada einame į mums reikalingą puslapį su bibliotekos ženklu ir nukopijuojame nuorodą. Mes tai vadiname NUOSTATA.

Tada parašome kodą prisijungti prie Notion.

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

Tada parašykime funkciją, kad pridėtume eilutę į lentelę.

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

Kas čia vyksta. Mes paimame ir pridedame naują eilutę į lentelę pirmoje eilutėje. Tada padalijame kelią išilgai „/“ ir gauname žymas. Žymos – kalbant apie „Menas“, „Dizainas“, kas yra autorius ir pan. Tada nustatome visus reikiamus plokštės laukus.

3 dalis. Žodžių, valandų ir kitų malonumų skaičiavimas

Tai sunkesnė užduotis. Kaip prisimename, turime du formatus: epub ir pdf. Jei su epub viskas aišku – žodžiai tikriausiai yra, tai su pdf ne viskas taip aišku: jį gali tiesiog sudaryti suklijuoti vaizdai.

Taigi mūsų žodžių skaičiavimo funkcija PDF formate atrodys taip: paimame puslapių skaičių ir padauginame iš tam tikros konstantos (vidutinio žodžių skaičiaus puslapyje).

Štai ji:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

Šis WORDS_PER_PAGE A4 formato puslapyje yra maždaug 300.

Dabar parašykime funkciją puslapiams skaičiuoti. Mes naudosime pyPDF2.

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

Tada parašysime puslapių skaičiavimą Epub. Mes naudojame epub_converter. Čia mes paimame knygą, konvertuojame ją į eilutes ir suskaičiuojame kiekvienos eilutės žodžius.

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)

Dabar paskaičiuokime laiką. Paimame mėgstamų žodžių skaičių ir padalijame iš skaitymo greičio.

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

4 dalis. Visų dalių sujungimas

Turime eiti per visus įmanomus mūsų knygų aplanko kelius. Patikrinkite, ar „Notion“ jau yra knyga: jei yra, mums nebereikia kurti eilutės.
Tada turime nustatyti failo tipą, priklausomai nuo to, suskaičiuoti žodžių skaičių. Pabaigoje pridėkite knygą.

Tai yra kodas, kurį gauname:

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)

O funkcija patikrinti, ar knyga buvo pridėta, atrodo taip:

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

išvada

Ačiū visiems, kurie skaitė šį straipsnį. Tikiuosi, kad tai padės jums skaityti daugiau :)

Šaltinis: www.habr.com

Добавить комментарий