Change Log
----------

.. toctree::

2.6.1
~~~~~

2020-07-14

* Show date of retrieval when printing any class object.
* Refactor some of the information when printing class objects.
* Fix bug related to missing requests header with empty results.
* Fix bug with missing source history when printing an `AuthorRetrieval()` object.

2.6
~~~

2020-07-10

* Add support for multiple keys in the configuration file, and replace depleted keys automatically.
* In all classes, add methods `.get_key_remaining_quota()` and `.get_key_reset_time()` to get the remaining calls of the current key and the time when the current key will be reset, relative to the last actual request.
* Provide link examples in reference of each class.
* In `ScopusSearch().results`, use empty strings for missing affiliations (e.g. non-org profile affiliations) when information in concatenated.
* Fix bug in `ScopusSearch().results` when affiliation information has the wrong type (e.g. boolean).

2.5
~~~

2020-05-25

* New class `SerialSearch()` to search via the Serial Title API.
* Add new exception Scopus403Error for forbidden access.
* Fix bug with `AuthorRetrieval().get_coauthors()` only returning the first 25 results.
* Fix bug with progress bar in search classes not showing.

2.4
~~~

2020-04-15

* PlumXMetrics class to access the PlumX Metrics API.
* Fix and update the str dunder functions of all classes.
* Fix bug with raising a ScopusException when the resulting json is malformatted.

2.3.2
~~~~~

2020-03-29

* In `AuthorRetrieval().estimate_uniqueness()`, allow for args and fix documentation.
* Fix bug with missing file modification time stamp.

2.3.1
~~~~~

2020-03-29

* In `AuthorRetrieval().get_coauthors()`, return None instead of empty list when there are no coauthors.
* Improve warning and error messages.
* Improve all documentation.

2.3
~~~

2020-03-22

* Support for python 2.7 has ended.
* Introduce `Base()` class from which all classes inherit the following two methods: `.get_cache_file_age()` and `.get_cache_file_mdate()`.
* In all classes, refresh parameter accepts an integer which will refresh the cached file if the last modification date is longer than that number of days ago.
* Provide extensive affiliation information in `AuthorRetrieval().affiliation_current` and `AuthorRetrieval().affiliation_history` as namedtuples.
* Provide more robust example of the "Download Machine" in the documentation.
* Fix typos and formatting errors in the documentation.
* In `AbstractRetrieval().__str__`, fix bug due to missing authors and affiliations.

2.2.2
~~~~~

2019-12-29

* EIDs starting with "1-s2.0-" are automatically detected as EID as well.
* In `ScopusSearch().results` add field "subtypeDescription".
* In `AbstractRetrieval().idxterms` return None instead of empty lists.
* In `AbstractRetrieval().confdate` return None instead of list with tuples with None.
* Add UserWarning for change of type of `AuthorRetrieval().affiliation_current` and `AuthorRetrieval().affiliation_history`.

2.2.1
~~~~~

2019-09-09

* Add user agent string to evaluate usage.
* Fix bug with missing journal metrics in `SerialTitle()`.

2.2
~~~

2019-08-21

* Add parameters `integrity_fields` and `integrity_action` to all search classes to avoid KeyErrors of missing fields.
* Add progress bar to all search classes indicating download progress.
* Fix bug with missing entries in author-group list in `AbstractRetrieval()`.

2.1.3
~~~~~

2019-07-16

* Fix bug detecting DOIs without slash in `AbstractRetrieval()`.
* Fix bug related to creating the config file.

2.1.2
~~~~~

2019-07-09

* Fix bugs arising from passing duplicate parameters through kwds in Search classes.
* Fix bug in `AbstractRetrieval().references` with duplicte volume/issue information from Scopus.
* Fix bug with wrong object type when using `AuthorRetrieval().get_coauthors()`.

2.1.1
~~~~~

2019-06-26

* New properties for `AbstractRetrieval()`: `pii` and `pubmed_id`.
* Improve documentation (`AbstractRetrieval().idxterms` and download machine).
* Fix bug forcing the presence of the package `scopus`.

