Kanunay kong interesado kon unsaon pag-apod-apod ug mga libro sa akong elektronikong librarya. Sa katapusan, nakaabut ako sa kini nga kapilian nga adunay awtomatikong pagkalkula sa gidaghanon sa mga panid ug uban pang mga butang. Mangutana ko sa tanang interesadong tawo ubos sa iring.
Bahin 1. Dropbox
Tanan nakong libro naa sa dropbox. Adunay 4 ka mga kategoriya diin akong gibahin ang tanan: Textbook, Reference, Fiction, Non-fiction. Apan wala ko magdugang og mga reference nga libro sa lamesa.
Kadaghanan sa mga libro kay .epub, ang uban kay .pdf. Kana mao, ang katapusan nga solusyon kinahanglan sa usa ka paagi sa pagtabon sa duha ka mga kapilian.
Ang akong mga agianan sa mga libro sama niini:
/Книги/Нехудожественное/Новое/Дизайн/Юрий Гордон/Книга про буквы от А до Я.epub
Kung ang libro usa ka fiction, nan ang kategorya (nga mao, "Disenyo" sa kaso sa ibabaw) tangtangon.
Nakahukom ko nga dili magsamok sa Dropbox API, tungod kay ako adunay ilang aplikasyon nga nag-synchronize sa folder. Sa ato pa, ang plano mao kini: magkuha mig mga libro gikan sa folder, padaganon ang matag libro pinaagi sa word counter, ug idugang kini sa Notion.
Bahin 2. Pagdugang og linya
Ang lamesa mismo kinahanglan nga tan-awon sama niini. ATTENTION: mas maayo nga maghimo ug mga ngalan sa column sa Latin.
Atong gamiton ang dili opisyal nga Notion API, tungod kay ang opisyal wala pa mahatag.
Adto sa Notion, pindota ang Ctrl + Shift + J, adto sa Application -> Cookies, kopyaha ang token_v2 ug tawga kini nga TOKEN. Dayon moadto kami sa panid nga among gikinahanglan uban ang karatula sa librarya ug kopyaha ang link. Gitawag namo ni nga NOTION.
Dayon among isulat ang code aron makonektar sa Notion.
database = client.get_collection_view(NOTION)
current_rows = database.default_query().execute()
Sunod, magsulat ta ug function para makadugang ug laray sa lamesa.
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
Unsa ang nahitabo dinhi. Among gikuha ug gidugang ang bag-ong laray sa lamesa sa unang laray. Sunod, gibahin namo ang among agianan sa "/" ug pagkuha og mga tag. Mga tag - sa termino sa "Art", "Disenyo", kinsa ang tagsulat, ug uban pa. Dayon among gibutang ang tanang gikinahanglan nga mga natad sa plato.
Bahin 3. Pag-ihap sa mga pulong, oras ug uban pang kalipay
Kini usa ka mas lisud nga buluhaton. Sa among nahinumduman, kami adunay duha ka format: epub ug pdf. Kung ang tanan klaro sa epub - ang mga pulong lagmit naa, nan ang tanan dili kaayo klaro bahin sa pdf: mahimo’g kini naglangkob sa mga gipapilit nga mga imahe.
Mao nga ang among function sa pag-ihap sa mga pulong sa PDF mahimong ingon niini: gikuha namon ang gidaghanon sa mga panid ug gipadaghan sa usa ka piho nga makanunayon (ang kasagaran nga gidaghanon sa mga pulong matag panid).
Ania siya:
def get_words_count(pages_number):
return pages_number * WORDS_PER_PAGE
Kini nga WORDS_PER_PAGE alang sa usa ka A4 nga panid gibanabana nga 300.
Karon magsulat kita ug function sa pag-ihap sa mga panid. Atong gamiton
def get_pdf_pages_number(path, filename):
pdf = PdfFileReader(open(os.path.join(path, filename), 'rb'))
return pdf.getNumPages()
Sunod, magsulat kami usa ka butang alang sa pag-ihap sa mga panid sa Epub. Gigamit namo
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)
Karon atong kuwentahon ang oras. Gikuha namo ang among paborito nga ihap sa pulong ug gibahin kini sa imong katulin sa pagbasa.
def get_reading_time(words_count):
return round(((words_count / WORDS_PER_MINUTE) / 60) * 10) / 10
Bahin 4. Pagdugtong sa tanang bahin
Kinahanglan natong agian ang tanang posibleng mga dalan sa atong folder sa mga libro. Susiha kung aduna na bay libro sa Notion: kung naa, dili na kinahanglan nga maghimo usa ka linya.
Unya kinahanglan naton mahibal-an ang tipo sa file, depende niini, ihap ang gidaghanon sa mga pulong. Pagdugang og libro sa katapusan.
Mao kini ang code nga atong makuha:
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)
Ug ang function aron masusi kung ang usa ka libro gidugang ingon niini:
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
konklusyon
Salamat sa tanan nga nagbasa niini nga artikulo. Nanghinaut ko nga makatabang kini kanimo nga magbasa pa :)
Source: www.habr.com