Mani vienmēr interesējis, kā vislabāk izplatīt grāmatas savā elektroniskajā bibliotēkā. Beigās nonācu pie šīs iespējas ar automātisku lappušu skaita un citu labumu aprēķinu. Jautāju visiem interesentiem zem kat.
1. daļa. Dropbox
Visas manas grāmatas atrodas dropbox. Ir 4 kategorijas, kurās es visu sadalīju: Mācību grāmata, Uzziņas, Daiļliteratūra, Non-fiction. Bet es nepievienoju tabulai atsauces grāmatas.
Lielākā daļa grāmatu ir .epub formātā, pārējās ir .pdf formātā. Tas ir, gala risinājumam kaut kādā veidā jāaptver abas iespējas.
Mani ceļi uz grāmatām ir apmēram šādi:
/Книги/Нехудожественное/Новое/Дизайн/Юрий Гордон/Книга про буквы от А до Я.epub
Ja grāmata ir daiļliteratūra, kategorija (tas ir, iepriekš minētajā gadījumā “Dizains”) tiek noņemta.
Es nolēmu neuztraukties ar Dropbox API, jo man ir viņu lietojumprogramma, kas sinhronizē mapi. Tas ir, plāns ir šāds: mēs paņemam grāmatas no mapes, izlaižam katru grāmatu caur vārdu skaitītāju un pievienojam to Notion.
2. daļa. Pievienojiet rindiņu
Pašai tabulai vajadzētu izskatīties apmēram šādi. UZMANĪBU: kolonnu nosaukumus labāk veidot latīņu valodā.
Mēs izmantosim neoficiālo Notion API, jo oficiālā vēl nav piegādāta.
Dodieties uz Notion, nospiediet Ctrl + Shift + J, dodieties uz Lietojumprogramma -> Sīkfaili, kopējiet token_v2 un nosauciet to TOKEN. Tad dodamies uz mums vajadzīgo lapu ar bibliotēkas zīmi un nokopējam saiti. Mēs to saucam par jēdzienu.
Pēc tam mēs rakstām kodu, lai izveidotu savienojumu ar Notion.
database = client.get_collection_view(NOTION)
current_rows = database.default_query().execute()
Tālāk uzrakstīsim funkciju, lai tabulai pievienotu rindu.
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
Kas šeit notiek. Mēs ņemam un pievienojam jaunu rindu tabulai pirmajā rindā. Tālāk mēs sadalām ceļu pa “/” un iegūstam atzīmes. Atzīmes - “Māksla”, “Dizains”, kas ir autors un tā tālāk. Pēc tam iestatām visus nepieciešamos plāksnes laukus.
3. daļa. Vārdu, stundu un citu prieku skaitīšana
Tas ir grūtāks uzdevums. Kā mēs atceramies, mums ir divi formāti: epub un pdf. Ja ar epub viss ir skaidrs - iespējams, ka tur ir vārdi, tad pdf failā viss nav tik skaidrs: tas var vienkārši sastāvēt no salīmētiem attēliem.
Tātad mūsu funkcija vārdu skaitīšanai PDF formātā izskatīsies šādi: mēs ņemam lappušu skaitu un reizinām ar noteiktu konstanti (vidējais vārdu skaits lapā).
Šeit viņa ir:
def get_words_count(pages_number):
return pages_number * WORDS_PER_PAGE
Šis WORDS_PER_PAGE A4 lapai ir aptuveni 300.
Tagad uzrakstīsim funkciju lapu skaitīšanai. Mēs izmantosim
def get_pdf_pages_number(path, filename):
pdf = PdfFileReader(open(os.path.join(path, filename), 'rb'))
return pdf.getNumPages()
Tālāk mēs uzrakstīsim lapu skaitīšanai Epub. Mēs izmantojam
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. Mēs ņemam savu iecienītāko vārdu skaitu un sadalām to ar jūsu lasīšanas ātrumu.
def get_reading_time(words_count):
return round(((words_count / WORDS_PER_MINUTE) / 60) * 10) / 10
4. daļa. Visu detaļu savienošana
Mums ir jāiet cauri visi iespējamie ceļi mūsu grāmatu mapē. Pārbaudiet, vai programmā Notion jau ir grāmata: ja tāda ir, mums vairs nav jāveido rindiņa.
Pēc tam mums ir jānosaka faila tips, atkarībā no tā, saskaitiet vārdu skaitu. Beigās pievienojiet grāmatu.
Šis ir kods, ko mēs saņemam:
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)
Un 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 False
Secinājums
Paldies visiem, kas lasīja šo rakstu. Es ceru, ka tas palīdzēs jums lasīt vairāk :)
Avots: www.habr.com