2.1.0
~~~~~

2019-06-17

* Rename package to pybliometrics.
* In all search classes, properties return None if download=False instead of raising an error.

2.0.1
~~~~~

2019-06-08

* In `AbstractRetrieval().references`, add field "type" for the status of the parsed reference.
* Raise proper Scopus.exception even when no Scopus-supplied error message exists.
* In `AbstractRetrieval()`, update docstrings.
* Fix bug related to creating the config when the config doesn't exist.
* Fix bug when using `AbstractRetrieval()` in Python 2.

2.0
~~~

2019-05-28

* Cache files in subfolders according to the used view.
* Add method `.estimate_uniqueness()` to `AuthorRetrieval()` to estimate how unique an author profile is.
* Use error message provided by Scopus for ScopusErrors.
* Add tip how to deal with "KeyError: 'eid'".
* Remove deprecated classes, modules, parameters and attributes.  Removed deprecated classes are `ScopusAbstract()`, `ScopusAffiliation()`, `ScopusAuthor()` and `report()`.  Removed deprecated parameters are start and max_entries in `AuthorSearch()` and `AffiliationSearch()`.  Removed deprecated attributes include only `ScopusSearch.EIDS`.

1.6.1
~~~~~

2019-05-14

* Add support for proxies.
* In `AbstractRetrieval.correspondence`, turn values into proper strings.
* Fix bug when creating the config file.

1.6
~~~

2019-05-09

* `SerialTitle()` class to access the Serial Title API.
* In all search classes, add method `.get_results_size()` to return the number of matches.
* In all search classes, add boolean parameter `download` to not download the results (but get the number of matches anyways).
* In `AbstractRetrieval().authogroup`, rename field "city-group" to "city" and add new fields: "dptid", "postalcode", "addresspart".
* In `AbstractRetrieval().authorgroup`, fix bug with missing affiliation information.
* In all search classes, remove deprecated paramter `start`.

1.5
~~~

2019-05-16

* Add parameter `subscriber` to `ScopusSearch()` class to set request parameters to maximum values depending on view.
* Add support for cursor-navigation in searches.
* Add `__citation__` dunder.
* Allow for the REF view in `AbstractRetrieval()` to obtain detailed information on referenced items.
* New properties for `AuthorRetrieval()`: `historical_identifier` and `status`.
* Allow `ScopusSearch()` to pass on kwds as query params.
* Deprecate `start` and `max_entries` parameters in `AffiliationSearch()` and `AuthorSearch()`.
* Deprecate `start` parameter in `ScopusSearch()` class.
* Fix bug with `ContentAffiliationRetrieval().__str__`.
* Fix bugs in `AbstractRetrieval()` related to missing information obtained from Scopus.

1.4.3
~~~~~

2019-02-12

* Fix bug with empty value in `AbstractRetrieval().language`.
* Add matplotlib as requirement.

1.4.2
~~~~~

2019-02-05

* Fix bug with TypeErrors when navigating a path in the json.
* Fix bug with missing author information in `AbstractRetrieval().authors`.
* Fix bug with missing title in `AbstractRetrieval().title`.

1.4.1
~~~~~

2019-01-24

* Add citation.
* Render reports class deprecated.
* Add str-dunder function for `CitationOverview()` class.

1.4
~~~

2019-01-17

