Man vienmÄr bija interesanti, kÄ labÄk izvietot grÄmatas manÄ elektroniskajÄ bibliotÄkÄ. BeigÄs es nonÄcu pie tÄda risinÄjuma ar automÄtisku lapu skaita skaitīŔanu un citiem labumiem. Visus interesentus aicinu zemÄk.
1. daļa. Dropbox
Visas grÄmatas man ir Dropbox. Ir Äetras kategorijas, uz kurÄm es visu sadalÄ«ju: MÄcÄ«bu grÄmata, RokasgrÄmata, literÄra, nenovizuot. TaÄu rokasgrÄmatas es tabulÄ neiekļauju.
LielÄkÄ daļa grÄmatu ir .epub, pÄrÄjÄs ā .pdf. TÄpÄc gala risinÄjumam jÄsedz abi varianti.
GrÄmatu ceļi izskatÄs aptuveni Å”Ädi:
/ŠŠ½ŠøŠ³Šø/ŠŠµŃ
ŃŠ“ожеŃŃŠ²ŠµŠ½Š½Š¾Šµ/ŠŠ¾Š²Š¾Šµ/ŠŠøŠ·Š°Š¹Š½/Š®ŃŠøŠ¹ ŠŠ¾ŃГон/ŠŠ½ŠøŠ³Š° ŠæŃŠ¾ Š±ŃŠŗŠ²Ń Š¾Ń Š Š“Š¾ ŠÆ.epub Ja grÄmata ir literÄra, tad kategorija (t.i., "Dizains", ja runÄjam par iepriekÅ” minÄto) tiek izÅemta.
Es nolÄmu nenodarboties ar Dropbox API, jo man ir viÅu aplikÄcija, kas sinhronizÄ mapi. TÄtad plÄns ir Å”Äds: Åemam grÄmatas no mapes, katru grÄmatu palaidÄ«sim cauri vÄrdu skaitÄ«tÄjam, pievienojam Notion.
2. daļa. Pievienojam rindu
PaÅ”ai tabulai jÄizskatÄs aptuveni Å”Ädi. UZMANÄŖBU: kolonu nosaukumus labÄk veidot latÄ«Åu burtiem.

MÄs izmantosim neoficiÄlo Notion API, jo oficiÄlais vÄl nav pieejams.

IepriekÅ” dodamies uz Notion, nospiežam Ctrl + Shift + J, ejam uz Application -> Cookies, kopÄjam token_v2 un nosaucam to par TOKEN. PÄc tam dodamies uz nepiecieÅ”amo lapu ar bibliotÄkas tabulu un kopÄjam saiti. Nosaucam NATION.
PÄc tam rakstÄm kodu savienojumam ar Notion.
database = client.get_collection_view(NOTION)
current_rows = database.default_query().execute()PÄc tam uzrakstÄ«sim funkciju rindu pievienoÅ”anai tabulÄ.
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] == "LiterÄra":
row.author = tags[2]
elif tags[0] == "Nenovizuot":
row.tags = tags[2]
elif tags[0] == "MÄcÄ«bu grÄmatas":
row.tags = tags[2]
if len(tags) >= 4:
row.author = tags[3]
row.hours = hours
row.pages = pages_count
row.words = words_countKas Å”eit notiek. MÄs Åemam un pievienojam jaunu rindu tabulas pirmajÄ rindÄ. PÄc tam sadalÄm mÅ«su ceļu pa ā/ā un iegÅ«stam tagus. Tagus ā tÄdÄ izpratnÄ kÄ āLiterÄraā, āDizainsā, kurÅ” ir autors un tÄ tÄlÄk. PÄc tam norÄdÄm visus nepiecieÅ”amos tabulas laukus.
3. daļa. SkaitÄm vÄrdus, stundas un citus labumus
Tas jau ir sarežģītÄks uzdevums. KÄ mÄs atceramies, mums ir divi formÄti: ePub un PDF. Ja par ePub viss ir skaidrs ā tajÄ, visticamÄk, tieÅ”Äm ir vÄrdi, tad attiecÄ«bÄ uz PDF viss nav tik vienkÄrÅ”i: tas var sastÄvÄt tikai no saliktÄm bildÄm.
TÄpÄc PDF vÄrdu skaita funkcija izskatÄ«sies Å”Ädi: mÄs Åemam lapu skaitu un reizinÄm to ar noteiktu konstanti (vidÄjais vÄrdu skaits lapÄ).
Å eit tÄ ir:
def get_words_count(pages_number):
return pages_number * WORDS_PER_PAGETas pats WORDS_PER_PAGE A4 lapai ir apmÄram 300.
Tagad uzrakstīsim funkciju lapu skaita noteikŔanai. Izmantosim .
def get_pdf_pages_number(path, filename):
pdf = PdfFileReader(open(os.path.join(path, filename), 'rb'))
return pdf.getNumPages()TÄlÄk uzrakstÄ«sim lietu, lai saskaitÄ«tu lapas ePub formÄtÄ. Izmantosim . Å eit mÄs Åemam grÄmatu, pÄrvÄrÅ”am to rindÄs, un katrai rindai saskaitÄm vÄrdus.
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)Tagad aprÄÄ·inÄsim laiku. Å emam mÅ«su iecienÄ«to vÄrdu skaitu un dalÄm to ar jÅ«su lasīŔanas Ätrumu.
def get_reading_time(words_count):
return round(((words_count / WORDS_PER_MINUTE) / 60) * 10) / 104. daļa. Apvienojam visas daļas
Mums jÄapiet visi iespÄjamie ceļi mÅ«su grÄmatu mapÄ. JÄpÄrbauda, vai grÄmata jau ir Notion: ja ir ā rindu jau neizveidosim.
PÄc tam mums jÄnosaka faila tips, atkarÄ«bÄ no tÄ jÄsaskaita vÄrdu skaits. BeigÄs jÄpievieno grÄmata.
Å Äds kods mums sanÄk:
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)SavukÄrt funkcija, lai pÄrbaudÄ«tu, vai grÄmata ir pievienota, izskatÄs Å”Ädi:
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 FalseSecinÄjums
Paldies visiem, kas izlasÄ«ja Å”o rakstu. Ceru, ka tas palÄ«dzÄs jums lasÄ«t vairÄk š
Avots: habr.com
