Më ka interesuar gjithmonë se si të organizoj më mirë librat në biblioteken time elektronike. Në fund, arrita në një variant me numërimin automatik të faqeve dhe me disa funksionalitete të tjera. Të gjithë ata që janë të interesuar, ju lutem, kaloni më poshtë.
Pjesa 1. Dropbox
Të gjithë librat e mi ndodhen në Dropbox. Ka 4 kategori në të cilat i kam ndarë: Teksti, Referenca, Shkencor, Jo-shkencor. Megjithatë, nuk i shtoj referencat në tabelë.
Shumica e librave janë .epub, të tjerët janë .pdf. Pra, zgjidhja përfundimtare duhet të mbulojë ndonjë mënyrë të dy variantet.
Rrugët për në libra janë këto:
/Книги/Нехудожественное/Новое/Дизайн/Юрий Гордон/Книга про буквы от А до Я.epub Nëse libri është artistik, atëherë kategoria (dmth "Dizajni" në rastin e mësipërm) hiqet.
Kam vendosur të mos merrem me API-në e Dropbox-it, pasi kam aplikacionin e tyre, që sinkronizon dosjen. Pra, plani është ky: marrim librat nga dosja, çdo libër e kalojmë nëpër numëruesin e fjalëve, e shtojmë në Notion.
Pjesa 2. Shtimi i rreshtit
Tabelën duhet të duket për afërsisht si më poshtë. KËSHILLË: emrat e kolonave është më mirë t'i bëni në latinë.

Do të përdorim API-në jozyrtare të Notion-it, sepse zyrtarja ende nuk ka ardhur.

Shkoni te Notion, shtypni Ctrl + Shift + J, shkoni te Aplikacioni -> Cookies, kopjoni token_v2 dhe quajeni TOKEN. Pastaj shkon në faqen që na nevojitet me tabelën e bibliotekës dhe kopjoni lidhjen. Quajeni NOTION.
Më pas shkruajmë kodin për t'u lidhur me Notion-in.
database = client.get_collection_view(NOTION)
current_rows = database.default_query().execute()Më pas do të shkruajmë një funksion për të shtuar një rresht në tabelë.
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] == "Artistik":
row.author = tags[2]
elif tags[0] == "Joartistik":
row.tags = tags[2]
elif tags[0] == "Tekste Mësimorë":
row.tags = tags[2]
if len(tags) >= 4:
row.author = tags[3]
row.hours = hours
row.pages = pages_count
row.words = words_countÇfarë po ndodh këtu. Ne marrim dhe shtojmë një rresht të ri në tabelë në rreshtin e parë. Më pas ndajmë rrugën tonë në "/" dhe marrim etiketat. Etiketat janë në planin "Artistik", "Dizajn", kush është autori dhe kështu me radhë. Pastaj caktuam të gjithë fushat e nevojshme të tabelës.
Pjesa 3. Numërojmë fjalët, orët dhe bukuritë e tjera
Kjo është një detyrë më e komplikuar. Siç e kemi kujtuar, kemi dy formate: epub dhe pdf. Nëse për epub është e qartë — fjalët atje, ndoshta, shqip janë të pranishme, për pdf situata nuk është aq e qartë: ai mund të përbëhet thjesht nga imazhe të ngjitura.
Pra, funksioni për numërimin e fjalëve në pdf do të duket si më poshtë: marrim numrin e faqeve dhe e shumëzojmë me një konstantë të caktuar (numri mesatar i fjalëve për faqe).
Ja ajo:
def get_words_count(pages_number):
return pages_number * WORDS_PER_PAGEKy WORDS_PER_PAGE për një faqe A4 është rreth 300.
Tani le të shkruajmë një funksion për numërimin e faqeve. Do të përdorim .
def get_pdf_pages_number(path, filename):
pdf = PdfFileReader(open(os.path.join(path, filename), 'rb'))
return pdf.getNumPages()Pastaj do të shkruajmë një copë për numërimin e faqeve në epub. Do të përdorim . Këtu ne marrim librin, e konvertojmë në rreshta dhe për çdo rresht numërojmë fjalët.
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)Tani do të bëjmë numërimin e kohës. Marrim numrin tonë të preferuar të fjalëve dhe e ndajmë me shpejtësinë tuaj të leximit.
def get_reading_time(words_count):
return round(((words_count / WORDS_PER_MINUTE) / 60) * 10) / 10Pjesa 4. Bashkoni të gjitha pjesët
Na nevojitet të kalojmë të gjitha rrugët e mundshme në dosjen tonë të librave. Të kontrollojmë nëse libri tashmë është në Notion: nëse po, nuk na nevojitet të krijojmë më rrugën.
Më pas duhet të përcaktojmë llojin e skedarit, në varësi të kësaj, ta numërojmë numrin e fjalëve. Në fund të shtojmë librin.
Këtu është kodi ynë:
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)Dhe funksioni për të kontrolluar nëse libri është shtuar duket kështu:
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 FalsePërfundimi
Faleminderit të gjithëve që e lexuat këtë artikull. Shpresoj se do t'ju ndihmojë të lexoni më shumë 🙂
Burimi: habr.com
