నోషన్ మరియు పైథాన్‌తో హోమ్ లైబ్రరీని తయారు చేయడం

నా ఎలక్ట్రానిక్ లైబ్రరీలో పుస్తకాలను ఉత్తమంగా ఎలా పంపిణీ చేయాలనే దానిపై నేను ఎల్లప్పుడూ ఆసక్తిని కలిగి ఉన్నాను. చివరికి, నేను పేజీల సంఖ్య మరియు ఇతర గూడీస్ యొక్క స్వయంచాలక గణనతో ఈ ఎంపికకు వచ్చాను. నేను పిల్లి కింద ఆసక్తి ఉన్న వ్యక్తులందరినీ అడుగుతాను.

పార్ట్ 1. డ్రాప్‌బాక్స్

నా పుస్తకాలన్నీ డ్రాప్‌బాక్స్‌లో ఉన్నాయి. నేను అన్నింటినీ విభజించిన 4 వర్గాలు ఉన్నాయి: పాఠ్యపుస్తకం, సూచన, కల్పన, నాన్-ఫిక్షన్. కానీ నేను టేబుల్‌కి రిఫరెన్స్ పుస్తకాలను జోడించను.

చాలా పుస్తకాలు .epub, మిగిలినవి .pdf. అంటే, తుది పరిష్కారం ఏదో ఒకవిధంగా రెండు ఎంపికలను కవర్ చేయాలి.

పుస్తకాలకు నా మార్గాలు ఇలా ఉన్నాయి:

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

పుస్తకం కల్పితమైతే, వర్గం (అంటే పై సందర్భంలో “డిజైన్”) తీసివేయబడుతుంది.

నేను డ్రాప్‌బాక్స్ APIతో ఇబ్బంది పడకూడదని నిర్ణయించుకున్నాను, ఎందుకంటే ఫోల్డర్‌ను సమకాలీకరించే వారి అప్లికేషన్ నా వద్ద ఉంది. అంటే, ప్రణాళిక ఇది: మేము ఫోల్డర్ నుండి పుస్తకాలను తీసుకుంటాము, ప్రతి పుస్తకాన్ని వర్డ్ కౌంటర్ ద్వారా అమలు చేస్తాము మరియు దానిని నోషన్‌కి జోడిస్తాము.

పార్ట్ 2. ఒక లైన్ జోడించండి

పట్టిక కూడా ఇలా ఉండాలి. శ్రద్ధ: కాలమ్ పేర్లను లాటిన్‌లో చేయడం మంచిది.

నోషన్ మరియు పైథాన్‌తో హోమ్ లైబ్రరీని తయారు చేయడం

మేము అనధికారిక నోషన్ APIని ఉపయోగిస్తాము, ఎందుకంటే అధికారికమైనది ఇంకా పంపిణీ చేయబడలేదు.

నోషన్ మరియు పైథాన్‌తో హోమ్ లైబ్రరీని తయారు చేయడం

నోషన్‌కి వెళ్లి, Ctrl + Shift + J నొక్కండి, అప్లికేషన్ -> కుక్కీలకు వెళ్లి, 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. ఎపబ్‌తో ప్రతిదీ స్పష్టంగా ఉంటే - పదాలు బహుశా ఉన్నాయి, అప్పుడు పిడిఎఫ్ గురించి ప్రతిదీ అంత స్పష్టంగా లేదు: ఇది కేవలం అతుక్కొని ఉన్న చిత్రాలను కలిగి ఉండవచ్చు.

కాబట్టి PDFలో పదాలను లెక్కించడానికి మా ఫంక్షన్ ఇలా కనిపిస్తుంది: మేము పేజీల సంఖ్యను తీసుకుంటాము మరియు నిర్దిష్ట స్థిరాంకం (పేజీకి సగటు పదాల సంఖ్య) ద్వారా గుణిస్తాము.

ఇక్కడ ఆమె ఉంది:

def get_words_count(pages_number):
    return pages_number * WORDS_PER_PAGE

A4 పేజీ కోసం ఈ WORDS_PER_PAGE సుమారు 300.

ఇప్పుడు పేజీలను లెక్కించడానికి ఒక ఫంక్షన్ వ్రాద్దాం. మేము ఉపయోగిస్తాము pyPDF2.

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

ఒక వ్యాఖ్యను జోడించండి