def __init__(self, query, refresh=False, download=True, count=200, integrity_fields=None, integrity_action="raise", verbose=False): """Interaction with the Affiliation Search API. Parameters ---------- query : str A string of the query, e.g. "af-id(60021784)". refresh : bool or int (optional, default=False) Whether to refresh the cached file if it exists or not. If int is passed, cached file will be refreshed if the number of days since last modification exceeds that value. count : int (optional, default=200) The number of entries to be displayed at once. A smaller number means more queries with each query having less results. download : bool (optional, default=True) Whether to download results (if they have not been cached). integrity_fields : None or iterable (default=None) Iterable of field names whose completeness should be checked. ScopusSearch will perform the action specified in `integrity_action` if elements in these fields are missing. This helps avoiding idiosynchratically missing elements that should always be present, such as the EID or the name. integrity_action : str (optional, default="raise") What to do in case integrity of provided fields cannot be verified. Possible actions: - "raise": Raise an AttributeError - "warn": Raise a UserWarning verbose : bool (optional, default=False) Whether to print a downloading progress bar to terminal. Has no effect for download=False. Raises ------ ScopusQueryError If the number of search results exceeds 5000. ValueError If the integrity_action parameter is not one of the allowed ones. Examples -------- See https://pybliometrics.readthedocs.io/en/stable/examples/AffiliationSearch.html. Notes ----- The directory for cached results is `{path}/STANDARD/{fname}`, where `path` is specified in `~/.scopus/config.ini` and fname is the md5-hashed version of `query`. """ # Checks check_integrity_params(integrity_action) # Query self.query = query Search.__init__(self, query=query, api="AffiliationSearch", refresh=refresh, count=count, download=download, verbose=verbose, view="STANDARD") self.integrity = integrity_fields or [] self.action = integrity_action
def __init__(self, query, refresh=False, subscriber=True, view=None, download=True, integrity_fields=None, integrity_action="raise", verbose=False, **kwds): """Interaction with the Scopus Search API. Parameters ---------- query : str A string of the query. refresh : bool or int (optional, default=False) Whether to refresh the cached file if it exists or not. If int is passed, cached file will be refreshed if the number of days since last modification exceeds that value. subscriber : bool (optional, default=True) Whether the user accesses Scopus with a subscription or not. For subscribers, Scopus's cursor navigation will be used. Sets the number of entries in each query iteration to the maximum number allowed by the corresponding view. view : str (optional, default=None) Which view to use for the query, see https://dev.elsevier.com/guides/ScopusSearchViews.htm. Allowed values: STANDARD, COMPLETE. If None, defaults to COMPLETE if subscriber=True and to STANDARD if subscriber=False. download : bool (optional, default=True) Whether to download results (if they have not been cached). integrity_fields : None or iterable (default=None) Iterable of field names whose completeness should be checked. ScopusSearch will perform the action specified in `integrity_action` if elements in these fields are missing. This helps avoiding idiosynchratically missing elements that should always be present, such as the EID or the source ID. integrity_action : str (optional, default="raise") What to do in case integrity of provided fields cannot be verified. Possible actions: - "raise": Raise an AttributeError - "warn": Raise a UserWarning verbose : bool (optional, default=False) Whether to print a downloading progress bar to terminal. Has no effect for download=False or when query file is in cache. kwds : key-value parings, optional Keywords passed on as query parameters. Must contain fields and values listed mentioned in the API specification (https://dev.elsevier.com/documentation/SCOPUSSearchAPI.wadl), such as "field" or "date". Raises ------ ScopusQueryError For non-subscribers, if the number of search results exceeds 5000. ValueError If the view or the integrity_action parameter is not one of the allowed ones. Examples -------- See https://pybliometrics.readthedocs.io/en/stable/examples/ScopusSearch.html. Notes ----- The directory for cached results is `{path}/{view}/{fname}`, where `path` is specified in `~/.scopus/config.ini` and fname is the md5-hashed version of `query`. """ # Checks allowed_views = ('STANDARD', 'COMPLETE') if view and view not in allowed_views: msg = 'view parameter must be one of ' + ', '.join(allowed_views) raise ValueError(msg) check_integrity_params(integrity_action) # Parameters if not view: if subscriber: view = "COMPLETE" else: view = "STANDARD" count = 25 if view == "STANDARD" and subscriber: count = 200 if "cursor" in kwds: subscriber = kwds["cursor"] kwds.pop("cursor") # Query self.query = query Search.__init__(self, query=query, api='ScopusSearch', refresh=refresh, count=count, cursor=subscriber, view=view, download=download, verbose=verbose, **kwds) self.integrity = integrity_fields or [] self.action = integrity_action