* Use number of results from first search query rather than from separate query.
* Write empty file if search is empty.
* In `ScopusSearch().results`, add new fields: affilname, affiliation_city, affiliation_country, article_number, author_count, authkeywords, eIssn, description, fund_acr, fund_no, fund_sponsor, pubmed_id.
* In `ScopusSearch().results`, rename the following fields: names to author_names, authid to author_ids, afid to author_afids.
* In `ScopusSearch()`, add parameter view to specify the view and number of entries per query run.
* In `AbstractRetrieval().affiliation`, `AbstractRetrieval().authorgroup`, `AbstractRetrieval().authors`, `AbstractRetrieval().subject_areas`, `AffiliationSearch().affiliations`, `AuthorRetrieval().classificationgroup`, `AuthorRetrieval().journal_history`, `AuthorRetrieval().name_variants`, `AuthorSearch().authors`, `CitationOverview().authors` and `ScopusSearch().results` return `None` if the result list is empty, instead of an empty list.
* In `AbstractRetrieval().chemicals`, fix bug with missing values for cas-registry-number.
* Allow for the STANDARD view in `ScopusSearch()` to increase number of results per query.
* Refactor all classes internally for maintainability and readability.
* Register project with Code Climate.

1.3.1
~~~~~

2018-12-11

* Extend tests for `ScopusSearch()`.
* Fix bug with zero search results.
* Open cached search files in binary mode.
* Fix bug in `AbstractRetrieval()` with missing affiliation names in .authorgroup.

1.3
~~~

2018-12-04

* Fix bugs related to empty values or missing keys in `AuthorRetrieval()` (.affiliation_history, .get_coauthors(), .journal_history, .name_variant, referred_name, .subject_area) and in `ScopusSearch()` (.results).
* Introduce `Retrieval()` superclass for all retrieval and content classes.
* Refactor `Search()` superclass and all search classes internally.
* Implement scopus-specific exceptions.

1.2
~~~

2018-10-24

* In `AbstractRetrieval()`, users can now initate the class with DOI, Scopus ID, PII or Pubmed ID.  Parameter `EID` has hence been deprecatd in favor of the new parameter `identifier`.
* New properties for `AbstractRetrieval()`: `chemicals`, `contributor_group`, `funding`, `funding_text`, `isbn`, `sequencebank`.
* In `ContentAffiliationRetrieval(), return `None` rather than empty dict when no address is provided.
* In `AbstractRetrieval().confsponsor, return `None` when no confsponsor is provided.
* In `ScopusSearch().results`, return "afid" as part of namedtuple.
* Fix bug in `AbstractRetrieval().authorgroup` related to affiliation groups without authors.
* Fix bug in `AbstractRetrieval().affiliation` related to affiliations without Scopus ID.
* Fix bugs in `ScopusSearch().results` with duplicate authors, missing titles and unusual coverDates.
* `AuthorRetrieval()` warns User via UserWarnings if the supplied author ID is outdated or if it has been forwarded to a new profile.

1.1
~~~

2018-10-07

* Generate configuration file via separate method, not directly on import.

1.0
~~~

2018-10-06

* New class `AbstractRetrieval()` to replace `ScopusAbstract()`, with the following properties renamed: `affiliations`: `affiliation`, `bibtex`: `get_bibtex()`, `citationLanguage`: `language`, `citationType`: `srctype`, `citingby_url`: `citingby_link`, `html`: `get_html()`, `ris`: `get_ris()`, `latex`: `get_latex()`, `scopus_url`: `scopus_link`, `subjectAreas`: `subject_areas`.
* New class `AuthorRetrieval()` to replace `ScopusAuthor()`, with the following properties renamed: `author_id`: `identifier`, `coauthor_url`: `coauthor_link`, `current_affiliation`: `affiliation_current`, `firstname`: `given_name`, `hindex`: `h_index`, `lastname`: `surname`, `name`: `indexed_name`, `ncited_by`: `cited_by_count`, `ncoauthors`: `coauthor_count`, `ndocuments`: `document_count`, `publication_history`: `journal_history`.
* New class `ContentAffiliationRetrieval()` to replace `ScopusAffiliation()`, with  the following properties renamed: `api_url`: `self_link`, `nauthors`: `author_count`, `ndocuments`: `document_count`, `name`: `affiliation_name`, `org_url`: `org_URL`, `scopus_id`: `identifier`.
* Rewrite class `ScopusSearch()`: new property `results`, cache search results in json format with hex-ed filename and new method `get_eids()`, which replaces property `EIDS`.
* Use config.ini to store API Key (and if necessary, InstToken) as well as directories.
* Migration Guide to update code from scopus 0.x to 1.x

