نوشن اور ازگر کے ساتھ ہوم لائبریری بنانا

میں ہمیشہ اس بات میں دلچسپی رکھتا ہوں کہ اپنی الیکٹرانک لائبریری میں کتابیں کس طرح تقسیم کی جائیں۔ آخر میں، میں صفحات کی تعداد اور دیگر سامانوں کی خودکار حساب کتاب کے ساتھ اس اختیار پر پہنچا۔ میں بلی کے نیچے تمام دلچسپی رکھنے والے افراد سے پوچھتا ہوں۔

حصہ 1۔ ڈراپ باکس

میری تمام کتابیں ڈراپ باکس پر ہیں۔ 4 زمرے ہیں جن میں میں نے ہر چیز کو تقسیم کیا: نصابی کتاب، حوالہ، افسانہ، غیر افسانہ۔ لیکن میں میز پر حوالہ کتابیں شامل نہیں کرتا ہوں۔

زیادہ تر کتابیں .epub ہیں، باقی .pdf ہیں۔ یعنی، حتمی حل میں کسی نہ کسی طرح دونوں اختیارات کا احاطہ کرنا چاہیے۔

کتابوں کے لیے میرے راستے کچھ اس طرح ہیں:

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

اگر کتاب افسانہ ہے، تو زمرہ (یعنی اوپر والے معاملے میں "ڈیزائن") ہٹا دیا جاتا ہے۔

میں نے ڈراپ باکس API سے پریشان نہ ہونے کا فیصلہ کیا، کیونکہ میرے پاس ان کی ایپلی کیشن ہے جو فولڈر کو ہم آہنگ کرتی ہے۔ یعنی منصوبہ یہ ہے: ہم فولڈر سے کتابیں لیتے ہیں، ہر کتاب کو ورڈ کاؤنٹر کے ذریعے چلاتے ہیں، اور اسے تصور میں شامل کرتے ہیں۔

حصہ 2۔ ایک لائن شامل کریں۔

میز خود کو کچھ اس طرح نظر آنا چاہئے. توجہ: کالم کے نام لاطینی میں بنانا بہتر ہے۔

نوشن اور ازگر کے ساتھ ہوم لائبریری بنانا

ہم غیر سرکاری نوشن API کا استعمال کریں گے، کیونکہ سرکاری ابھی تک ڈیلیور نہیں کیا گیا ہے۔

نوشن اور ازگر کے ساتھ ہوم لائبریری بنانا

تصور پر جائیں، Ctrl + Shift + J دبائیں، Application -> Cookies پر جائیں، token_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۔ اگر ایپب کے ساتھ سب کچھ واضح ہے - الفاظ شاید موجود ہیں، تو پی ڈی ایف کے بارے میں سب کچھ اتنا واضح نہیں ہے: یہ صرف چپکنے والی تصاویر پر مشتمل ہوسکتا ہے۔

لہذا پی ڈی ایف میں الفاظ کی گنتی کے لیے ہمارا فنکشن اس طرح نظر آئے گا: ہم صفحات کی تعداد لیتے ہیں اور ایک مخصوص مستقل (ہر صفحہ الفاظ کی اوسط تعداد) سے ضرب کرتے ہیں۔

وہ یہاں ہے:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

A4 صفحہ کے لیے یہ WORDS_PER_PAGE تقریباً 300 ہے۔

اب پیجز گننے کے لیے ایک فنکشن لکھتے ہیں۔ ہم استعمال کریں گے۔ پی پی ڈی ایف 2۔.

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

اگلا، ہم Epub میں صفحات کی گنتی کے لیے ایک چیز لکھیں گے۔ ہم استعمال کرتے ہیں 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

نیا تبصرہ شامل کریں