ืชืืื ืืชืขื ืืื ืชื ืืืฆื ืืืคืืฅ ืกืคืจืื ืืฆืืจื ืืืืื ืืืืชืจ ืืกืคืจืืื ืืืืงืืจืื ืืช ืฉืื. ืืกืืคื ืฉื ืืืจ, ืืืขืชื ืืืืคืฆืื ืืื ืขื ืืืฉืื ืืืืืืื ืฉื ืืืืช ืืืคืื ืืขืื ืื ืืื. ืื ื ืฉืืื ืืช ืื ืืืชืขื ืืื ืื ืืชืืช ืืืชืื.
ืืืง 1. ืืจืืคืืืงืก
ืื ืืกืคืจืื ืฉืื ื ืืฆืืื ืืืจืืคืืืงืก. ืืฉ 4 ืงืืืืจืืืช ืฉืืืืื ืืืืงืชื ืืื: ืกืคืจ ืืืืื, ืขืืื, ืกืืคืืจืช, ืขืืื. ืืื ืื ื ืื ืืืกืืฃ ืกืคืจื ืขืืื ืืฉืืืื.
ืจืื ืืกืคืจืื ืื .epub, ืืฉืืจ ืื .pdf. ืืืืืจ, ืืคืชืจืื ืืกืืคื ืืืื ืืืืฉืื ืืืกืืช ืืช ืฉืชื ืืืคืฉืจืืืืช.
ืืืจืืื ืฉืื ืืกืคืจืื ืื ืืขืจื ืื:
/ะะฝะธะณะธ/ะะตั
ัะดะพะถะตััะฒะตะฝะฝะพะต/ะะพะฒะพะต/ะะธะทะฐะนะฝ/ะฎัะธะน ะะพัะดะพะฝ/ะะฝะธะณะฐ ะฟัะพ ะฑัะบะฒั ะพั ะ ะดะพ ะฏ.epub
ืื ืืกืคืจ ืืื ืืืืื ื, ืืื ืืงืืืืจืื (ืืืืืจ, "ืขืืฆืื" ืืืงืจื ืฉืืืขืื) ืืืกืจืช.
ืืืืืชื ืื ืืืชืขืกืง ื-Dropbox API, ืืืืืื ืฉืืฉ ืื ืืช ืืืคืืืงืฆืื ืฉืืื ืฉืืกื ืืจื ืช ืืช ืืชืืงืื. ืืืืืจ, ืืชืืื ืืช ืืื ืืื: ืื ืื ื ืืืงืืื ืกืคืจืื ืืืชืืงืืื, ืืขืืืจืื ืื ืกืคืจ ืืจื ืืื ื ืืืืื ืืืืกืืคืื ืืืชื ื-Notion.
ืืืง 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
ืื ืงืืจื ืคื. ืื ืื ื ืืืงืืื ืืืืกืืคืื ืฉืืจื ืืืฉื ืืืืื ืืฉืืจื ืืจืืฉืื ื. ืืืืจ ืืื, ืื ื ืืืืงืื ืืช ืื ืชืื ืฉืื ื ืืืืจื "/" ืืืงืืืื ืชืืื. ืชืืืืช - ืืืื ืืื ืฉื "ืืื ืืช", "ืขืืฆืื", ืื ืืืืืจ ืืื'. ืืืืจ ืืื ืื ื ืืืืืจืื ืืช ืื ืืฉืืืช ืืืจืืฉืื ืฉื ืืฆืืืช.
ืืืง 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