แƒกแƒแƒจแƒ˜แƒœแƒแƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ Notion แƒ“แƒ Python-แƒ˜แƒ—

แƒงแƒแƒ•แƒ”แƒšแƒ—แƒ•แƒ˜แƒก แƒ›แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ“แƒ, แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ•แƒแƒœแƒแƒฌแƒ˜แƒšแƒ แƒฌแƒ˜แƒ’แƒœแƒ”แƒ‘แƒ˜ แƒฉแƒ”แƒ›แƒก แƒ”แƒšแƒ”แƒฅแƒขแƒ แƒแƒœแƒฃแƒš แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒแƒจแƒ˜. แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“, แƒแƒ› แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒแƒ›แƒ“แƒ” แƒ›แƒ˜แƒ•แƒ”แƒ“แƒ˜ แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ˜แƒก แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒกแƒ˜แƒ™แƒ”แƒ—แƒ”แƒ”แƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒฃแƒ แƒ˜ แƒ’แƒแƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ”แƒ‘แƒ˜แƒ—. แƒ•แƒ”แƒ™แƒ˜แƒ—แƒฎแƒ”แƒ‘แƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒฃแƒš แƒžแƒ˜แƒ แƒก แƒ™แƒแƒขแƒ˜แƒก แƒฅแƒ•แƒ”แƒจ.

แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 1. Dropbox

แƒฉแƒ”แƒ›แƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒฌแƒ˜แƒ’แƒœแƒ˜ dropbox-แƒ–แƒ”แƒ. แƒแƒ แƒ˜แƒก 4 แƒ™แƒแƒขแƒ”แƒ’แƒแƒ แƒ˜แƒ, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒจแƒ˜แƒช แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ“แƒแƒ•แƒงแƒแƒ•แƒ˜: แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒ, แƒชแƒœแƒแƒ‘แƒแƒ แƒ˜, แƒ›แƒฎแƒแƒขแƒ•แƒ แƒฃแƒšแƒ˜ แƒšแƒ˜แƒขแƒ”แƒ แƒแƒขแƒฃแƒ แƒ, แƒแƒ แƒแƒ›แƒฎแƒแƒขแƒ•แƒ แƒฃแƒšแƒ˜ แƒšแƒ˜แƒขแƒ”แƒ แƒแƒขแƒฃแƒ แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ›แƒ” แƒแƒ  แƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘ แƒกแƒแƒชแƒœแƒแƒ‘แƒแƒ แƒ แƒฌแƒ˜แƒ’แƒœแƒ”แƒ‘แƒก แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜.

แƒฌแƒ˜แƒ’แƒœแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒ แƒแƒ แƒ˜แƒก .epub, แƒ“แƒแƒœแƒแƒ แƒฉแƒ”แƒœแƒ˜ .pdf. แƒแƒœแƒฃ แƒกแƒแƒ‘แƒแƒšแƒแƒ แƒ’แƒแƒ›แƒแƒกแƒแƒ•แƒแƒšแƒ˜ แƒ แƒแƒ’แƒแƒ แƒฆแƒแƒช แƒแƒ แƒ˜แƒ•แƒ” แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒก แƒฃแƒœแƒ“แƒ แƒคแƒแƒ แƒแƒ•แƒ“แƒ”แƒก.

แƒฌแƒ˜แƒ’แƒœแƒ”แƒ‘แƒ˜แƒกแƒ™แƒ”แƒœ แƒฉแƒ”แƒ›แƒ˜ แƒ’แƒ–แƒ”แƒ‘แƒ˜ แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒแƒกแƒ”แƒ—แƒ˜แƒ:

/ะšะฝะธะณะธ/ะะตั…ัƒะดะพะถะตัั‚ะฒะตะฝะฝะพะต/ะะพะฒะพะต/ะ”ะธะทะฐะนะฝ/ะฎั€ะธะน ะ“ะพั€ะดะพะฝ/ะšะฝะธะณะฐ ะฟั€ะพ ะฑัƒะบะฒั‹ ะพั‚ ะ ะดะพ ะฏ.epub 

แƒ—แƒฃ แƒฌแƒ˜แƒ’แƒœแƒ˜ แƒ›แƒฎแƒแƒขแƒ•แƒ แƒฃแƒšแƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ™แƒแƒขแƒ”แƒ’แƒแƒ แƒ˜แƒ (แƒแƒœแƒฃ แƒ–แƒ”แƒ›แƒแƒ— แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒš แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ โ€žแƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜โ€œ) แƒแƒ›แƒแƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ.

