Að búa til heimilisbókasafn með Notion og Python

Ég hef alltaf haft áhuga á því hvernig best sé að dreifa bókum á rafrænu bókasafninu mínu. Að lokum komst ég að þessum möguleika með sjálfvirkum útreikningi á blaðsíðufjölda og öðru góðgæti. Ég spyr alla áhugasama undir kött.

Part 1. Dropbox

Allar bækurnar mínar eru á dropbox. Það eru 4 flokkar sem ég skipti öllu í: Kennslubók, tilvísun, skáldskap, fræðirit. En ég bæti ekki uppflettiritum við borðið.

Flestar bækurnar eru .epub, hinar eru .pdf. Það er, endanleg lausn verður einhvern veginn að ná yfir báða valkostina.

Leiðir mínar að bókum eru eitthvað á þessa leið:

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

Ef bókin er skáldskapur, þá er flokkurinn (þ.e. „Hönnun“ í tilvikinu hér að ofan) fjarlægður.

Ég ákvað að skipta mér ekki af Dropbox API, þar sem ég er með forritið þeirra sem samstillir möppuna. Það er að segja, áætlunin er þessi: við tökum bækur úr möppunni, keyrum hverja bók í gegnum orðateljara og bætum henni við Notion.

Part 2. Bættu við línu

Taflan sjálf ætti að líta einhvern veginn svona út. ATHUGIÐ: það er betra að búa til dálkanöfn á latínu.

Að búa til heimilisbókasafn með Notion og Python

Við munum nota óopinbera Notion API, vegna þess að hið opinbera hefur ekki enn verið afhent.

Að búa til heimilisbókasafn með Notion og Python

Farðu í Notion, ýttu á Ctrl + Shift + J, farðu í Forrit -> Cookies, afritaðu token_v2 og kallaðu það TOKEN. Síðan förum við á síðuna sem við þurfum með bókasafnsskiltinu og afritum hlekkinn. Við köllum það NOTION.

Síðan skrifum við kóðann til að tengjast Notion.

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

Næst skulum við skrifa fall til að bæta línu við töfluna.

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

Hvað er í gangi hér. Við tökum og bætum við nýrri röð í töfluna í fyrstu röðinni. Næst skiptum við leið okkar eftir „/“ og fáum merki. Merki - hvað varðar „list“, „hönnun“, hver er höfundurinn og svo framvegis. Síðan setjum við öll nauðsynleg svæði á plötunni.

3. hluti. Að telja orð, stundir og annað ánægjuefni

Þetta er erfiðara verkefni. Eins og við munum höfum við tvö snið: epub og pdf. Ef allt er skýrt með epub - orðin eru líklega til staðar, þá er allt ekki svo skýrt um pdf: það gæti einfaldlega samanstandið af límdum myndum.

Þannig að aðgerð okkar til að telja orð í PDF mun líta svona út: við tökum fjölda síðna og margföldum með ákveðnum fasta (meðalfjöldi orða á síðu).

Hér er hún:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

Þessi WORDS_PER_PAGE fyrir A4 síðu er um það bil 300.

Nú skulum við skrifa fall til að telja síður. Við munum nota pyPDF2.

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

Næst munum við skrifa eitthvað um að telja síður í Epub. Við notum epub_konverter. Hér tökum við bókina, umbreytum henni í línur og teljum orðin fyrir hverja línu.

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)

Nú skulum við reikna tímann. Við tökum uppáhalds orðafjöldann okkar og deilum henni með lestrarhraðanum þínum.

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

Hluti 4. Að tengja alla hlutana

Við þurfum að fara í gegnum allar mögulegar leiðir í bókamöppunni okkar. Athugaðu hvort það sé nú þegar bók í Notion: ef svo er þurfum við ekki lengur að búa til línu.
Þá þurfum við að ákvarða skráargerðina, allt eftir þessu, telja fjölda orða. Bættu við bók í lokin.

Þetta er kóðinn sem við fáum:

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)

Og aðgerðin til að athuga hvort bók hafi verið bætt við lítur svona út:

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

Ályktun

Takk allir sem lásu þessa grein. Ég vona að það hjálpi þér að lesa meira :)

Heimild: www.habr.com

Bæta við athugasemd