áá»áœááºá¯ááºá á¡á®áááºáááœááºáá áºá á¬ááŒáá·áºááá¯ááºááœáẠá á¬á¡á¯ááºáá»á¬ážááᯠá¡áá±á¬ááºážáá¯á¶ážááŒáá·áºáá±áááºážááᯠáá»áœááºá¯ááºá¡ááŒá²áááºáž á áááºáááºá á¬ážáá²á·áááºá á¡áá¯á¶ážááœááºá á á¬áá»ááºááŸá¬á¡áá±á¡ááœááºááŸáá·áº á¡ááŒá¬ážáá±á¬ááºážáá»áá¯ážáá»á¬ážááᯠá¡ááá¯á¡áá»á±á¬áẠááœááºáá»ááºááŒááºážááŒáá·áº á€ááœá±ážáá»ááºááŸá¯ááá¯á· áá»áœááºá¯ááºáá±á¬ááºáá¬áá²á·áááºá á¡á±á¬ááºááŸá¬ á áááºáá«áááºá á¬ážáá°á¡á¬ážáá¯á¶ážááᯠáá±ážááŒáá·áºáááºá
á¡ááá¯ááºáž 1. Dropbox
áá»áœááºá¯ááºáá á¬á¡á¯ááºáá»á¬ážá¡á¬ážáá¯á¶áž dropbox ááœááºááŸááááºá áá»áœááºá¯ááºááẠá¡áá¬á¡á¬ážáá¯á¶ážááᯠááá¯ááºážááŒá¬ážáá¬ážáá±á¬ á¡áá»áá¯ážá¡á á¬áž (á) áá»áá¯ážááŸááááº- áá»á±á¬ááºážáá¯á¶ážá á¬á¡á¯ááºá á¡ááá¯ážá¡áá¬ážá á áááºáá°ážáááºá á áááºáá°ážáááºááá¯ááºáá±á¬á áá«áá±ááá·áº á á¬ážááœá²áá±á«áºááŸá¬ á¡ááá¯ážá¡áá¬ážá á¬á¡á¯ááºááœá± áááá·áºáá°ážá
á á¬á¡á¯ááºá¡áá»á¬ážá á¯ááŸá¬ .epub ááŒá áºááŒá®áž áá»ááºáá»á¬ážááŸá¬ .pdf ááŒá áºáááºá ááá¯ááá¯áááºááŸá¬á áá±á¬ááºáá¯á¶ážááŒá±ááŸááºážáá»ááºááẠááœá±ážáá»ááºá áá¬ááŸá áºáá¯áá¯á¶ážááᯠáá áºáááºážáááºážááŒáá·áº á¡áá»á¯á¶ážáááºááááºááŒá áºáááºá
áá»áœááºá¯ááºá á á¬á¡á¯ááºáá»á¬ážáá®ááá¯á· ááœá¬ážáá¬áááºážááŸá¬ á€áá²á·ááá¯á· ááŒá áºááẠá
/ÐМОгО/ÐеÑ
ÑЎПжеÑÑвеММПе/ÐПвПе/ÐОзайМ/ЮÑОй ÐПÑЎПМ/ÐМОга пÑП бÑÐºÐ²Ñ ÐŸÑ Ð ÐŽÐŸ Я.epub
á á¬á¡á¯ááºááẠá áááºáá°ážáááºáááºáá«á á¡áá»áá¯ážá¡á á¬áž (á¡áááºáá±á¬áºááŒáá« âáá®ááá¯ááºážâ) ááᯠáááºááŸá¬ážáá«áááºá
áá»áœááºá¯ááºááœáẠááá¯ááºááœá²ááᯠáááºáá°ááŒá¯áá±á¬ áááºážááá¯á·á á¡ááá®áá±ážááŸááºážááŸááá±á¬ááŒá±á¬áá·áº Dropbox API ááᯠáááŸá±á¬áá·áºááŸááºááẠáá¯á¶ážááŒááºáá²á·áááºá ááá¯ááá¯áááºááŸá¬á á¡á á®á¡á ááºááŸá¬ á€ááá¯á·ááŒá áºáááº- áá»áœááºá¯ááºááá¯á·ááẠá á¬á¡á¯ááºáá»á¬ážááᯠááá¯áá«ááŸáá°á á á¬á¡á¯ááºáá áºá¡á¯ááºá á®ááᯠá áá¬ážáá¯á¶ážáá±á¬ááºáá¬ááŸáá áºááá·áº ááœáá·áºáᬠááá±á¬ááá¬ážááá¯á· ááá·áºáá«áááºá
á¡ááá¯ááºáž 2. ááá¯ááºážáá áºáá¯ááá·áºáá«á
á á¬ážááœá²ááá¯ááºááá¯ááºá áá®ááá¯áá»áá¯ážááŒá áºááááºá áááááŒá¯áááº- áá±á¬áºáá¶á¡áááºáá»á¬ážááᯠáááºáááºáá¬áá¬ááŒáá·áº ááŒá¯áá¯ááºááŒááºážá ááá¯áá±á¬ááºážáá«áááºá
ááá¬ážáááºááá±ážááá¯á·ááá±ážáá±á¬ááŒá±á¬áá·áº ááá¬ážáááºááá¯ááºáá±á¬ Notion API ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
Notion ááá¯á·ááœá¬ážáá«á Ctrl + Shift + J ááá¯ááŸáááºáá«á á¡ááá®áá±ážááŸááºáž -> Cookies ááá¯á·ááœá¬ážáá«á ááá¯áááº_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 áá»á¬ážááá°áá«á áááºáá»á¬áž - "á¡áá¯ááá¬"á "áá®ááá¯ááºáž"á áááºáá°á á á¬áá±ážááá¬áá² á áááŒáá·áºáá±á«á·á ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠáááºážáááºááŒá¬ážá ááá¯á¡ááºáá±á¬ ááœááºáááºá¡á¬ážáá¯á¶ážááᯠáááºááŸááºááá¯ááºáá«á
á¡ááá¯ááºáž áá á áá¬ážáá¯á¶ážáá»á¬ážá áá¬áá®áá»á¬ážááŸáá·áº á¡ááŒá¬ážáá»á±á¬áºááœáŸááºááŸá¯áá»á¬ážááᯠáá±ááœááºááŒááºážá
áá«á ááá¯áááºáá²áá²á·á¡áá¯ááºáá«á áá»áœááºá¯ááºááá¯á·ááŸááºááááá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááœáẠepub ááŸáá·áº pdf áá±á¬áºáááºááŸá áºáá»áá¯ážááŸááááºá epub ááŒáá·áº á¡áá¬á¡á¬ážáá¯á¶ážááŸááºážáááºážáá«á - á áá¬ážáá¯á¶ážáá»á¬ážááẠááá¯áá±áá¬ááœááºááŸáááá¯ááºáááºá ááá¯á·áá±á¬áẠpdf ááŸáá·áºáááºáááºááŒá®áž á¡áá¬á¡á¬ážáá¯á¶ážááẠááŸááºážááŸááºážáááºážáááºážááá¯ááºáá±á áááºážááẠáá±á¬áºáá¬ážáá±á¬áá¯á¶áá»á¬ážáá¬ááŒá áºáááºá
ááá¯á·ááŒá±á¬áá·áº PDF ááœáẠá áá¬ážáá¯á¶ážáá»á¬ážáá±ááœááºááŒááºážá¡ááœáẠáá»áœááºá¯ááºááá¯á·ááá¯ááºáá±á¬ááºáá»ááºááẠá€áá²á·ááá¯á·ááŒá áºáááá·áºáááº- áá»áœááºá¯ááºááá¯á·ááẠá á¬áá»ááºááŸá¬á¡áá±á¡ááœááºááá¯áá°ááŒá®áž á¡áá»áá¯á·áá±á¬ááááºážáá±áá áºáá¯ááŒáá·áº ááŒáŸá±á¬ááºááŒááºáž (á á¬áá»ááºááŸá¬áá áºáá¯áá»áŸáẠáá»ááºážáá»áŸá áá¬ážáá¯á¶ážá¡áá±á¡ááœááº)á
á€ááœááºáá°á:
def get_words_count(pages_number):
return pages_number * WORDS_PER_PAGE
A4 á á¬áá»ááºááŸá¬á¡ááœáẠဠWORDS_PER_PAGE ááẠááá·áºááŸááºážááŒá±á¡á¬ážááŒáá·áº ááá ááŒá áºáááºá
á¡áᯠá
á¬áá»ááºááŸá¬ááœá±ááᯠáá±ááœááºááá¯á· function áá
áºáá¯áá±ážááá¯ááºáá¡á±á¬ááºá áá¯á¶ážáááºá
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
á¡ááá¯ááºáž áá á¡á áááºá¡ááá¯ááºážá¡á¬ážáá¯á¶ážááᯠáá»áááºáááºááŒááºážá
áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áá
á¬á¡á¯ááºáá»á¬ážááá¯ááºááœá²ááŸá ááŒá
áºááá¯ááºááá»áŸáááºážááŒá±á¬ááºážá¡á¬ážáá¯á¶ážááᯠááŒááºáááºážááẠááá¯á¡ááºáá«áááºá 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
áá±á¬ááºáá»ááº
áá®áá±á¬ááºážáá«ážááᯠáááºááŸá¯áá°ááá¯ááºážááᯠáá»á±ážáá°ážáááºáá«áááºá á á¬áá»á¬ážáá»á¬ážáááºááá¯á· á¡áá±á¬ááºá¡áá°ááŒá áºáááºááá¯á· áá»áŸá±á¬áºááá·áºáá«ááẠ:)
source: www.habr.com