Mae gen i ddiddordeb erioed yn y ffordd orau o ddosbarthu llyfrau yn fy llyfrgell electronig. Yn y diwedd, deuthum at yr opsiwn hwn gyda chyfrifiad awtomatig o nifer y tudalennau a nwyddau eraill. Gofynnaf i bawb sydd â diddordeb o dan gath.
Rhan 1. Dropbox
Mae fy holl lyfrau ar dropbox. Mae 4 categori y gwnes i rannu popeth iddynt: Gwerslyfr, Cyfeirnod, Ffuglen, Ffeithiol. Ond nid wyf yn ychwanegu cyfeirlyfrau at y tabl.
Mae'r rhan fwyaf o'r llyfrau yn .epub, a'r gweddill yn .pdf. Hynny yw, rhaid i'r ateb terfynol gwmpasu'r ddau opsiwn rywsut.
Mae fy llwybrau i lyfrau yn rhywbeth fel hyn:
/Книги/Нехудожественное/Новое/Дизайн/Юрий Гордон/Книга про буквы от А до Я.epub
Os mai ffuglen yw'r llyfr, yna caiff y categori (hynny yw, "Dylunio" yn yr achos uchod) ei ddileu.
Penderfynais beidio â thrafferthu gyda'r Dropbox API, gan fod gen i eu cymhwysiad sy'n cydamseru'r ffolder. Hynny yw, dyma'r cynllun: rydyn ni'n cymryd llyfrau o'r ffolder, yn rhedeg pob llyfr trwy rifydd geiriau, ac yn ei ychwanegu at Notion.
Rhan 2. Ychwanegu llinell
Dylai'r bwrdd ei hun edrych rhywbeth fel hyn. SYLW: mae'n well gwneud enwau colofnau yn Lladin.
Byddwn yn defnyddio'r API Notion answyddogol, oherwydd nid yw'r un swyddogol wedi'i gyflwyno eto.
Ewch i Notion, pwyswch Ctrl + Shift + J, ewch i Cais -> Cwcis, copïwch token_v2 a'i alw'n TOKEN. Yna awn i'r dudalen sydd ei hangen arnom gydag arwydd y llyfrgell a chopïo'r ddolen. Rydyn ni'n ei alw'n SYLWEDD.
Yna rydyn ni'n ysgrifennu'r cod i gysylltu â Notion.
database = client.get_collection_view(NOTION)
current_rows = database.default_query().execute()
Nesaf, gadewch i ni ysgrifennu swyddogaeth i ychwanegu rhes at y tabl.
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
Beth sy'n digwydd yma. Rydyn ni'n cymryd ac yn ychwanegu rhes newydd at y tabl yn y rhes gyntaf. Nesaf, rydyn ni'n rhannu ein llwybr ar hyd “/” ac yn cael tagiau. Tagiau – o ran “Celf”, “Dylunio”, pwy yw’r awdur, ac ati. Yna rydym yn gosod holl feysydd angenrheidiol y plât.
Rhan 3. Cyfrif geiriau, oriau a hyfrydwch ereill
Mae hon yn dasg anoddach. Fel y cofiwn, mae gennym ddau fformat: epub a pdf. Os yw popeth yn glir gyda'r epub - mae'n debyg bod y geiriau yno yn sicr, yna gyda'r pdf nid yw popeth mor glir: gall gynnwys delweddau wedi'u gludo yn syml.
Felly bydd ein swyddogaeth ar gyfer cyfrif geiriau mewn PDF yn edrych fel hyn: rydym yn cymryd nifer y tudalennau ac yn lluosi â chysonyn penodol (y nifer cyfartalog o eiriau fesul tudalen).
Dyma hi:
def get_words_count(pages_number):
return pages_number * WORDS_PER_PAGE
Mae'r WORDS_PER_PAGE hwn ar gyfer tudalen A4 tua 300.
Nawr, gadewch i ni ysgrifennu swyddogaeth i gyfrif tudalennau. Byddwn yn defnyddio
def get_pdf_pages_number(path, filename):
pdf = PdfFileReader(open(os.path.join(path, filename), 'rb'))
return pdf.getNumPages()
Nesaf, byddwn yn ysgrifennu peth ar gyfer cyfrif tudalennau yn Epub. Rydym yn defnyddio
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)
Nawr, gadewch i ni gyfrifo'r amser. Rydyn ni'n cymryd ein hoff gyfrif geiriau ac yn ei rannu â'ch cyflymder darllen.
def get_reading_time(words_count):
return round(((words_count / WORDS_PER_MINUTE) / 60) * 10) / 10
Rhan 4. Cysylltu'r holl rannau
Mae angen i ni fynd trwy bob llwybr posib yn ein ffolder llyfrau. Gwiriwch a oes llyfr eisoes yn Notion: os oes, nid oes angen i ni greu llinell mwyach.
Yna mae angen i ni benderfynu ar y math o ffeil, yn dibynnu ar hyn, cyfrif nifer y geiriau. Ychwanegwch lyfr ar y diwedd.
Dyma'r cod a gawn:
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)
Ac mae'r swyddogaeth i wirio a yw llyfr wedi'i ychwanegu yn edrych fel hyn:
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
Casgliad
Diolch i bawb a ddarllenodd yr erthygl hon. Rwy'n gobeithio y bydd yn eich helpu i ddarllen mwy :)
Ffynhonnell: hab.com