เชฎเชพเชฐเซ เชเชฒเซเชเซเชเซเชฐเซเชจเชฟเช เชฒเชพเชเชฌเซเชฐเซเชฐเซเชฎเชพเช เชชเซเชธเซเชคเชเซเชจเซเช เชถเซเชฐเซเชทเซเช เชตเชฟเชคเชฐเชฃ เชเซเชตเซ เชฐเซเชคเซ เชเชฐเชตเซเช เชคเซ เช เชเชเซ เชฎเชจเซ เชนเชเชฎเซเชถเชพ เชฐเชธ เชฐเชนเซเชฏเซ เชเซ. เช เชเชคเซ, เชนเซเช เชชเซเชทเซเช เซเชจเซ เชธเชเชเซเชฏเชพ เช เชจเซ เช เชจเซเชฏ เชเซเชกเซเชเชจเซ เชธเซเชตเชเชพเชฒเชฟเชค เชเชฃเชคเชฐเซ เชธเชพเชฅเซ เช เชตเชฟเชเชฒเซเชช เชชเชฐ เชเชตเซเชฏเซ เชเซเช. เชนเซเช เชฌเชฟเชฒเชพเชกเซ เชนเซเช เชณ เชฐเชธ เชงเชฐเชพเชตเชคเชพ เชคเชฎเชพเชฎ เชฒเซเชเซเชจเซ เชชเซเชเซเช เชเซเช.
เชญเชพเช 1. เชกเซเชฐเซเชชเชฌเซเชเซเชธ
เชฎเชพเชฐเชพ เชฌเชงเชพ เชชเซเชธเซเชคเชเซ เชกเซเชฐเซเชชเชฌเซเชเซเชธ เชชเชฐ เชเซ. เชคเซเชฏเชพเช 4 เชถเซเชฐเซเชฃเซเช เชเซ เชเซเชฎเชพเช เชฎเซเช เชฌเชงเซเช เชตเชฟเชญเชพเชเชฟเชค เชเชฐเซเชฏเซเช เชเซ: เชชเชพเช เซเชฏเชชเซเชธเซเชคเช, เชธเชเชฆเชฐเซเชญ, เชธเชพเชนเชฟเชคเซเชฏ, เชจเซเชจ-เชซเชฟเชเซเชถเชจ. เชชเชฐเชเชคเซ เชนเซเช เชเซเชฌเชฒ เชชเชฐ เชธเชเชฆเชฐเซเชญ เชชเซเชธเซเชคเชเซ เชเชฎเซเชฐเชคเซ เชจเชฅเซ.
เชฎเซเชเชพเชญเชพเชเชจเชพ เชชเซเชธเซเชคเชเซ .epub เชเซ, เชฌเชพเชเซเชจเชพ .pdf เชเซ. เชเชเชฒเซ เชเซ, เช เชเชคเชฟเชฎ เชเชเซเชฒเชฎเชพเช เชเซเชเช เชฐเซเชคเซ เชฌเชเชจเซ เชตเชฟเชเชฒเซเชชเซ เชเชตเชฐเซ เชฒเซเชตเชพ เชเซเชเช.
เชชเซเชธเซเชคเชเซ เชคเชฐเชซเชจเชพ เชฎเชพเชฐเชพ เชฎเชพเชฐเซเชเซ เชเชเชเช เชเชจเชพ เชเซเชตเชพ เชเซ:
/ะะฝะธะณะธ/ะะตั
ัะดะพะถะตััะฒะตะฝะฝะพะต/ะะพะฒะพะต/ะะธะทะฐะนะฝ/ะฎัะธะน ะะพัะดะพะฝ/ะะฝะธะณะฐ ะฟัะพ ะฑัะบะฒั ะพั ะ ะดะพ ะฏ.epub
เชเซ เชชเซเชธเซเชคเช เชเชพเชฒเซเชชเชจเชฟเช เชเซ, เชคเซ เชถเซเชฐเซเชฃเซ (เชเชเชฒเซ โโโโเชเซ, เชเชชเชฐเชจเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช "เชกเชฟเชเชพเชเชจ") เชฆเซเชฐ เชเชฐเชตเชพเชฎเชพเช เชเชตเซ เชเซ.
เชฎเซเช เชกเซเชฐเซเชชเชฌเซเชเซเชธ API เชธเชพเชฅเซ เชเชฟเชเชคเชพ เชจ เชเชฐเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช, เชเชพเชฐเชฃ เชเซ เชฎเชพเชฐเซ เชชเชพเชธเซ เชคเซเชฎเชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเซ เชเซ เชซเซเชฒเซเชกเชฐเชจเซ เชธเชฟเชเชเซเชฐเชจเชพเชเช เชเชฐเซ เชเซ. เชเชเชฒเซ เชเซ, เชฏเซเชเชจเชพ เช เชเซ: เช เชฎเซ เชซเซเชฒเซเชกเชฐเชฎเชพเชเชฅเซ เชชเซเชธเซเชคเชเซ เชฒเชเช เชเซเช, เชฆเชฐเซเช เชชเซเชธเซเชคเชเชจเซ เชตเชฐเซเชก เชเชพเชเชจเซเชเชฐ เชฆเซเชตเชพเชฐเชพ เชเชฒเชพเชตเซเช เชเซเช เช เชจเซ เชคเซเชจเซ เชจเซเชถเชจเชฎเชพเช เชเชฎเซเชฐเซเช เชเซเช.
เชญเชพเช 2. เชเช เชฒเซเชเซ เชเชฎเซเชฐเซ
เชเซเชฌเชฒ เชชเซเชคเซ เชเชจเชพ เชเซเชตเซเช เชเชเชเช เชฆเซเชเชพเชตเซเช เชเซเชเช. เชงเซเชฏเชพเชจ เชเชชเซ: เชฒเซเชเชฟเชจเชฎเชพเช เชเซเชฒเชฎ เชจเชพเชฎเซ เชฌเชจเชพเชตเชตเชพเชจเซเช เชตเชงเซ เชธเชพเชฐเซเช เชเซ.
เช เชฎเซ เชฌเชฟเชจเชธเชคเซเชคเชพเชตเชพเชฐ เชจเซเชเซเชถเชจ API เชจเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช, เชเชพเชฐเชฃ เชเซ เชธเชคเซเชคเชพเชตเชพเชฐ เชนเชเซ เชธเซเชงเซ เชตเชฟเชคเชฐเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชจเชฅเซ.
Notion เชชเชฐ เชเชพเช, Ctrl + Shift + J เชฆเชฌเชพเชตเซ, Application -> Cookies เชชเชฐ เชเชพเช, token_v2 เชเซเชชเซ เชเชฐเซ เช เชจเซ เชคเซเชจเซ TOKEN เชเชนเซ. เชชเชเซ เชเชชเชฃเซ เชฒเชพเชเชฌเซเชฐเซเชฐเซ เชธเชพเชเชจ เชธเชพเชฅเซ เชเชฐเซเชฐเซ เชชเซเชทเซเช เชชเชฐ เชเชเช เช เชจเซ เชฒเชฟเชเชเชจเซ เชจเชเชฒ เชเชฐเซเช. เช เชฎเซ เชคเซเชจเซ NOTION เชเชนเซเช เชเซเช.
เชชเชเซ เชเชชเชฃเซ Notion เชธเชพเชฅเซ เชเซเชกเชพเชตเชพ เชฎเชพเชเซ เชเซเชก เชฒเชเซเช เชเซเช.
database = client.get_collection_view(NOTION)
current_rows = database.default_query().execute()
เชเชเชณ, เชเซเชฌเชฒ เชชเชฐ เชชเชเชเซเชคเชฟ เชเชฎเซเชฐเชตเชพ เชฎเชพเชเซ เชซเชเชเซเชถเชจ เชฒเชเซเช.
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
เช เชนเชฟเชฏเชพเช เชถเซเช เชฅเช เชฐเชนเซเชฏเซเช เชเซ. เช เชฎเซ เชชเซเชฐเชฅเชฎ เชชเชเชเซเชคเชฟเชฎเชพเช เชเซเชทเซเชเชเชฎเชพเช เชเช เชจเชตเซ เชชเชเชเซเชคเชฟ เชฒเชเช เชเซเช เช เชจเซ เชเชฎเซเชฐเซเช เชเซเช. เชเชเชณ, เช เชฎเซ เช เชฎเชพเชฐเชพ เชชเชพเชฅเชจเซ "/" เชธเชพเชฅเซ เชตเชฟเชญเชพเชเชฟเชค เชเชฐเซเช เชเซเช เช เชจเซ เชเซ เชเซเชธ เชฎเซเชณเชตเซเช เชเซเช. เชเซ เชเซเชธ - "เชเชฒเชพ", "เชกเชฟเชเชพเชเชจ", เชฒเซเชเช เชเซเชฃ เชเซ, เชตเชเซเชฐเซเชจเชพ เชธเชเชฆเชฐเซเชญเชฎเชพเช. เชชเชเซ เช เชฎเซ เชชเซเชฒเซเชเชจเชพ เชคเชฎเชพเชฎ เชเชฐเซเชฐเซ เชเซเชทเซเชคเซเชฐเซ เชธเซเช เชเชฐเซเช เชเซเช.
เชญเชพเช 3. เชถเชฌเซเชฆเซ, เชเชฒเชพเชเซ เช เชจเซ เช เชจเซเชฏ เชเชจเชเชฆเชจเซ เชเชฃเชคเชฐเซ
เช เชตเชงเซ เชฎเซเชถเซเชเซเชฒ เชเชพเชฐเซเชฏ เชเซ. เชเซเชฎ เชเชชเชฃเซ เชฏเชพเชฆ เชฐเชพเชเซเช เชเซเช, เช เชฎเชพเชฐเซ เชชเชพเชธเซ เชฌเซ เชซเซเชฐเซเชฎเซเช เชเซ: epub เช เชจเซ pdf. เชเซ เชเชชเชฌ เชธเชพเชฅเซ เชฌเชงเซเช เชธเซเชชเชทเซเช เชเซ - เชถเชฌเซเชฆเซ เชเชฆเชพเช เชคเซเชฏเชพเช เชเซ, เชคเซ เชชเชเซ เชชเซเชกเซเชเชซ เชตเชฟเชถเซ เชฌเชงเซเช เชเชเชฒเซเช เชธเซเชชเชทเซเช เชจเชฅเซ: เชคเซเชฎเชพเช เชซเชเซเชค เชเซเชเชฆเชฐเชตเชพเชณเซ เชเชฌเซเช เชนเซเช เชถเชเซ เชเซ.
เชคเซเชฅเซ เชชเซเชกเซเชเชซเชฎเชพเช เชถเชฌเซเชฆเซเชจเซ เชเชฃเชคเชฐเซ เชฎเชพเชเซเชจเซเช เช เชฎเชพเชฐเซเช เชเชพเชฐเซเชฏ เชเชจเชพ เชเซเชตเซเช เชฆเซเชเชพเชถเซ: เช เชฎเซ เชชเซเชทเซเช เซเชจเซ เชธเชเชเซเชฏเชพ เชฒเชเช เชเซเช เช เชจเซ เชเซเชเซเชเชธ เชธเซเชฅเชฟเชฐเชพเชเช (เชชเซเชทเซเช เชฆเซเช เชถเชฌเซเชฆเซเชจเซ เชธเชฐเซเชฐเชพเชถ เชธเชเชเซเชฏเชพ) เชฆเซเชตเชพเชฐเชพ เชเซเชฃเชพเชเชพเชฐ เชเชฐเซเช เชเซเช.
เชคเซเชฃเซ เช เชนเซเช เชเซ:
def get_words_count(pages_number):
return pages_number * WORDS_PER_PAGE
A4 เชชเซเชทเซเช เชฎเชพเชเซ เช WORDS_PER_PAGE เชเชถเชฐเซ 300 เชเซ.
เชนเชตเซ เชชเชพเชจเชพ เชเชฃเชตเชพ เชฎเชพเชเซ เชซเชเชเซเชถเชจ เชฒเชเซเช. เช
เชฎเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช
def get_pdf_pages_number(path, filename):
pdf = PdfFileReader(open(os.path.join(path, filename), 'rb'))
return pdf.getNumPages()
เชเชเชณ, เช
เชฎเซ Epub เชฎเชพเช เชชเซเชทเซเช เซเชจเซ เชเชฃเชคเชฐเซ เชฎเชพเชเซ เชเช เชตเชธเซเชคเซ เชฒเชเซเชถเซเช. เช
เชฎเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช
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)
เชนเชตเซ เชธเชฎเชฏเชจเซ เชเชฃเชคเชฐเซ เชเชฐเซเช. เช เชฎเซ เช เชฎเชพเชฐเชพ เชฎเชจเชชเชธเชเชฆ เชถเชฌเซเชฆเซเชจเซ เชเชฃเชคเชฐเซ เชฒเชเช เชเซเช เช เชจเซ เชคเซเชจเซ เชคเชฎเชพเชฐเซ เชตเชพเชเชเชจเชจเซ เชเชกเชช เชฆเซเชตเชพเชฐเชพ เชตเชฟเชญเชพเชเซเชค เชเชฐเซเช เชเซเช.
def get_reading_time(words_count):
return round(((words_count / WORDS_PER_MINUTE) / 60) * 10) / 10
เชญเชพเช 4. เชฌเชงเชพ เชญเชพเชเซเชจเซ เชเซเชกเชตเซเช
เช
เชฎเชพเชฐเซ เช
เชฎเชพเชฐเชพ เชชเซเชธเซเชคเชเซเชจเชพ เชซเซเชฒเซเชกเชฐเชฎเชพเช เชคเชฎเชพเชฎ เชธเชเชญเชตเชฟเชค เชฐเชธเซเชคเชพเชเชฎเชพเชเชฅเซ เชชเชธเชพเชฐ เชฅเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชจเซเชเชงเชฎเชพเช เชชเชนเซเชฒเซเชฅเซ เช เชเซเช เชชเซเชธเซเชคเช เชเซ เชเซ เชเซเชฎ เชคเซ เชคเชชเชพเชธเซ: เชเซ เชคเซเชฏเชพเช เชเซ, เชคเซ เชเชชเชฃเซ เชนเชตเซ เชฒเชพเชเชจ เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชจเชฅเซ.
เชชเชเซ เชเชชเชฃเซ เชซเชพเชเชฒ เชชเซเชฐเชเชพเชฐ เชจเชเซเชเซ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เชคเซเชจเชพ เชเชงเชพเชฐเซ, เชถเชฌเซเชฆเซเชจเซ เชธเชเชเซเชฏเชพ เชเชฃเซ. เช
เชเชคเซ เชเช เชชเซเชธเซเชคเช เชเชฎเซเชฐเซ.
เช เชเซเชก เช เชฎเชจเซ เชฎเชณเซ เชเซ:
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)
เช เชจเซ เชชเซเชธเซเชคเช เชเชฎเซเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชเซ เชเซ เชเซเชฎ เชคเซ เชคเชชเชพเชธเชตเชพเชจเซเช เชเชพเชฐเซเชฏ เชเชจเชพ เชเซเชตเซเช เชฆเซเชเชพเชฏ เชเซ:
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
เชจเชฟเชทเซเชเชฐเซเชท
เช เชฒเซเช เชตเชพเชเชเชจเชพเชฐ เชฆเชฐเซเชเชจเซ เชเชญเชพเชฐ. เชฎเชจเซ เชเชถเชพ เชเซ เชเซ เชคเซ เชคเชฎเชจเซ เชตเชงเซ เชตเชพเชเชเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเชถเซ :)
เชธเซเชฐเซเชธ: www.habr.com