แƒ›แƒ” แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒแƒ  แƒจแƒ”แƒ›แƒ”แƒฌแƒฃแƒฎแƒ”แƒ‘แƒ˜แƒœแƒ Dropbox API, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒแƒฅแƒ•แƒก แƒ›แƒแƒ—แƒ˜ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒ˜แƒœแƒฅแƒ แƒแƒœแƒ˜แƒ–แƒ”แƒ‘แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒก. แƒแƒœแƒฃ แƒ’แƒ”แƒ’แƒ›แƒ แƒแƒกแƒ”แƒ—แƒ˜แƒ: แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒฌแƒ˜แƒ’แƒœแƒ”แƒ‘แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒ“แƒแƒœ, แƒ•แƒแƒขแƒแƒ แƒ”แƒ‘แƒ— แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒฌแƒ˜แƒ’แƒœแƒก แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ›แƒ แƒ˜แƒชแƒฎแƒ•แƒ”แƒšแƒจแƒ˜ แƒ“แƒ แƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— Notion-แƒจแƒ˜.

แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 2. แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒฎแƒแƒ–แƒ˜

แƒ—แƒแƒ•แƒแƒ“ แƒชแƒฎแƒ แƒ˜แƒšแƒ˜ แƒแƒกแƒ” แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒแƒ“แƒ”แƒก. แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ: แƒฃแƒ›แƒฏแƒแƒ‘แƒ”แƒกแƒ˜แƒ แƒกแƒ•แƒ”แƒขแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜ แƒšแƒแƒ—แƒ˜แƒœแƒฃแƒ แƒแƒ“ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒแƒ—.

แƒกแƒแƒจแƒ˜แƒœแƒแƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ Notion แƒ“แƒ Python-แƒ˜แƒ—

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒแƒ แƒแƒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ  Notion API-แƒก, แƒ แƒแƒ“แƒ’แƒแƒœ แƒแƒคแƒ˜แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒฏแƒ”แƒ  แƒแƒ  แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒฌแƒแƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜.

แƒกแƒแƒจแƒ˜แƒœแƒแƒ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ Notion แƒ“แƒ Python-แƒ˜แƒ—

แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒ— Notion-แƒ–แƒ”, แƒ“แƒแƒแƒญแƒ˜แƒ แƒ”แƒ— Ctrl + Shift + J, แƒ’แƒแƒ“แƒแƒ“แƒ˜แƒ— Application -> Cookies, แƒ“แƒแƒแƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ— token_v2 แƒ“แƒ แƒ“แƒแƒแƒ แƒฅแƒ•แƒ˜แƒ— TOKEN. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒœแƒ˜แƒจแƒœแƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒ“แƒ˜แƒ•แƒแƒ แƒ— แƒฉแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒ“แƒ แƒ•แƒแƒ™แƒแƒžแƒ˜แƒ แƒ”แƒ‘แƒ— แƒ‘แƒ›แƒฃแƒšแƒก. แƒฉแƒ•แƒ”แƒœ แƒ›แƒแƒก แƒชแƒœแƒ”แƒ‘แƒแƒก แƒ•แƒฃแƒฌแƒแƒ“แƒ”แƒ‘แƒ—.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒ•แƒ”แƒœ แƒ•แƒฌแƒ”แƒ แƒ— แƒ™แƒแƒ“แƒก Notion-แƒ—แƒแƒœ แƒ“แƒแƒกแƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒšแƒแƒ“.

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

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒแƒ— แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ, แƒ แƒแƒ› แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒแƒ— แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒจแƒ˜.

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

แฒ แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒแƒฅ. แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ“แƒ แƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— แƒแƒฎแƒแƒš แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒก แƒžแƒ˜แƒ แƒ•แƒ”แƒš แƒ แƒ˜แƒ’แƒจแƒ˜ แƒชแƒฎแƒ แƒ˜แƒšแƒก. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ•แƒงแƒแƒคแƒ— แƒฉแƒ•แƒ”แƒœแƒก แƒ’แƒ–แƒแƒก "/"-แƒ˜แƒก แƒ’แƒแƒกแƒฌแƒ•แƒ แƒ˜แƒ• แƒ“แƒ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒขแƒ”แƒ’แƒ”แƒ‘แƒก. แƒขแƒ”แƒ’แƒ”แƒ‘แƒ˜ - โ€žแƒฎแƒ”แƒšแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒกโ€œ, โ€žแƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ˜แƒกโ€œ แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—, แƒ•แƒ˜แƒœ แƒแƒ แƒ˜แƒก แƒแƒ•แƒขแƒแƒ แƒ˜ แƒ“แƒ แƒ.แƒจ. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ”แƒ— แƒคแƒ˜แƒ แƒคแƒ˜แƒขแƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ•แƒ”แƒšแƒ˜.

แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 3. แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜แƒก, แƒกแƒแƒแƒ—แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒกแƒฎแƒ•แƒ แƒกแƒ˜แƒแƒ›แƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ—แƒ•แƒšแƒ

