Çêkirina pirtûkxaneyek malê bi Notion û Python

Ez her gav bala xwe didim ka meriv çawa pirtûkan di pirtûkxaneya xweya elektronîkî de çêtirîn belav dike. Di dawiyê de, ez bi hesabkirina otomatîkî ya hejmara rûpelan û tiştên din re hatim vê vebijarkê. Ez ji hemû kesên eleqedar di bin pisîkê de dipirsim.

Beş 1. Dropbox

Hemû pirtûkên min li ser dropboxê ne. 4 kategorî hene ku min her tişt di nav wan de dabeş kir: Pirtûka dersê, Çavkanî, Çêrokî, Ne-nivîskî. Lê ez pirtûkên referansê li tabloyê zêde nakim.

Piraniya kitêban .epub, yên mayî .pdf ne. Ango divê çareseriya dawî bi awayekî her du vebijarkan veşêre.

Rêyên min ên pirtûkan tiştek wiha ne:

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

Ger pirtûk çîrok be, wê hingê kategoriya (ango, di doza li jor de "Sêwiran") tê rakirin.

Min biryar da ku ez bi Dropbox API-ê re aciz nekim, ji ber ku serîlêdana wan heye ku peldankê hevdeng dike. Ango, plan ev e: em pirtûkan ji peldankê derdixin, her pirtûkê di nav jimarvanek peyvan re dimeşînin, û lê zêde dikin Notion.

Beş 2. Xetek lê zêde bike

Tablo bixwe divê tiştek mîna vê xuya bike. HIŞYARÎ: çêtir e ku navên stûnan bi latînî bêne çêkirin.

Çêkirina pirtûkxaneyek malê bi Notion û Python

Em ê Notion API-ya nefermî bikar bînin, ji ber ku ya fermî hîn nehatiye radest kirin.

Çêkirina pirtûkxaneyek malê bi Notion û Python

Herin Notion, Ctrl + Shift + J bikirtînin, biçin Serlêdan -> Cookies, token_v2 kopî bikin û jê re dibêjin TOKEN. Dûv re em bi nîşana pirtûkxaneyê diçin rûpela ku em hewce ne û girêdanê kopî dikin. Em jê re dibêjin NOTION.

Dûv re em kodê dinivîsin ku bi Nîşanê ve girêbide.

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

Dûv re, em fonksiyonek binivîsin ku rêzek li tabloyê zêde bike.

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

Li vir çi diqewime. Em di rêza yekem de rêzek nû li tabloyê digirin û lê zêde dikin. Dûv re, em riya xwe li ser "/" dabeş dikin û nîşanan digirin. Etîket - di warê "Huner", "Design", nivîskar kî ye, û hwd. Dûv re em hemî zeviyên pêdivî yên plakaya danîn.

Beş 3. Jimartina peyvan, demjimêr û dilxweşiyên din

Ev karekî dijwartir e. Wekî ku tê bîra me, du formatên me hene: epub û pdf. Ger her tişt bi epub-ê re zelal e - peyv belkî li wir in, wê hingê her tişt di derbarê pdf-ê de ne ew qas zelal e: dibe ku ew bi tenê ji wêneyên zeliqandî pêk were.

Ji ber vê yekê fonksiyona me ya ji bo jimartina peyvan di PDF-ê de dê wusa xuya bike: em hejmara rûpelan digirin û bi domdarek diyarkirî (hejmara navînî ya peyvan li ser rûpelê) zêde dikin.

Li vir ev e:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

Ev WORDS_PER_PAGE ji bo rûpelek A4 bi qasî 300 e.

Naha em fonksiyonek binivîsin ku rûpelan bijmêre. Em ê bikar bînin pyPDF2.

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

Dûv re, em ê ji bo jimartina rûpelan di Epub de tiştek binivîsin. Em bikar tînin epub_converter. Li vir em pirtûkê digirin, vediguherînin rêzikan û ji bo her rêzek peyvan dijmêrin.

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)

Niha em wextê hesab bikin. Em jimara peyva xweya bijare digirin û wê li gorî leza xwendina we dabeş dikin.

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

Beş 4. Girêdana hemû beşan

Pêdivî ye ku em di peldanka pirtûkên xwe de hemî rêyên gengaz derbas bibin. Kontrol bikin ka jixwe pirtûkek di Têgînê de heye: heke hebe, êdî hewce ne ku em rêzek çêbikin.
Dûv re divê em celebê pelê diyar bikin, li gorî vê yekê, hejmara peyvan bijmêre. Di dawiyê de pirtûkek zêde bikin.

Ev koda ku em distînin ev e:

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)

Û fonksiyona ku kontrol bike ka pirtûkek hatiye zêdekirin wiha xuya dike:

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

encamê

Spas ji bo her kesê ku vê gotarê xwend. Ez hêvî dikim ku ew ji we re dibe alîkar ku hûn bêtir bixwînin :)

Source: www.habr.com

Add a comment