diff --git a/cps/metadata_provider/comicvine.py b/cps/metadata_provider/comicvine.py new file mode 100644 index 00000000..0bc67488 --- /dev/null +++ b/cps/metadata_provider/comicvine.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- + +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2021 OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +import requests +from cps.services.Metadata import Metadata + +apikey = "57558043c53943d5d1e96a9ad425b0eb85532ee6" + +class ComicVine(Metadata): + __name__ = "ComicVine" + + def search(self, query): + if self.active: + headers = { + 'User-Agent': 'Not Evil Browser' # , + } + result = requests.get("https://comicvine.gamespot.com/api/search?api_key=" + + apikey + "&resources=issue&query=" + query + "&sort=name:desc&format=json", headers=headers) + return [result.json()['results']] + + diff --git a/cps/metadata_provider/toogle.py b/cps/metadata_provider/google.py similarity index 84% rename from cps/metadata_provider/toogle.py rename to cps/metadata_provider/google.py index b205e62b..d22b1f4d 100644 --- a/cps/metadata_provider/toogle.py +++ b/cps/metadata_provider/google.py @@ -20,12 +20,12 @@ import requests from cps.services.Metadata import Metadata -class Toogle(Metadata): +class Google(Metadata): __name__ = "Google" def search(self, query): if self.active: - return [1] - return [] + result = requests.get("https://www.googleapis.com/books/v1/volumes?q="+query.replace(" ","+")) + return [result.json()['items']] diff --git a/cps/metadata_provider/scholar.py b/cps/metadata_provider/scholar.py new file mode 100644 index 00000000..3314ba62 --- /dev/null +++ b/cps/metadata_provider/scholar.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +# This file is part of the Calibre-Web (https://github.com/janeczku/calibre-web) +# Copyright (C) 2021 OzzieIsaacs +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from scholarly import scholarly + +import json +from cps.services.Metadata import Metadata +#try: + +#except ImportError: +# have_scholar = False +# pass + + + +class scholar(Metadata): + __name__ = "ComicVine" + + def search(self, query): + if self.active: + if True: + scholar_gen = scholarly.search_pubs(' '.join(query.split('+'))) + i = 0 + result = [] + for publication in scholar_gen: + del publication['source'] + result.append(publication) + i += 1 + if (i >= 10): + break + return json.dumps(result) + return "[]" + + + diff --git a/cps/search_metadata.py b/cps/search_metadata.py index bb924dba..655e63b5 100644 --- a/cps/search_metadata.py +++ b/cps/search_metadata.py @@ -17,49 +17,45 @@ # along with this program. If not, see . from __future__ import division, print_function, unicode_literals -import sys -import datetime -from functools import wraps +from cps.services.Metadata import Metadata import os -from flask import Blueprint, request, render_template, Response, g, make_response, abort +from flask import Blueprint from flask_login import login_required -from flask_login import current_user -from sqlalchemy.sql.expression import func, text, or_, and_, true -from werkzeug.security import check_password_hash -from . import constants, logger, config, db, calibre_db, ub, services, get_locale, isoLanguages -# from .metadata_provider +from . import constants, logger +from os.path import basename, isfile +import importlib +import sys, inspect opds = Blueprint('metadata', __name__) log = logger.create() - -#for module in os.listdir(os.join(constants.BASE_DIR, "metadata_provider")): -# if module == '__init__.py' or module[-3:] != '.py': -# continue -# __import__(module[:-3], locals(), globals()) -#del module - -from os.path import basename, isfile -# import glob +new_list = list() meta_dir = os.path.join(constants.BASE_DIR, "cps", "metadata_provider") modules = os.listdir(os.path.join(constants.BASE_DIR, "cps", "metadata_provider")) #glob.glob(join(dirname(__file__), "*.py")) -__all__ = [ basename(f)[:-3] for f in modules if isfile(os.path.join(meta_dir, f)) and not f.endswith('__init__.py')] +for f in modules: + if isfile(os.path.join(meta_dir, f)) and not f.endswith('__init__.py'): + a = basename(f)[:-3] + try: + importlib.import_module("cps.metadata_provider." + a) + new_list.append(a) + except ImportError: + log.error("Import error for metadata source: {}".format(a)) + pass -import importlib -for a in __all__: - importlib.import_module("cps.metadata_provider." + a) +def list_classes(provider_list): + classes = list() + for element in provider_list: + for name, obj in inspect.getmembers(sys.modules["cps.metadata_provider." + element]): + if inspect.isclass(obj) and name != "Metadata" and issubclass(obj, Metadata): + classes.append(obj()) + return classes -import sys, inspect -def print_classes(): - for a in __all__: - for name, obj in inspect.getmembers(sys.modules["cps.metadata_provider." + a]): - if inspect.isclass(obj): - print(obj) - -print_classes() +cl = list_classes(new_list) +for c in cl: + print(c.search("Walking")) @opds.route("/metadata/provider") @login_required diff --git a/cps/services/Metadata.py b/cps/services/Metadata.py index 05778c25..d6e4e7d5 100644 --- a/cps/services/Metadata.py +++ b/cps/services/Metadata.py @@ -25,8 +25,3 @@ class Metadata(): def set_status(self, state): self.active = state - - def search(self, query): - if self.active: - return [1] - return []