Пример #1
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
Пример #2
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
Пример #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)
Пример #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)
Пример #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)
Пример #6
0
def find_book(data):
    print('data')

    filters = list(data.split(','))
    print(filters)
    lb = LibgenSearch()

    title = filters[0]
    author = filters[1]
    year = filters[2]
    lang = filters[3]
    extension = filters[4]

    api_filters = {"Year":year, "Extension":extension, "Language":lang, "Author":author} #{"Title" : title, "Author" : author, "ID" : book_id, "Year" : year, "Language": lang}

    results = lb.search_title_filtered(title, api_filters, exact_match=False) #search_title_filtered(title, api_filters, exact_match = False)

    return jsonify(results)
def FetchBookFromLibgenAPI(searchQuery: str, bAuthor=None, index=0):
    x = LibgenSearch().search_title(searchQuery)
    if (bAuthor == None):
        if (len(x) == 0):
            return None
        return x[index]
    else:
        sanity_counter = 0
        print(f"{searchQuery} by {bAuthor}")
        for book in tqdm(x):
            sanity_counter += 1

            print(book['Title'], ' \n-----\n', book['Author'])
            if (bAuthor.lower().replace(' ', '')
                    in str(book['Author']).replace(' ', '').lower()):
                return book
            if (sanity_counter > 5):
                return None
Пример #8
0
def bybook():
    name = request.args.get('bookname')
    if name:
        s = LibgenSearch()
        books = s.search_title(name)
        return jsonify({"books":books})
Пример #9
0
def byauthor():
    name = request.args.get('authorname')
    if name:
        s = LibgenSearch()
        books = s.search_author(name)
        return jsonify({"books":books})
Пример #10
0
from libgen_api import LibgenSearch
from tkinter import *
from tkinter import filedialog
import tkinter.font as tkFont
import wget
import os
from bs4 import BeautifulSoup
import requests
import re
LG = LibgenSearch()
filters = {}
x = '550'
y = '600'

windows_user = os.getlogin()
default_download_directory = "C:/Users/" + windows_user + "/Downloads/"

root = Tk()
root.geometry('{}x{}'.format(x, y))
root.resizable(False, False)
root.title("Books Downloader")

sw = 0
var_type = IntVar()
var_type.set(3)
Extension_type = "all"

progress = StringVar()
progress.set('no downloads actives')

TitleFontStyle = tkFont.Font(family="Lucida Grande", size=20)
Пример #11
0
def Cover_URL(array_books):
    for dicts in array_books:

        word = dicts["Title"]
        url = 'https://www.google.com/search?q={0}&tbm=isch'.format(word)
        content = requests.get(url).content
        soup = BeautifulSoup(content, 'lxml')
        images = soup.findAll('img')
        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)