Exemple #1
0
async def search_book(metadata: Book, telegram_log: CallbackQuery):
    lib_search = LibgenSearch()
    logging.info(metadata)
    if metadata.Author:
        #filters =  {"Author": metadata.Author}
        filters = {"Language": "English"}
        if metadata.subtitle:
            bQuery = f"{metadata.title} {metadata.subtitle}"
        else:
            bQuery = f"{metadata.title}"
        results = lib_search.search_title_filtered(bQuery,
                                                   filters,
                                                   exact_match=False)
    else:
        results = lib_search.search_title(metadata.title)
    pprint.pprint(results)
    best = find_best_match(metadata, results)
    while best == None:
        await telegram_log.answer(text="Performing advanced query 💪")
        print("advanced")
        isbns = await alternative_search(bQuery, metadata.Author)
        results = []
        for isbn in isbns:
            print(isbn)
            results.extend(lib_search.search_title(isbn))
        pprint.pprint(results)
        best = find_best_match(metadata, results)
        break

    if best != None:
        best = results[best]

        best = LibgenResult(best)
        print(best)
        return best
Exemple #2
0
def search_book(by, value):
    s = LibgenSearch()
    if by == 'title':
        results = s.search_title(value)
    elif by == 'author':
        results = s.search_author(value)
    return results
Exemple #3
0
    async def libgen(self, ctx, *args):
        """Enter a title search query and it will respond with libgen entries"""

        # Collect their query and search for it
        search_query = " ".join(args)

        s = LibgenSearch()
        results = s.search_title(search_query)

        # Truncate to at most 6 results
        results = results[:6]

        # If no results, tell them their book isn't libgenable
        if len(results) == 0:
            await ctx.send("Sorry! Your book isn't libgenable :(")
            return

        # Set up discord embed
        embed = discord.Embed(
            title="Search Results", description=f"Query: {search_query}", color=0xFF0000
        )

        # Add all the info of each search result to the embed in its own field
        for num in range(1, len(results) + 1):
            info_str = ""
            info_str += f'Author: {results[num-1]["Author"]}\n'
            info_str += f'Title: {results[num-1]["Title"]}\n'
            info_str += f'Publisher: {results[num-1]["Publisher"]}\n'
            info_str += f'Year: {results[num-1]["Year"]}\n'
            info_str += f'Extension: {results[num-1]["Extension"]}\n'
            info_str += "Download Links:\n"
            info_str += f'[1]({results[num-1]["Mirror_1"]}) [2]({results[num-1]["Mirror_2"]}) [3]({results[num-1]["Mirror_3"]}) [4]({results[num-1]["Mirror_4"]}) [5]({results[num-1]["Mirror_5"]})'

            embed.add_field(name=f"Result {num}", value=info_str)
        await ctx.send(embed=embed)
Exemple #4
0
def libgen(update, context):
    title = ' '.join(context.args)
    search = LibgenSearch()
    results = search.search_title(title)
    len_results = len(results)
    if len_results != 0:
        response_message = "Sua busca retornou " + str(
            len_results) + " resultados. Os valores do primeiro resultado são"
        response_message = response_message + "\nID: " + results[0]['ID']
        response_message = response_message + "\nAutor: " + results[0]['Author']
        response_message = response_message + "\nTitulo: " + results[0]['Title']
        response_message = response_message + "\nEditora: " + results[0][
            'Publisher']
        response_message = response_message + "\nAno: " + results[0]['Year']
        response_message = response_message + "\nPaginas: " + results[0][
            'Pages']
        response_message = response_message + "\nLingua: " + results[0][
            'Language']
        response_message = response_message + "\nTamanho: " + results[0]['Size']
        response_message = response_message + "\nExtensão: " + results[0][
            'Extension']
        response_message = response_message + "\nPrimeiro Mirror: " + results[
            0]['Mirror_1']
        response_message = response_message + "\n\(≧▽≦)/"
    else:
        response_message = "Livro não encontrado =<"
    context.bot.send_message(chat_id=update.effective_chat.id,
                             text=response_message)
Exemple #5
0
def getTextbookSearchResults():
    if not request.json or not 'message' in request.json: abort(400)

    query = request.json['message']

    s = LibgenSearch()
    response = s.search_title(query)
    response = calculateConfidence(query, response)
    response = filterBooks(response)
    response = Cover_URL(response)
    response = sorted(response, key=lambda i: i['confidence'], reverse=True)

    return jsonify(response)
Exemple #6
0
def bybook():
    name = request.args.get('bookname')
    if name:
        s = LibgenSearch()
        books = s.search_title(name)
        return jsonify({"books":books})
Exemple #7
0
        dicts['Cover_url'] = images[1].get('src')

    return array_books


# Entry Point ---------------------------------------------------------------------------------------

s = LibgenSearch()

user_test_queries = [
    "analysis of biological data", "mathematics", "statistics"
]
for query in user_test_queries:
    print("\n=============\nUSER QUERY :: ", query)

    response = s.search_title(query)
    response = confidence_lvl(response, query)

    print('# QUERIES :: ', len(response))

    # filter books
    response = FilterBooks(response)

    response = Cover_URL(response)

    print('# GOOD QUERIES :: ', len(response), '\n')

    response = sorted(response,
                      key=lambda i: i['Confidence_lvl'],
                      reverse=True)