แƒ”แƒก แƒฃแƒคแƒ แƒ แƒ แƒ—แƒฃแƒšแƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒแƒ. แƒ แƒแƒ’แƒแƒ แƒช แƒ’แƒ•แƒแƒฎแƒกแƒแƒ•แƒก, แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒแƒ แƒ˜ แƒคแƒแƒ แƒ›แƒแƒขแƒ˜: epub แƒ“แƒ pdf. แƒ—แƒฃ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒœแƒแƒ—แƒ”แƒšแƒ˜แƒ epub-แƒ—แƒแƒœ - แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜ แƒแƒšแƒ‘แƒแƒ— แƒ˜แƒฅ แƒแƒ แƒ˜แƒก, แƒ›แƒแƒจแƒ˜แƒœ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒแƒ แƒช แƒ˜แƒกแƒ” แƒœแƒแƒ—แƒ”แƒšแƒ˜แƒ pdf-แƒจแƒ˜: แƒ˜แƒก แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒจแƒ”แƒ“แƒ’แƒ”แƒ‘แƒแƒ“แƒ”แƒก แƒฌแƒ”แƒ‘แƒแƒ•แƒแƒœแƒ˜ แƒกแƒฃแƒ แƒแƒ—แƒ”แƒ‘แƒ˜แƒกแƒ’แƒแƒœ.

แƒแƒกแƒ” แƒ แƒแƒ›, PDF-แƒจแƒ˜ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ—แƒ•แƒšแƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ: แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก แƒ“แƒ แƒ•แƒแƒ›แƒ แƒแƒ•แƒšแƒ”แƒ‘แƒ— แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒš แƒ›แƒฃแƒ“แƒ›แƒ˜แƒ•แƒ–แƒ” (แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ”).

แฒ˜แƒก แƒแƒฅ แƒแƒ แƒ˜แƒก:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

แƒ”แƒก WORDS_PER_PAGE A4 แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒแƒ แƒ˜แƒก แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— 300.

แƒแƒฎแƒšแƒ แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒแƒ— แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒ—แƒ•แƒšแƒ”แƒšแƒแƒ“. แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— pyPDF2.

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

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ— แƒœแƒ˜แƒ•แƒ—แƒก Epub-แƒจแƒ˜ แƒ’แƒ•แƒ”แƒ แƒ“แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒกแƒแƒ—แƒ•แƒšแƒ”แƒšแƒแƒ“. แฒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— epub_converter. แƒแƒฅ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒฌแƒ˜แƒ’แƒœแƒก, แƒ•แƒแƒฅแƒชแƒ”แƒ•แƒ— แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒแƒ“ แƒ“แƒ แƒ•แƒ˜แƒ—แƒ•แƒšแƒ˜แƒ— แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒก แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

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)

แƒแƒฎแƒšแƒ แƒ’แƒแƒ›แƒแƒ•แƒ—แƒ•แƒแƒšแƒแƒ— แƒ“แƒ แƒ. แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒงแƒ•แƒแƒ แƒ”แƒšแƒ˜ แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก แƒ“แƒ แƒ•แƒงแƒแƒคแƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒกแƒ˜แƒฉแƒฅแƒแƒ แƒ”แƒ–แƒ”.

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

แƒœแƒแƒฌแƒ˜แƒšแƒ˜ 4. แƒงแƒ•แƒ”แƒšแƒ แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒ”แƒ แƒ—แƒ”แƒ‘แƒ

แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒ˜แƒแƒ แƒแƒ— แƒงแƒ•แƒ”แƒšแƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ แƒ’แƒ–แƒ แƒฉแƒ•แƒ”แƒœแƒก แƒฌแƒ˜แƒ’แƒœแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜. แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ—, แƒแƒ แƒ˜แƒก แƒ—แƒฃ แƒแƒ แƒ แƒฌแƒ˜แƒ’แƒœแƒ˜ Notion-แƒจแƒ˜: แƒ—แƒฃ แƒแƒ แƒ˜แƒก, แƒแƒฆแƒแƒ  แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒฎแƒแƒ–แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ.
แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒ•แƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ— แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜, แƒแƒฅแƒ”แƒ“แƒแƒœ แƒ’แƒแƒ›แƒแƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ”, แƒ“แƒแƒ•แƒ—แƒ•แƒแƒšแƒแƒ— แƒกแƒ˜แƒขแƒงแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒ. แƒ“แƒแƒกแƒแƒกแƒ แƒฃแƒšแƒก แƒ“แƒแƒแƒ›แƒแƒขแƒ”แƒ— แƒฌแƒ˜แƒ’แƒœแƒ˜.

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ™แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ—:

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)

แƒ“แƒ แƒฌแƒ˜แƒ’แƒœแƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ:

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

แƒ“แƒแƒกแƒ™แƒ•แƒœแƒ

แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒแƒก, แƒ•แƒ˜แƒœแƒช แƒฌแƒแƒ˜แƒ™แƒ˜แƒ—แƒฎแƒ แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ. แƒ˜แƒ›แƒ”แƒ“แƒ˜แƒ แƒ“แƒแƒ’แƒ”แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ แƒ›แƒ”แƒขแƒ˜แƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒแƒจแƒ˜ :)

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