Gwneud llyfrgell gartref gyda Notion a Python

Mae gen i ddiddordeb erioed yn y ffordd orau o ddosbarthu llyfrau yn fy llyfrgell electronig. Yn y diwedd, deuthum at yr opsiwn hwn gyda chyfrifiad awtomatig o nifer y tudalennau a nwyddau eraill. Gofynnaf i bawb sydd â diddordeb o dan gath.

Rhan 1. Dropbox

Mae fy holl lyfrau ar dropbox. Mae 4 categori y gwnes i rannu popeth iddynt: Gwerslyfr, Cyfeirnod, Ffuglen, Ffeithiol. Ond nid wyf yn ychwanegu cyfeirlyfrau at y tabl.

Mae'r rhan fwyaf o'r llyfrau yn .epub, a'r gweddill yn .pdf. Hynny yw, rhaid i'r ateb terfynol gwmpasu'r ddau opsiwn rywsut.

Mae fy llwybrau i lyfrau yn rhywbeth fel hyn:

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

Os mai ffuglen yw'r llyfr, yna caiff y categori (hynny yw, "Dylunio" yn yr achos uchod) ei ddileu.

Penderfynais beidio â thrafferthu gyda'r Dropbox API, gan fod gen i eu cymhwysiad sy'n cydamseru'r ffolder. Hynny yw, dyma'r cynllun: rydyn ni'n cymryd llyfrau o'r ffolder, yn rhedeg pob llyfr trwy rifydd geiriau, ac yn ei ychwanegu at Notion.

Rhan 2. Ychwanegu llinell

Dylai'r bwrdd ei hun edrych rhywbeth fel hyn. SYLW: mae'n well gwneud enwau colofnau yn Lladin.

Gwneud llyfrgell gartref gyda Notion a Python

Byddwn yn defnyddio'r API Notion answyddogol, oherwydd nid yw'r un swyddogol wedi'i gyflwyno eto.

Gwneud llyfrgell gartref gyda Notion a Python

Ewch i Notion, pwyswch Ctrl + Shift + J, ewch i Cais -> Cwcis, copïwch token_v2 a'i alw'n TOKEN. Yna awn i'r dudalen sydd ei hangen arnom gydag arwydd y llyfrgell a chopïo'r ddolen. Rydyn ni'n ei alw'n SYLWEDD.

Yna rydyn ni'n ysgrifennu'r cod i gysylltu â Notion.

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

Nesaf, gadewch i ni ysgrifennu swyddogaeth i ychwanegu rhes at y tabl.

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

Beth sy'n digwydd yma. Rydyn ni'n cymryd ac yn ychwanegu rhes newydd at y tabl yn y rhes gyntaf. Nesaf, rydyn ni'n rhannu ein llwybr ar hyd “/” ac yn cael tagiau. Tagiau – o ran “Celf”, “Dylunio”, pwy yw’r awdur, ac ati. Yna rydym yn gosod holl feysydd angenrheidiol y plât.

Rhan 3. Cyfrif geiriau, oriau a hyfrydwch ereill

Mae hon yn dasg anoddach. Fel y cofiwn, mae gennym ddau fformat: epub a pdf. Os yw popeth yn glir gyda'r epub - mae'n debyg bod y geiriau yno yn sicr, yna gyda'r pdf nid yw popeth mor glir: gall gynnwys delweddau wedi'u gludo yn syml.

Felly bydd ein swyddogaeth ar gyfer cyfrif geiriau mewn PDF yn edrych fel hyn: rydym yn cymryd nifer y tudalennau ac yn lluosi â chysonyn penodol (y nifer cyfartalog o eiriau fesul tudalen).

Dyma hi:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

Mae'r WORDS_PER_PAGE hwn ar gyfer tudalen A4 tua 300.

Nawr, gadewch i ni ysgrifennu swyddogaeth i gyfrif tudalennau. Byddwn yn defnyddio pyPDF2.

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

Nesaf, byddwn yn ysgrifennu peth ar gyfer cyfrif tudalennau yn Epub. Rydym yn defnyddio epub_ trawsnewidydd. Yma rydyn ni'n cymryd y llyfr, yn ei drawsnewid yn llinellau, ac yn cyfrif y geiriau ar gyfer pob llinell.

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)

Nawr, gadewch i ni gyfrifo'r amser. Rydyn ni'n cymryd ein hoff gyfrif geiriau ac yn ei rannu â'ch cyflymder darllen.

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

Rhan 4. Cysylltu'r holl rannau

Mae angen i ni fynd trwy bob llwybr posib yn ein ffolder llyfrau. Gwiriwch a oes llyfr eisoes yn Notion: os oes, nid oes angen i ni greu llinell mwyach.
Yna mae angen i ni benderfynu ar y math o ffeil, yn dibynnu ar hyn, cyfrif nifer y geiriau. Ychwanegwch lyfr ar y diwedd.

Dyma'r cod a gawn:

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)

Ac mae'r swyddogaeth i wirio a yw llyfr wedi'i ychwanegu yn edrych fel hyn:

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

Casgliad

Diolch i bawb a ddarllenodd yr erthygl hon. Rwy'n gobeithio y bydd yn eich helpu i ddarllen mwy :)

Ffynhonnell: hab.com

Ychwanegu sylw