๋๋ ํญ์ ๋ด ์ ์ ๋์๊ด์์ ์ฑ ์ ๊ฐ์ฅ ์ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ๊ด์ฌ์ด ์์์ต๋๋ค. ๊ฒฐ๊ตญ ๋๋ ํ์ด์ง ์์ ๊ธฐํ ํํ์ ์๋์ผ๋ก ๊ณ์ฐํ์ฌ ์ด ์ต์ ์ ์ ํํ์ต๋๋ค. ๊ณ ์์ด ์๋์ ๊ด์ฌ์๋ ๋ชจ๋ ๋ถ๋ค๊ป ๋ฌป์ต๋๋ค.
1๋ถ. ๋๋กญ๋ฐ์ค
๋ด ์ฑ ์ ๋ชจ๋ Dropbox์ ์์ต๋๋ค. ์ ๊ฐ ๋ชจ๋ ๊ฒ์ ๊ต๊ณผ์, ์ฐธ๊ณ ์๋ฃ, ์์ค, ๋ ผํฝ์ ์ 4๊ฐ์ง ๋ฒ์ฃผ๋ก ๋๋์์ต๋๋ค. ํ์ง๋ง ๋๋ ํ ์ด๋ธ์ ์ฐธ๊ณ ๋์๋ฅผ ์ถ๊ฐํ์ง ์์ต๋๋ค.
๋๋ถ๋ถ์ ์ฑ ์ .epub์ด๊ณ ๋๋จธ์ง๋ .pdf์ ๋๋ค. ์ฆ, ์ต์ข ์๋ฃจ์ ์ ์ด๋ป๊ฒ๋ ๋ ๊ฐ์ง ์ต์ ์ ๋ชจ๋ ํฌ๊ดํด์ผ ํฉ๋๋ค.
์ฑ ์ ๋ํ ๋์ ๊ฒฝ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
/ะะฝะธะณะธ/ะะตั
ัะดะพะถะตััะฒะตะฝะฝะพะต/ะะพะฒะพะต/ะะธะทะฐะนะฝ/ะฎัะธะน ะะพัะดะพะฝ/ะะฝะธะณะฐ ะฟัะพ ะฑัะบะฒั ะพั ะ ะดะพ ะฏ.epub
์ฑ ์ด ์์ค์ธ ๊ฒฝ์ฐ ์นดํ ๊ณ ๋ฆฌ(์ฆ, ์์ ๊ฒฝ์ฐ '๋์์ธ')๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค.
ํด๋๋ฅผ ๋๊ธฐํํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ผ๋ฏ๋ก Dropbox API๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ฆ, ๊ณํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ํด๋์์ ์ฑ ์ ๊ฐ์ ธ์ ๋จ์ด ์นด์ดํฐ๋ฅผ ํตํด ๊ฐ ์ฑ ์ ์คํํ๊ณ Notion์ ์ถ๊ฐํฉ๋๋ค.
2๋ถ. ์ค ์ถ๊ฐ
ํ ์ด๋ธ ์์ฒด๋ ๋ค์๊ณผ ๊ฐ์์ผํฉ๋๋ค. ์ฃผ์: ์ด ์ด๋ฆ์ ๋ผํด์ด๋ก ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ณต์ API๊ฐ ์์ง ์ ๊ณต๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋น๊ณต์ Notion API๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
Notion์ผ๋ก ์ด๋ํ์ฌ Ctrl + Shift + J๋ฅผ ๋๋ฅด๊ณ ์ ํ๋ฆฌ์ผ์ด์ -> ์ฟ ํค๋ก ์ด๋ํ์ฌ 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
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๋ถ. ๋ชจ๋ ๋ถํ ์ฐ๊ฒฐํ๊ธฐ
์ฑ
ํด๋์์ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๊ฑฐ์ณ์ผ ํฉ๋๋ค. 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
๊ฒฐ๋ก
์ด ๊ธ์ ์ฝ์ด์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋ ์ฝ์ด๋ณด์๋ฉด ๋์์ด ๋์ค ๊ฒ ๊ฐ์์ :)
์ถ์ฒ : habr.com