A’ dèanamh leabharlann dachaigh le Notion agus Python

Bha ùidh agam a-riamh anns an dòigh as fheàrr air leabhraichean a sgaoileadh anns an leabharlann dealanach agam. Aig a 'cheann thall, thàinig mi chun an roghainn seo le àireamhachadh fèin-ghluasadach air an àireamh de dhuilleagan agus rudan math eile. Bidh mi a’ faighneachd do gach neach le ùidh fo chat.

Pàirt 1. Dropbox

Tha na leabhraichean agam uile air dropbox. Tha 4 roinnean anns an do roinn mi a h-uile càil: Leabhar-teacsa, Iomradh, Ficsean, Neo-fhicsean. Ach cha bhith mi a’ cur leabhraichean fiosrachaidh ris a’ bhòrd.

'S e .epub a th' anns a' mhòr-chuid dhe na leabhraichean, 's e .pdf a th' anns a' chuid eile. Is e sin, feumaidh am fuasgladh mu dheireadh an dà roghainn a chòmhdach.

Tha na slighean agam gu leabhraichean rudeigin mar seo:

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

Ma tha an leabhar ficsean, an roinn-seòrsa (is e sin, "Dealbhadh" anns a 'chùis gu h-àrd) a thoirt air falbh.

Cho-dhùin mi gun a bhith a’ draghadh leis an Dropbox API, leis gu bheil an tagradh aca a bhios a’ sioncronadh am pasgan. Is e sin, is e seo am plana: bidh sinn a’ toirt leabhraichean bhon phasgan, a’ ruith gach leabhar tro chunntair fhaclan, agus ga chur ri Notion.

Pàirt 2. Cuir loidhne

Bu chòir gum biodh am bòrd fhèin a’ coimhead rudeigin mar seo. ATTENTION: tha e nas fheàrr ainmean colbhan a dhèanamh ann an Laideann.

A’ dèanamh leabharlann dachaigh le Notion agus Python

Cleachdaidh sinn an Notion API neo-oifigeil, oir cha deach am fear oifigeil a lìbhrigeadh fhathast.

A’ dèanamh leabharlann dachaigh le Notion agus Python

Rach gu Notion, brùth Ctrl + Shift + J, rachaibh gu Iarrtas -> Briosgaidean, dèan lethbhreac token_v2 agus cuir fòn thuige TOKEN. An uairsin thèid sinn chun duilleag a tha a dhìth oirnn le soidhne an leabharlainn agus dèan lethbhreac den cheangal. Is e NOTION a chanas sinn ris.

An uairsin bidh sinn a 'sgrìobhadh a' chòd airson ceangal ri Notion.

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

An ath rud, sgrìobhamaid gnìomh gus sreath a chur ris a’ chlàr.

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

Dè tha dol an seo. Gabhaidh sinn agus cuiridh sinn sreath ùr ris a 'bhòrd anns a' chiad sreath. An uairsin, roinn sinn ar slighe air adhart “/” agus gheibh sinn tagaichean. Tags - a thaobh “Ealain”, “Dealbhadh”, cò an t-ùghdar, agus mar sin air adhart. An uairsin shuidhich sinn na raointean riatanach uile den phlàta.

Pàirt 3. A' cunntadh fhaclan, uairean agus toileachasan eile

Is e obair nas duilghe a tha seo. Mar a tha cuimhne againn, tha dà chruth againn: epub agus pdf. Ma tha a h-uile dad soilleir leis an epub - is dòcha gu bheil na faclan ann, chan eil a h-uile dad cho soilleir mun pdf: is dòcha gu bheil e dìreach air a dhèanamh suas de dhealbhan glaiste.

Mar sin seallaidh an gnìomh againn airson faclan a chunntadh ann an PDF mar seo: bidh sinn a’ gabhail an àireamh de dhuilleagan agus ag iomadachadh le seasmhach sònraichte (an àireamh chuibheasach de dh’fhaclan air gach duilleag).

Seo i:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

Tha timcheall air 4 aig WORDS_PER_PAGE airson duilleag A300.

A-nis sgrìobhamaid gnìomh airson duilleagan a chunntadh. Cleachdaidh sinn pyPDF2.

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

An ath rud, sgrìobhaidh sinn rud airson duilleagan a chunntadh ann an Epub. Bidh sinn a 'cleachdadh epub_ converter. An seo bheir sinn an leabhar, tionndaidh e gu loidhnichean, agus cunnt sinn na faclan airson gach loidhne.

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)

A-nis leig dhuinn an ùine obrachadh a-mach. Gabhaidh sinn an àireamh fhaclan as fheàrr leinn agus bidh sinn ga roinn leis an astar leughaidh agad.

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

Pàirt 4. A 'ceangal a h-uile pàirt

Feumaidh sinn a dhol tro gach slighe a tha comasach anns a’ phasgan leabhraichean againn. Dèan cinnteach a bheil leabhar ann am Notion mu thràth: ma tha, chan fheum sinn loidhne a chruthachadh tuilleadh.
An uairsin feumaidh sinn an seòrsa faidhle a dhearbhadh, a rèir seo, cunnt an àireamh fhaclan. Cuir leabhar ris aig an deireadh.

Seo an còd a gheibh sinn:

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)

Agus tha an gnìomh gus faighinn a-mach an deach leabhar a chur ris a’ coimhead mar seo:

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

co-dhùnadh

Mòran taing dhan a h-uile duine a leugh an artaigil seo. Tha mi an dòchas gun cuidich e thu le bhith a’ leughadh barrachd :)

Source: www.habr.com

Cuir beachd ann