0.10
~~~~

2018-08-14

* In `ScopusAuthor()`, refactor generating abstracts lists into `get_journal_abstract()`.
* New properties for `ScopusAbstract()`: `citedby_url` and `scopus_url`.
* New property for `ScopusAffiliation()`: `state`.
* Correct property citedby_url from `ScopusAuthor()`.
* In all retrieval classes, remove underscore properties.

0.9
~~~

2018-07-23

* `SearchAffiliation()` to access the Affiliation Search API.
* Fix bug occuring with fields of length one in Author search.
* `ScopusAbstract()` returns abstract keywords if present.
* Refactor search classes to inherit from common auxiliary class.
* `ScopusAffiliation()` now accepts EID as well.

0.8
~~~

2018-06-18

* `ScopusAuthor()` now accepts EID as well.
* Fix bug occuring with non-existent journal abbreviations.
* `SearchAuthor()` class to access the Author Search API.
* Fix links in examples.

0.7
~~~

2018-04-27

* Use https instead of http wherever possible.
* Add support for InstToken Authentication via config file.
* Redirect DOI links to preferred resolver.

0.6
~~~

2017-12-12

* `CitationOverview()` class to access the Abstract Citation View.

0.5
~~~

2017-09-28

* New properties for `ScopusAuthor()`: `publication_history` and `subject_areas`.
* Update namespace in `ScopusAbstract()` to retrieve affiliation information.
* Complete affiliation information in `ScopusAbstract()`.

0.4.4
~~~~~

2017-09-06

* Fix bugs related to unicode on Python2.7 and installation on Windows.

0.4.3
~~~~~

2017-08-30

* Update `ScopusAbstract()` to reflect change in the API.

0.4.2
~~~~~

2017-08-23

* Fix bug with generating `my_scopus.py` on Python 3.
* In `ScopusAbstract()`, do not raise TypeErrors for information not present in current view.

0.4.1
~~~~~

2017-08-20

* Remove unwanted print() statement.

0.4
~~~

2017-08-20

* Use refresh_affiliation parameter in ScopusAuthor.
* Improve background service to load user's API key.
* Ask user for API key if it can't be found.
* New property for `ScopusAbstract()`: `citation_count`.

0.3.1
~~~~~

2017-08-09

* Update `ScopusAbstract()` to reflect change in the API.

0.3.0
~~~~~

2017-08-02

* Few bugfixes.
* New property for `ScopusAbstract()`: `abstract`.
* Change latex key in `ScopusAbstract().bibtex` to <FirstauthorYearTitlefirstwordTitlelastword>.
* Raise ValueError in `ScopusAbstract()` if .bibtex or .ris is called on an item whose aggregationType is not Journal.
* Improved docstrings for `ScopusAbstract()`.
* New properties for `ScopusAffiliation()`: `api_url`, `date_created`, `org_type`, `org_domain`, `org_url`.
* In ScopusAffiliation, the `affiliation_id` returns the Scopus Affiliation ID from the result rather than the used aff_id.

0.2.1
~~~~~

2017-07-21

* Some bugfixes.
* Examples for all classes.
* Fix typos in docstrings.
* In `ScopusAuthor()`, the `author_id` returns the Scopus Author ID from the result rather than the used author_id.

0.2.0
~~~~~

2017-04-05

* Several bugfixes.
* Docstrings for all classes according to numpy standard.
* Outsourced help functions in module `utils`.
* Import classes in `__init__` to allow top level import.
* New methods for `ScopusAuthor()`: `n_yearly_publications()`.
* New properties for `ScopusAbstract()`: `citationType`, `citationLanguage`, `refcount`, `references`, `subjectAreas`, `website`.
* Raising exception when download status is not ok.
* Python2.7 compatibility.

0.1.0
~~~~~

2016-02-22

* Initial release.
