Kutengeneza maktaba ya nyumbani na Notion na Python

Nimekuwa nikipendezwa na jinsi bora ya kusambaza vitabu katika maktaba yangu ya kielektroniki. Mwishowe, nilikuja kwa chaguo hili na hesabu ya moja kwa moja ya idadi ya kurasa na vitu vingine vyema. Ninauliza watu wote wanaopenda chini ya paka.

Sehemu ya 1. Dropbox

Vitabu vyangu vyote viko kwenye dropbox. Kuna kategoria 4 ambazo niligawanya kila kitu: Kitabu cha maandishi, Marejeleo, Fiction, Non-fiction. Lakini siongezi vitabu vya kumbukumbu kwenye meza.

Vitabu vingi ni .epub, vingine ni .pdf. Hiyo ni, suluhisho la mwisho lazima lifiche chaguzi zote mbili.

Njia zangu za vitabu ni kama hii:

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

Ikiwa kitabu ni cha uwongo, basi kategoria (yaani, "Design" katika kesi iliyo hapo juu) imeondolewa.

Niliamua kutojisumbua na API ya Dropbox, kwani nina programu yao ambayo inasawazisha folda. Hiyo ni, mpango ni huu: tunachukua vitabu kutoka kwa folda, tunaendesha kila kitabu kupitia kihesabu cha maneno, na kuiongeza kwa Notion.

Sehemu ya 2. Ongeza mstari

Jedwali yenyewe inapaswa kuonekana kama hii. KUMBUKA: ni bora kutengeneza majina ya safu kwa Kilatini.

Kutengeneza maktaba ya nyumbani na Notion na Python

Tutatumia Notion API isiyo rasmi, kwa sababu ile rasmi bado haijawasilishwa.

Kutengeneza maktaba ya nyumbani na Notion na Python

Nenda kwa Notion, bonyeza Ctrl + Shift + J, nenda kwa Application -> Vidakuzi, nakili token_v2 na uiite TOKEN. Kisha tunakwenda kwenye ukurasa tunaohitaji na ishara ya maktaba na kunakili kiungo. Tunaita HAKI.

Kisha tunaandika msimbo wa kuunganisha kwa Notion.

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

Ifuatayo, hebu tuandike kitendakazi ili kuongeza safu kwenye jedwali.

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

Nini kinaendelea hapa. Tunachukua na kuongeza safu mpya kwenye meza kwenye safu ya kwanza. Ifuatayo, tunagawanya njia yetu pamoja na "/" na kupata vitambulisho. Vitambulisho - kwa suala la "Sanaa", "Design", ambaye ni mwandishi, na kadhalika. Kisha sisi kuweka mashamba yote muhimu ya sahani.

Sehemu ya 3. Kuhesabu maneno, masaa na furaha nyingine

Hii ni kazi ngumu zaidi. Kama tunavyokumbuka, tuna miundo miwili: epub na pdf. Ikiwa kila kitu kiko wazi na epub - maneno labda yapo, basi kila kitu sio wazi sana juu ya pdf: inaweza kuwa na picha zilizo na glasi.

Kwa hivyo kazi yetu ya kuhesabu maneno katika PDF itaonekana kama hii: tunachukua idadi ya kurasa na kuzidisha kwa mara kwa mara fulani (idadi ya wastani ya maneno kwa kila ukurasa).

Huyu hapa:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

WORDS_PER_PAGE hii ya ukurasa wa A4 ni takriban 300.

Sasa hebu tuandike kipengele cha kukokotoa kuhesabu kurasa. Tutatumia pyPDF2.

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

Kisha, tutaandika jambo la kuhesabu kurasa katika Epub. Tunatumia epub_kigeuzi. Hapa tunachukua kitabu, kukibadilisha kuwa mistari, na kuhesabu maneno kwa kila mstari.

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)

Sasa hebu tuhesabu wakati. Tunachukua hesabu yetu ya maneno tunayopenda na kuigawanya kwa kasi yako ya kusoma.

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

Sehemu ya 4. Kuunganisha sehemu zote

Tunahitaji kupitia njia zote zinazowezekana katika folda ya vitabu vyetu. Angalia kama tayari kuna kitabu katika Notion: kama kipo, hatuhitaji tena kuunda mstari.
Kisha tunahitaji kuamua aina ya faili, kulingana na hili, kuhesabu idadi ya maneno. Ongeza kitabu mwishoni.

Hii ndio nambari tunayopata:

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)

Na kazi ya kuangalia ikiwa kitabu kimeongezwa inaonekana kama hii:

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

Hitimisho

Asante kwa kila mtu aliyesoma nakala hii. Natumai itakusaidia kusoma zaidi :)

Chanzo: mapenzi.com

Kuongeza maoni