เบเปเบญเบเบกเบตเบเบงเบฒเบกเบชเบปเบเปเบเบชเบฐเปเปเบตเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเปเบเบเบขเบฒเบเบเบถเปเบกเปเบเบซเปเบญเบเบชเบฐเปเบธเบเบญเบตเปเบฅเบฑเบเปเบเบฃเบเบดเบเบเบญเบเบเปเบญเบเบเบตเบเบตเปเบชเบธเบ. เปเบเบเบตเปเบชเบธเบ, เบเปเบญเบเบกเบฒเบฎเบญเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบเปเบงเบเบเบฒเบเบเบดเบเปเบฅเปเบญเบฑเบเบเบฐเปเบเบกเบฑเบเบเบญเบเบเปเบฒเบเบงเบเบซเบเปเบฒเปเบฅเบฐเบชเบดเปเบเบเบตเปเบญเบทเปเบเป. เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเบซเปเบเบธเบเบเบปเบเบเบตเปเบชเบปเบเปเบเบเบฒเบเปเบเป cat.
เบชเปเบงเบเบเบต 1. Dropbox
เบเบถเปเบกเบเบฑเบเปเบปเบเบเบญเบเบเปเบญเบเบขเบนเปเปเบ dropbox. เบกเบต 4 เบเบฐโเปเบเบโเบเบตเปโเบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเปเบเปโเปเบเปเบโเบญเบญเบโเบเบธเบโเบชเบดเปเบโเบเบธเบโเบขเปเบฒเบโ: เบซเบเบฑเบโเบชเบทโเบเบดเบกโ, เปเบญโเบเบฐโเบชเบฒเบโเบญเปเบฒเบโเบญเบตเบโ, fictionโ, เบเปเปโเปเบกเปเบ fictionโ. เปเบเปเบเปเบญเบเบเปเปเปเบเบตเปเบกเบเบทเปเบกเบญเปเบฒเบเบญเบตเบเปเบชเปเบเบฒเบเบฐเบฅเบฒเบ.
เบเบทเปเบกเบชเปเบงเบเปเบซเบเปเปเบกเปเบ .epub, เบชเปเบงเบเบเบตเปเปเบซเบผเบทเบญเปเบกเปเบ .pdf. เบเบฑเปเบเปเบกเปเบ, เบเบฒเบเปเบเปเปเบเบชเบธเบเบเปเบฒเบเบเบฐเบเปเบญเบเบเบงเบกเปเบญเบปเบฒเบเบฑเบเบชเบญเบเบเบฒเบเปเบฅเบทเบญเบ.
เปเบชเบฑเปเบเบเบฒเบเปเบเบซเบฒเบเบทเปเบกเบเบญเบเบเปเบญเบเปเบกเปเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบเบฑเปเบเบเบตเป:
/ะะฝะธะณะธ/ะะตั
ัะดะพะถะตััะฒะตะฝะฝะพะต/ะะพะฒะพะต/ะะธะทะฐะนะฝ/ะฎัะธะน ะะพัะดะพะฝ/ะะฝะธะณะฐ ะฟัะพ ะฑัะบะฒั ะพั ะ ะดะพ ะฏ.epub
เบเปเบฒเบเบทเปเบกเปเบกเปเบเบเบดเบเบฒเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบฐเปเบเบ (เบเบฑเปเบเปเบกเปเบ, "เบเบฒเบเบญเบญเบเปเบเบ" เปเบเบเปเบฅเบฐเบเบตเบเปเบฒเบเปเบเบดเบ) เบเบทเบเปเบเบเบเปเบฒเบ.
เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเบเบตเปเบเบฐเบเปเปเบฅเบปเบเบเบงเบ Dropbox API, เปเบเบฒเบฐเบงเปเบฒเบเปเบญเบเบกเบตเปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบญเบเบเบงเบเปเบเบปเบฒเบเบตเป synchronizes เปเบเบเปเบเบต. เบเบฑเปเบเปเบกเปเบ, เปเบเบเบเบฒเบเปเบกเปเบเบเบตเป: เบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒเบเบทเปเบกเบเบฒเบเปเบเปเบเบต, เปเบฅเปเบเปเบเปเบฅเบฐเบเบทเปเบกเบเปเบฒเบเบเบปเบงเบเบฑเบเบเปเบฒ, เปเบฅเบฐเปเบเบตเปเบกเบกเบฑเบเปเบชเปเปเบเบงเบเบงเบฒเบกเบเบดเบ.
เบชเปเบงเบเบเบต 2. เปเบเบตเปเบกเปเบชเบฑเปเบ
เบเบฒเบเบฐเบฅเบฒเบเบเบปเบงเบกเบฑเบเปเบญเบเบเบงเบเปเบเบดเปเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบเบฑเปเบเบเบตเป. เปเบญเบปเบฒโเปเบโเปเบชเปโ: เบกเบฑเบโเปเบเบฑเบโเบเบฒเบโเบเบตเบโเบงเปเบฒโเบเบตเปโเบเบฐโเปเบฎเบฑเบโเปเบซเปโเบเบทเปโเบเบฑเบโเปเบเบฑเบโเบเบฒโเบชเบฒโเบฅเบฒโเบเบดเบโ.
เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเป Notion 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
เบกเบตเบซเบเบฑเบเปเบเบตเบเบเบถเปเบเบขเบนเปเบเบตเป. เบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒเปเบฅเบฐเปเบเบตเปเบกเปเบเบงเปเบซเบกเปเปเบเบเบฒเบเบฐเบฅเบฒเบเปเบเปเบเบงเบเปเบฒเบญเบดเบ. เบเปเปเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเบเปเบชเบฑเปเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฒเบก "/" เปเบฅเบฐเปเบเปเบฎเบฑเบ tags. Tags - เปเบเปเบเปเบเบญเบ "เบชเบดเบฅเบฐเบเบฐ", "เบเบฒเบเบญเบญเบเปเบเบ", เบเบนเปเบเบตเปเปเบเบฑเบเบเบนเปเบเบฝเบ, เปเบฅเบฐเบญเบทเปเบเป. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบปเบเบเบปเปเบเบเบฒเบเบตเปเบเปเบฒเปเบเบฑเบเบเบฑเบเบซเบกเบปเบเบเบญเบเปเบเปเบ.
เบเบฒเบเบเบต 3. เบเบฒเบเบเบฑเบเบเปเบฒ, เบเบปเปเบงเปเบกเบ เปเบฅเบฐเบเบงเบฒเบกเบชเบธเบเบญเบทเปเบเป
เบเบตเปเปเบกเปเบเบงเบฝเบเบเบตเปเบเบฒเบเบเบงเปเบฒ. เบเบฑเปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบทเป, เบเบงเบเปเบฎเบปเบฒเบกเบตเบชเบญเบเบฎเบนเบเปเบเบ: epub เปเบฅเบฐ pdf. เบเปเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบกเบตเบเบงเบฒเบกเบเบฑเบเปเบเบเบเบฑเบ epub - เบเปเบฒเบชเบฑเบเบเปเบฒเบเปเปเบกเปเบเบญเบฒเบเบเบฐเบขเบนเปเบเบตเปเบเบฑเปเบ, เบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเปเบกเปเบเบเปเปเบเบฑเบเปเบเบเบเปเบฝเบงเบเบฑเบ pdf: เบกเบฑเบเบญเบฒเบเบเบฐเบเบฐเบเบญเบเบเปเบงเบเบฎเบนเบเบเบฒเบเบเบตเปเบเบดเบเบเบฒเบง.
เบเบฑเปเบเบเบฑเปเบเบซเบเปเบฒเบเบตเปเบเบญเบเบเบงเบเปเบฎเบปเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฑเบเบเปเบฒเปเบ PDF เบเบฐเบกเบตเบฅเบฑเบเบชเบฐเบเบฐเบเบตเป: เบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒเบเปเบฒเบเบงเบเบซเบเปเบฒเปเบฅเบฐเบเบนเบเบเปเบงเบเบเปเบฒเบเบปเบเบเบตเปเบเบตเปเปเบเปเบเบญเบ (เบเปเบฒเบเบงเบเบเปเบฒเบเบตเปเปเบเปเปเบเบเบชเบฐเปเบฅเปเบเบเปเปเบซเบเปเบฒ).
เบเบตเปเปเบกเปเบเบเบฒเบ:
def get_words_count(pages_number):
return pages_number * WORDS_PER_PAGE
WORDS_PER_PAGE เบเบตเปเบชเบณเบฅเบฑเบเปเปเบฒ A4 เปเบกเปเบเบเบฐเบกเบฒเบ 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. เปเบเบทเปเบญเบกเบเปเปเบเบธเบเบเบฒเบเบชเปเบงเบ
เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเปเบฒเบเปเบชเบฑเปเบเบเบฒเบเบเบตเปเปเบเบฑเบเปเบเปเบเปเบเบฑเบเบซเบกเบปเบเปเบเปเบเบเปเบเบตเบเบทเปเบกเบเบญเบเบเบงเบเปเบฎเบปเบฒ. เบเบงเบเปเบเบดเปเบเบงเปเบฒเบกเบตเบเบทเปเบกเบขเบนเปเปเบ Notion เบซเบผเบทเบเปเป: เบเปเบฒเบกเบต, เบเบงเบเปเบฎเบปเบฒเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบชเปเบฒเบเปเบชเบฑเปเบ.
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเปเบฒเบเบปเบเบเบฐเปเบเบเปเบเบฅเปเปเบฅเบฐ, เบญเบตเบเบเบฒเบกเบเบฒเบเบเบตเป, เบเบฑเบเบเปเบฒเบเบงเบเบเบญเบเบเปเบฒเบชเบฑเบเบเปเบฒเบเป. เปเบเบตเปเบกเบเบถเปเบกเบขเบนเปเบเปเบฒเบ.
เบเบตเปเปเบกเปเบเบฅเบฐเบซเบฑเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบ:
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