Leabharlann bhaile a dhéanamh le Notion agus Python

Bhí suim agam i gcónaí sa chaoi is fearr chun leabhair a dháileadh i mo leabharlann leictreonach. Sa deireadh, tháinig mé ar an rogha seo le ríomh uathoibríoch ar líon na leathanach agus goodies eile. Iarraim ar gach duine leasmhara faoi cat.

Cuid 1. Dropbox

Tá mo leabhair go léir ar dropbox. Tá 4 chatagóir ann inar roinn mé gach rud: Téacsleabhar, Tagairt, Ficsean, Neamhfhicsean. Ach ní chuirim leabhair thagartha leis an tábla.

Is iad .epub an chuid is mó de na leabhair, is .pdf an chuid eile. Is é sin, caithfidh an réiteach deiridh an dá rogha a chlúdach ar bhealach éigin.

Is iad mo chosáin chuig leabhair rud éigin mar seo:

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

Más ficsean é an leabhar, scriostar an chatagóir (is é sin “Dearadh” sa chás thuas).

Chinn mé gan bac a chur leis an Dropbox API, ós rud é go bhfuil a bhfeidhmchlár agam a shioncrónaíonn an fillteán. Is é sin, is é seo an plean: tógann muid leabhair as an bhfillteán, rithimid gach leabhar trí chuntar focal, agus cuirimid le Notion é.

Cuid 2. Cuir líne leis

Ba chóir go bhfeicfeadh an tábla féin rud éigin mar seo. Aird: is fearr ainmneacha colúin a dhéanamh sa Laidin.

Leabharlann bhaile a dhéanamh le Notion agus Python

Bainfimid úsáid as an Notion API neamhoifigiúil, toisc nach bhfuil an ceann oifigiúil seachadta fós.

Leabharlann bhaile a dhéanamh le Notion agus Python

Téigh go Notion, brúigh Ctrl + Shift + J, téigh go dtí Iarratas -> Fianáin, cóipeáil token_v2 agus glaoigh air TOKEN. Ansin téann muid go dtí an leathanach a theastaíonn uainn le comhartha na leabharlainne agus cóipeáil an nasc. Tugaimid NOTION.

Ansin scríobhaimid an cód chun ceangal le Notion.

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

Ansin, scríobhaimis feidhm chun sraith a chur leis an tábla.

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

Cad atá ar siúl anseo. Glacann muid agus cuirimid sraith nua leis an tábla sa chéad ró. Ansin, scoiltimid ár gcosán feadh “/” agus faighimid clibeanna. Clibeanna - i dtéarmaí “Ealaín”, “Dearadh”, cé hé an t-údar, agus mar sin de. Ansin leagamar na réimsí riachtanacha go léir den phláta.

Cuid 3. Focail, uaireanta agus taitneamhachtaí eile a chomhaireamh

Is tasc níos deacra é seo. Mar is cuimhin linn, tá dhá fhormáid againn: epub agus pdf. Má tá gach rud soiléir leis an epub - is dócha go bhfuil na focail ann, ansin níl gach rud chomh soiléir faoin pdf: b'fhéidir nach mbeadh ann ach íomhánna greamaithe.

Mar sin beidh cuma mar seo ar an bhfeidhm atá againn maidir le focail a chomhaireamh i bhformáid PDF: tógaimid líon na leathanach agus déanaimid iolrú faoi tairiseach áirithe (meánlíon na bhfocal in aghaidh an leathanaigh).

Seo í:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

Tá thart ar 4 sa WORDS_PER_PAGE seo le haghaidh leathanach A300.

Anois scríobhaimis feidhm chun leathanaigh a chomhaireamh. Úsáidfimid pyPDF2.

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

Ansin, scríobhfaimid rud chun leathanaigh a chomhaireamh in Epub. úsáidimid Tiontaire_epub. Glacaimid an leabhar anseo, déanaimid línte a thiontú, agus comhairimid na focail do gach líne.

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)

Anois, déanaimis an t-am a ríomh. Glacaimid ár n-áireamh focal is fearr leat agus roinnimid é de réir do luas léitheoireachta.

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

Cuid 4. Na codanna go léir a nascadh

Ní mór dúinn dul trí gach cosán féideartha inár bhfillteán leabhar. Seiceáil an bhfuil leabhar in Notion cheana féin: má tá, ní gá dúinn líne a chruthú a thuilleadh.
Ansin ní mór dúinn an cineál comhaid a chinneadh, ag brath ar seo, líon na bhfocal a chomhaireamh. Cuir leabhar leis ag an deireadh.

Seo é an cód a fhaighimid:

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 is mar seo a fhéachann an fheidhm chun seiceáil ar cuireadh leabhar leis:

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

Conclúid

Buíochas le gach duine a léigh an t-alt seo. Tá súil agam go gcabhraíonn sé leat tuilleadh a léamh :)

Foinse: will.com

Add a comment