Notion ۽ Python سان گھر جي لائبريري ٺاهڻ

مون کي هميشه دلچسپي رهي آهي ته منهنجي اليڪٽرانڪ لائبريري ۾ ڪتاب ڪيئن ورهايا وڃن. آخر ۾، مان هن آپشن تي آيو آهيان خودڪار حساب سان صفحن جي تعداد ۽ ٻين شين جي. آئون ٻلي جي هيٺان سڀني دلچسپي وارن ماڻهن کان پڇان ٿو.

حصو 1. ڊراپ باڪس

منهنجا سڀئي ڪتاب ڊراپ باڪس تي آهن. هتي 4 ڀاڱا آهن جن ۾ مون هر شيء کي ورهايو آهي: درسي ڪتاب، حوالو، افسانه، غير افسانه. پر مان ٽيبل تي حوالا ڪتاب شامل نه ٿو ڪريان.

اڪثر ڪتاب epub آهن، باقي .pdf آهن. اهو آهي، حتمي حل ڪنهن نه ڪنهن طرح ٻنهي اختيارن کي ڍڪڻ گهرجي.

ڪتابن ڏانهن منهنجا رستا ڪجهه هن طرح آهن:

/Книги/Нехудожественное/Новое/Дизайн/Юрий Гордон/Книга про буквы от А до Я.epub 

جيڪڏهن ڪتاب افسانوي آهي، ته پوء درجي (جيڪو آهي، "ڊزائن" مٿين صورت ۾) هٽايو ويو آهي.

مون فيصلو ڪيو ته ڊروپباڪس API سان پريشان نه ڪيو، ڇاڪاڻ ته مون وٽ انهن جي ايپليڪيشن آهي جيڪا فولڊر کي هم وقت سازي ڪري ٿي. اهو آهي، منصوبو هي آهي: اسان فولڊر مان ڪتاب کڻون ٿا، هر ڪتاب کي هڪ لفظ ڪائونٽر ذريعي هلائي، ۽ ان کي نوٽ ۾ شامل ڪريو.

حصو 2. هڪ لڪير شامل ڪريو

ٽيبل پاڻ کي هن وانگر ڪجهه ڏسڻ گهرجي. ڌيان: اهو بهتر آهي ته ڪالمن جا نالا لاطيني ۾.

Notion ۽ Python سان گھر جي لائبريري ٺاهڻ

اسان غير رسمي نوٽ API استعمال ڪنداسين، ڇاڪاڻ ته سرڪاري هڪ اڃا تائين نه پهچايو ويو آهي.

Notion ۽ Python سان گھر جي لائبريري ٺاهڻ

نوٽ ڏانھن وڃو، Ctrl + Shift + J کي دٻايو، ايپليڪيشن -> ڪوڪيز ڏانھن وڃو، ٽوڪن_v2 کي نقل ڪريو ۽ ان کي TOKEN سڏيو. ان کان پوء اسان صفحي تي وڃون ٿا اسان کي لائبريري جي نشاني سان ۽ لنڪ ڪاپي ڪريو. اسان ان کي 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 سان سڀ ڪجهه واضح آهي - لفظ شايد اتي آهن، پوء هر شي پي ڊي ايف بابت ايترو واضح ناهي: اهو صرف چپيل تصويرن تي مشتمل ٿي سگهي ٿو.

تنهن ڪري پي ڊي ايف ۾ لفظن کي ڳڻڻ لاءِ اسان جو ڪم هن طرح نظر ايندو: اسان صفحن جو تعداد وٺون ٿا ۽ هڪ خاص مستقل سان ضرب ڪريون ٿا (في صفحو لفظن جو سراسري تعداد).

هتي هوء آهي:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

هي WORDS_PER_PAGE هڪ A4 صفحي لاءِ لڳ ڀڳ 300 آهي.

هاڻي اچو ته صفحا ڳڻڻ لاءِ هڪ فنڪشن لکون. اسان استعمال ڪنداسين پي پي ڊي ايف 2.

def get_pdf_pages_number(path, filename):
    pdf = PdfFileReader(open(os.path.join(path, filename), 'rb'))
    return pdf.getNumPages()

اڳيون، اسان ايپب ۾ صفحن جي ڳڻپ لاءِ هڪ شيءِ لکنداسين. اسان استعمال ڪريون ٿا epub_converter. ھتي اسان ڪتاب کڻون ٿا، ان کي لائينن ۾ تبديل ڪريو، ۽ ھر لڪير لاءِ لفظن کي ڳڻيو.

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

تبصرو شامل ڪريو