Manao tranomboky an-trano miaraka amin'ny Notion sy Python

Nahaliana ahy foana ny fomba tsara indrindra hizarana boky ao amin’ny tranomboky elektronika. Tamin'ny farany dia tonga tamin'ity safidy ity aho miaraka amin'ny kajy mandeha ho azy ny isan'ny pejy sy ny zava-tsoa hafa. Manontany ireo olona liana rehetra amin'ny saka aho.

Fizarana 1. Dropbox

Ao amin'ny dropbox ny bokiko rehetra. Misy sokajy 4 izay nozaraiko ny zava-drehetra: Boky fianarana, Reference, Fiction, Non-fiction. Fa tsy ampiako boky reference amin'ny latabatra.

Ny ankamaroan'ny boky dia .epub, ny ambiny dia .pdf. Izany hoe, ny vahaolana farany dia tsy maintsy manarona ny safidy roa.

Toy izao ny lalako mankany amin'ny boky:

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

Raha tantara foronina ilay boky, dia esorina ny sokajy (izany hoe, "Design" amin'ny tranga etsy ambony).

Nanapa-kevitra ny tsy hanahirana ny Dropbox API aho, satria manana ny fampiharana azy ireo aho izay mampifanaraka ny lahatahiry. Izany hoe, ny drafitra dia izao: maka boky avy amin'ny lahatahiry isika, mihazakazaka ny boky tsirairay amin'ny alàlan'ny kaontera teny, ary ampidiro ao amin'ny Notion.

Fizarana 2. Manampia tsipika

Ny latabatra mihitsy dia tokony ho toy izao. FANAMARIHANA: tsara kokoa ny manao anarana tsanganana amin'ny teny latina.

Manao tranomboky an-trano miaraka amin'ny Notion sy Python

Hampiasa ny Notion API tsy ofisialy izahay, satria tsy mbola naterina ilay ofisialy.

Manao tranomboky an-trano miaraka amin'ny Notion sy Python

Mandehana any amin'ny Notion, tsindrio Ctrl + Shift + J, mandehana amin'ny Application -> Cookies, kopia token_v2 ary antsoy hoe TOKEN. Avy eo dia mandeha any amin'ny pejy ilaintsika miaraka amin'ny mari-pamantarana tranomboky isika ary mandika ny rohy. Antsoinay hoe NOTION izany.

Avy eo dia manoratra ny kaody izahay mba hifandraisana amin'ny Notion.

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

Manaraka, andao hanoratra asa hanampiana andalana amin'ny latabatra.

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

Inona no mitranga eto. Maka sy manampy andalana vaovao amin'ny latabatra amin'ny laharana voalohany isika. Manaraka, mizara ny lalantsika amin'ny "/" isika ary mahazo marika. Tags - amin'ny resaka "Art", "Design", iza no mpanoratra, sy ny sisa. Avy eo dia mametraka ny saha ilaina rehetra amin'ny takelaka izahay.

Fizarana 3. Fanisana teny, ora ary fahafinaretana hafa

Asa sarotra kokoa izany. Raha tsiahivina dia manana endrika roa isika: epub sy pdf. Raha mazava tsara ny zava-drehetra amin'ny epub - azo antoka fa misy ny teny, dia tsy mazava tsara ny zava-drehetra amin'ny pdf: mety ahitana sary mipetaka fotsiny.

Ka ny asa ataontsika amin'ny fanisana teny amin'ny PDF dia ho toy izao: maka ny isan'ny pejy isika ary ampitomboina amin'ny tsy miova (ny salan'isa isan-pejy).

Inty izy:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

Ity WORDS_PER_PAGE ity ho an'ny pejy A4 dia manodidina ny 300.

Andeha isika hanoratra asa hanisa pejy. Hampiasaintsika pyPDF2.

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

Manaraka izany dia hanoratra zavatra momba ny fanisana pejy ao amin'ny Epub izahay. Ampiasainay epub_converter. Eto isika dia maka ny boky, manova azy ho andalana, ary manisa ny teny isaky ny andalana.

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)

Andeha isika hanao kajy ny fotoana. Raisinay ny isan'ny teny ankafizinay ary zaraina amin'ny hafainganan'ny famakianao.

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

Fizarana 4. Mampifandray ny ampahany rehetra

Mila mandeha amin'ny lalana rehetra azo atao ao amin'ny lahatahiry bokintsika isika. Jereo raha efa misy boky ao amin'ny Notion: raha misy dia tsy mila mamorona tsipika intsony isika.
Avy eo dia mila mamaritra ny karazana rakitra, miankina amin'izany, manisa ny isan'ny teny. Ampio boky amin'ny farany.

Ity ny code azonay:

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)

Ary toy izao ny fiasa hanamarinana raha nisy boky nampiana:

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

famaranana

Misaotra an'izay rehetra namaky ity lahatsoratra ity. Manantena aho fa hanampy anao hamaky bebe kokoa :)

Source: www.habr.com

Add a comment