pybliometrics 4.2__tar.gz → 4.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. pybliometrics-4.3/.github/dependabot.yml +8 -0
  2. {pybliometrics-4.2 → pybliometrics-4.3}/PKG-INFO +7 -6
  3. {pybliometrics-4.2 → pybliometrics-4.3}/README.rst +3 -3
  4. {pybliometrics-4.2 → pybliometrics-4.3}/docs/access/general.rst +5 -0
  5. {pybliometrics-4.2 → pybliometrics-4.3}/docs/index.rst +25 -7
  6. pybliometrics-4.3/docs/reference/sciencedirect/NonserialTitle.rst +53 -0
  7. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/sciencedirect/ScienceDirectSearch.rst +2 -2
  8. pybliometrics-4.3/docs/reference/sciencedirect/SerialTitle.rst +377 -0
  9. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/sciencedirect/SubjectClassifications.rst +6 -6
  10. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/scopus/AffiliationSearch.rst +5 -5
  11. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference.rst +4 -2
  12. {pybliometrics-4.2 → pybliometrics-4.3}/docs/requirements.txt +2 -2
  13. {pybliometrics-4.2 → pybliometrics-4.3}/meta/CHANGES.rst +21 -0
  14. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/exception.py +0 -31
  15. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/__init__.py +2 -0
  16. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/article_metadata.py +1 -5
  17. pybliometrics-4.3/pybliometrics/sciencedirect/nonserial_title.py +117 -0
  18. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/sciencedirect_search.py +1 -5
  19. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/subject_classifications.py +5 -4
  20. pybliometrics-4.3/pybliometrics/sciencedirect/tests/README.md +11 -0
  21. pybliometrics-4.3/pybliometrics/sciencedirect/tests/test_NonserialTitle.py +86 -0
  22. pybliometrics-4.3/pybliometrics/sciencedirect/tests/test_SerialTitle.py +116 -0
  23. pybliometrics-4.2/pybliometrics/sciencedirect/tests/test_ScienceDirectSubjectClassifications.py → pybliometrics-4.3/pybliometrics/sciencedirect/tests/test_SubjectClassifications.py +9 -8
  24. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/affiliation_retrieval.py +2 -1
  25. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/affiliation_search.py +3 -5
  26. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/scopus_search.py +1 -4
  27. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/serial_title.py +1 -0
  28. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/README.md +0 -1
  29. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/test_AbstractRetrieval.py +1 -1
  30. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/test_AffiliationSearch.py +2 -3
  31. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/test_AuthorRetrieval.py +1 -4
  32. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/test_AuthorSearch.py +2 -2
  33. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/test_CitationOverview.py +2 -2
  34. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/test_ScopusSearch.py +5 -5
  35. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/test_SerialTitle.py +15 -13
  36. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/superclasses/base.py +3 -3
  37. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/superclasses/search.py +3 -6
  38. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/utils/constants.py +42 -27
  39. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics.egg-info/PKG-INFO +7 -6
  40. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics.egg-info/SOURCES.txt +8 -1
  41. {pybliometrics-4.2 → pybliometrics-4.3}/pyproject.toml +1 -1
  42. {pybliometrics-4.2 → pybliometrics-4.3}/.github/ISSUE_TEMPLATE/bug.md +0 -0
  43. {pybliometrics-4.2 → pybliometrics-4.3}/.github/ISSUE_TEMPLATE/feature.md +0 -0
  44. {pybliometrics-4.2 → pybliometrics-4.3}/.github/ISSUE_TEMPLATE/question.md +0 -0
  45. {pybliometrics-4.2 → pybliometrics-4.3}/.gitignore +0 -0
  46. {pybliometrics-4.2 → pybliometrics-4.3}/.readthedocs.yaml +0 -0
  47. {pybliometrics-4.2 → pybliometrics-4.3}/CITATION.cff +0 -0
  48. {pybliometrics-4.2 → pybliometrics-4.3}/CONTRIBUTING.rst +0 -0
  49. {pybliometrics-4.2 → pybliometrics-4.3}/LICENSE +0 -0
  50. {pybliometrics-4.2 → pybliometrics-4.3}/docs/Makefile +0 -0
  51. {pybliometrics-4.2 → pybliometrics-4.3}/docs/_static/custom.css.bak +0 -0
  52. {pybliometrics-4.2 → pybliometrics-4.3}/docs/access/errors.rst +0 -0
  53. {pybliometrics-4.2 → pybliometrics-4.3}/docs/access/quotas.rst +0 -0
  54. {pybliometrics-4.2 → pybliometrics-4.3}/docs/access.rst +0 -0
  55. {pybliometrics-4.2 → pybliometrics-4.3}/docs/authors.rst +0 -0
  56. {pybliometrics-4.2 → pybliometrics-4.3}/docs/changelog.rst +0 -0
  57. {pybliometrics-4.2 → pybliometrics-4.3}/docs/conf.py +0 -0
  58. {pybliometrics-4.2 → pybliometrics-4.3}/docs/configuration.rst +0 -0
  59. {pybliometrics-4.2 → pybliometrics-4.3}/docs/contributing.rst +0 -0
  60. {pybliometrics-4.2 → pybliometrics-4.3}/docs/installation.rst +0 -0
  61. {pybliometrics-4.2 → pybliometrics-4.3}/docs/make.bat +0 -0
  62. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/sciencedirect/ArticleEntitlement.rst +0 -0
  63. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/sciencedirect/ArticleMetadata.rst +0 -0
  64. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/sciencedirect/ArticleRetrieval.rst +0 -0
  65. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/sciencedirect/ObjectMetadata.rst +0 -0
  66. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/sciencedirect/ObjectRetrieval.rst +0 -0
  67. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/sciencedirect/figures/gr12.jpg +0 -0
  68. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/scopus/AbstractRetrieval.rst +0 -0
  69. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/scopus/AffiliationRetrieval.rst +0 -0
  70. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/scopus/AuthorRetrieval.rst +0 -0
  71. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/scopus/AuthorSearch.rst +0 -0
  72. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/scopus/CitationOverview.rst +0 -0
  73. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/scopus/PlumXMetrics.rst +0 -0
  74. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/scopus/ScopusSearch.rst +0 -0
  75. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/scopus/SerialSearch.rst +0 -0
  76. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/scopus/SerialTitle.rst +0 -0
  77. {pybliometrics-4.2 → pybliometrics-4.3}/docs/reference/scopus/SubjectClassifications.rst +0 -0
  78. {pybliometrics-4.2 → pybliometrics-4.3}/docs/tips/affiliations.rst +0 -0
  79. {pybliometrics-4.2 → pybliometrics-4.3}/docs/tips/configuration.rst +0 -0
  80. {pybliometrics-4.2 → pybliometrics-4.3}/docs/tips/database.rst +0 -0
  81. {pybliometrics-4.2 → pybliometrics-4.3}/docs/tips/migration1.rst +0 -0
  82. {pybliometrics-4.2 → pybliometrics-4.3}/docs/tips/migration3.rst +0 -0
  83. {pybliometrics-4.2 → pybliometrics-4.3}/docs/tips/rename.rst +0 -0
  84. {pybliometrics-4.2 → pybliometrics-4.3}/docs/tips/support.rst +0 -0
  85. {pybliometrics-4.2 → pybliometrics-4.3}/docs/tips.rst +0 -0
  86. {pybliometrics-4.2 → pybliometrics-4.3}/meta/1-s2.0-S2352711019300573-main.pdf +0 -0
  87. {pybliometrics-4.2 → pybliometrics-4.3}/meta/AUTHORS.rst +0 -0
  88. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/__init__.py +0 -0
  89. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/article_entitlement.py +0 -0
  90. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/article_retrieval.py +0 -0
  91. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/object_metadata.py +0 -0
  92. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/object_retrieval.py +0 -0
  93. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/tests/__init__.py +0 -0
  94. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/tests/test_ArticleEntitlement.py +0 -0
  95. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/tests/test_ArticleMetadata.py +0 -0
  96. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/tests/test_ArticleRetrieval.py +0 -0
  97. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/tests/test_ObjectMetadata.py +0 -0
  98. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/tests/test_ObjectRetrieval.py +0 -0
  99. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/sciencedirect/tests/test_ScienceDirectSearch.py +0 -0
  100. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/__init__.py +0 -0
  101. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/abstract_citation.py +0 -0
  102. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/abstract_retrieval.py +0 -0
  103. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/author_retrieval.py +0 -0
  104. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/author_search.py +0 -0
  105. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/plumx_metrics.py +0 -0
  106. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/serial_search.py +0 -0
  107. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/subject_classifications.py +0 -0
  108. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/__init__.py +0 -0
  109. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/test_AffiliationRetrieval.py +0 -0
  110. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/test_PlumXMetrics.py +0 -0
  111. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/test_SerialSearch.py +0 -0
  112. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/scopus/tests/test_SubjectClassifications.py +0 -0
  113. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/superclasses/__init__.py +0 -0
  114. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/superclasses/retrieval.py +0 -0
  115. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/utils/__init__.py +0 -0
  116. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/utils/checks.py +0 -0
  117. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/utils/create_config.py +0 -0
  118. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/utils/get_content.py +0 -0
  119. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/utils/parse_content.py +0 -0
  120. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/utils/startup.py +0 -0
  121. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/utils/tests/__init__.py +0 -0
  122. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics/utils/tests/test_startup.py +0 -0
  123. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics.egg-info/dependency_links.txt +0 -0
  124. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics.egg-info/requires.txt +0 -0
  125. {pybliometrics-4.2 → pybliometrics-4.3}/pybliometrics.egg-info/top_level.txt +0 -0
  126. {pybliometrics-4.2 → pybliometrics-4.3}/setup.cfg +0 -0
@@ -0,0 +1,8 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "pip"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "monthly"
7
+ allow:
8
+ - dependency-type: "all"
@@ -1,7 +1,7 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: pybliometrics
3
- Version: 4.2
4
- Summary: Python-based API-Wrapper to access Scopus
3
+ Version: 4.3
4
+ Summary: Python-based API-Wrapper to access Scopus and ScienceDirect
5
5
  Author-email: "'John Kitchin and Michael E. Rose" <Michael.Ernst.Rose@gmail.com>
6
6
  Maintainer-email: "Michael E. Rose" <Michael.Ernst.Rose@gmail.com>
7
7
  License: MIT
@@ -30,11 +30,12 @@ License-File: LICENSE
30
30
  Requires-Dist: requests
31
31
  Requires-Dist: tqdm
32
32
  Requires-Dist: urllib3
33
+ Dynamic: license-file
33
34
 
34
35
  pybliometrics
35
36
  =============
36
37
 
37
- Enables large-scale access to Elsevier's Scopus API from Python.
38
+ Enables large-scale access to Elsevier's Scopus and ScienceDirect APIs from Python.
38
39
 
39
40
  Documentation: https://pybliometrics.readthedocs.io
40
41
 
@@ -58,8 +59,8 @@ Development: https://github.com/pybliometrics-dev/pybliometrics
58
59
  .. image:: https://api.codeclimate.com/v1/badges/a4d7edd206a1252dfcfe/maintainability
59
60
  :target: https://codeclimate.com/github/pybliometrics-dev/pybliometrics/maintainability
60
61
 
61
- Example
62
- =======
62
+ Example (for Scopus)
63
+ ====================
63
64
  .. example-begin
64
65
  .. code:: python
65
66
 
@@ -1,7 +1,7 @@
1
1
  pybliometrics
2
2
  =============
3
3
 
4
- Enables large-scale access to Elsevier's Scopus API from Python.
4
+ Enables large-scale access to Elsevier's Scopus and ScienceDirect APIs from Python.
5
5
 
6
6
  Documentation: https://pybliometrics.readthedocs.io
7
7
 
@@ -25,8 +25,8 @@ Development: https://github.com/pybliometrics-dev/pybliometrics
25
25
  .. image:: https://api.codeclimate.com/v1/badges/a4d7edd206a1252dfcfe/maintainability
26
26
  :target: https://codeclimate.com/github/pybliometrics-dev/pybliometrics/maintainability
27
27
 
28
- Example
29
- =======
28
+ Example (for Scopus)
29
+ ====================
30
30
  .. example-begin
31
31
  .. code:: python
32
32
 
@@ -16,3 +16,8 @@ Option 2 might require you to additionally set a proxy. You can do so in the :d
16
16
  Option 3 is rare. An InstToken is provided directly by Scopus/Elsevier to allow remote access in the absence of a VPN. It is coupled directly to a key. If you have an InstToken, please provide it during the setup when `pybliometrics` prompts you for it. Alternatively, add it to the :doc:`configuration file <../configuration>` manually. Remember to remove them (or comment out) when you're in your VPN again.
17
17
 
18
18
  There are only three Scopus APIs that you can access without your institution subscribing to it: The Abstract Retrieval API through :doc:`AbstractRetrieval(..., view=META) <../reference/scopus/ScopusSearch>`, the Scopus Search API through doc:`ScopusSearch(..., subscriber=False) <../reference/scopus/ScopusSearch>`, and the Subject Classifications API doc:`SubjectClassification() <../reference/scopus/SubjectClassification>` without special parameters.
19
+
20
+ How to access ScienceDirect
21
+ ---------------------------
22
+
23
+ The access to ScienceDirect is similar to the Scopus API, yet totally independent. Institutions may subscribe to the ScienceDirect API but not to the Scopus API, and vice versa.
@@ -1,8 +1,8 @@
1
- ########################################################
2
- pybliometrics: Python-based API-Wrapper to access Scopus
3
- ########################################################
1
+ ##########################################################################
2
+ pybliometrics: Python-based API-Wrapper to access Scopus and ScienceDirect
3
+ ##########################################################################
4
4
 
5
- pybliometrics is an easy to use Python library to pull, cache and extract data from the Scopus database. It provides one class per `API Access Point <https://dev.elsevier.com/api_docs.html>`_:
5
+ pybliometrics is an easy to use Python library to pull, cache and extract data from the Scopus database and its sister databases like ScienceDirect. It provides one class per `API Access Point <https://dev.elsevier.com/api_docs.html>`_:
6
6
 
7
7
  .. include:: ../README.rst
8
8
  :start-after: example-begin
@@ -10,9 +10,9 @@ pybliometrics is an easy to use Python library to pull, cache and extract data f
10
10
 
11
11
  .. include:: installation.rst
12
12
 
13
- ========================================
14
- Classes to interact with the Scopus APIs
15
- ========================================
13
+ ==========================
14
+ Classes for the Scopus API
15
+ ==========================
16
16
 
17
17
  .. currentmodule:: pybliometrics.scopus
18
18
 
@@ -30,6 +30,24 @@ Classes to interact with the Scopus APIs
30
30
  SerialTitle
31
31
  SubjectClassifications
32
32
 
33
+ =================================
34
+ Classes for the ScienceDirect API
35
+ =================================
36
+
37
+ .. currentmodule:: pybliometrics.sciencedirect
38
+
39
+ .. autosummary::
40
+
41
+ ArticleEntitlement
42
+ ArticleMetadata
43
+ ArticleRetrieval
44
+ NonserialTitle
45
+ ObjectMetadata
46
+ ObjectRetrieval
47
+ ScienceDirectSearch
48
+ SerialTitle
49
+ SubjectClassifications
50
+
33
51
  ========
34
52
  Citation
35
53
  ========
@@ -0,0 +1,53 @@
1
+ pybliometrics.sciencedirect.NonserialTitle
2
+ ==========================================
3
+
4
+ `NonserialTitle()` implements the `ScienceDirect Nonserial Title API <https://dev.elsevier.com/documentation/NonSerialTitleAPI.wadl>`_.
5
+ It provides metadata for non-serial publications (books) registered in ScienceDirect, including publisher details, identifiers, and links.
6
+
7
+ .. currentmodule:: pybliometrics.sciencedirect
8
+ .. contents:: Table of Contents
9
+ :local:
10
+
11
+ Documentation
12
+ -------------
13
+
14
+ .. autoclass:: NonserialTitle
15
+ :members:
16
+ :inherited-members:
17
+
18
+ Examples
19
+ --------
20
+
21
+ You initialize the class with an ISBN (with or without hyphens):
22
+
23
+ .. code-block:: python
24
+
25
+ >>> from pybliometrics.sciencedirect import NonserialTitle, init
26
+ >>> init()
27
+ >>> book = NonserialTitle("978-0-12-823751-9")
28
+
29
+ You can obtain basic information just by accessing the properties:
30
+
31
+ .. code-block:: python
32
+
33
+ >>> book.title
34
+ 'The Migration Ecology of Birds'
35
+ >>> book.publisher_name
36
+ 'Academic Press'
37
+ >>> book.isbn
38
+ '9780128237519'
39
+ >>> book.aggregation_type
40
+ 'ebook'
41
+ >>> book.authors
42
+ 'Ian Newton'
43
+ >>> book.edition
44
+ 'Second Edition'
45
+ >>> book.self_link
46
+ 'https://api.elsevier.com/content/nonserial/title/isbn/9780128237519'
47
+ >>> book.link_homepage
48
+ 'https://www.sciencedirect.com/science/book/9780128237519'
49
+ >>> book.link_coverimage
50
+ 'https://api.elsevier.com/content/nonserial/title/isbn/9780128237519?view=coverimage'
51
+
52
+
53
+ Downloaded results are cached to expedite subsequent analyses. This information may become outdated. To refresh the cached results if they exist, set `refresh=True`, or provide an integer that will be interpreted as maximum allowed number of days since the last modification date. For example, if you want to refresh all cached results older than 100 days, set `refresh=100`. Use `ab.get_cache_file_mdate()` to obtain the date of last modification, and `ab.get_cache_file_age()` to determine the number of days since the last modification.
@@ -1,5 +1,5 @@
1
- pybliometrics.scopus.ScienceDirectSearch
2
- ==========================================
1
+ pybliometrics.sciencedirect.ScienceDirectSearch
2
+ =================================================
3
3
 
4
4
  `ScopusSearch()` implements the `ScienceDirect Search API <https://nonprod-devportal.elsevier.com/documentation/ScienceDirectSearchAPI.wadl>`_. It executes a query to search for documents and retrieves the resulting records.
5
5
  Any query that works in the `Advanced Document Search on sciencedirect.com <https://www.sciencedirect.com/search/entry>`_ will work.
@@ -0,0 +1,377 @@
1
+ pybliometrics.sciencedirect.SerialTitle
2
+ =======================================
3
+
4
+ `SerialTitle()` implements the `Serial Title API <https://dev.elsevier.com/documentation/SerialTitleAPI.wadl>`_. It offers basic information on registered serials (also known as sources), including publisher details, identifiers, and various metrics.
5
+ Note that this class accesses the same API endpoint as the :class:`pybliometrics.scopus.SerialTitle` class.
6
+
7
+ .. currentmodule:: pybliometrics.sciencedirect
8
+ .. contents:: Table of Contents
9
+ :local:
10
+
11
+ Documentation
12
+ -------------
13
+
14
+ .. autoclass:: SerialTitle
15
+ :members:
16
+ :inherited-members:
17
+ :no-index:
18
+
19
+ Examples
20
+ --------
21
+
22
+ You initialize the class with an ISSN or an E-ISSN (works with and without hyphen, but leading zeros are mandatory):
23
+
24
+ .. code-block:: python
25
+
26
+ >>> import pybliometrics
27
+ >>> from pybliometrics.sciencedirect import SerialTitle, init
28
+ >>> init()
29
+ >>> source = SerialTitle("03781119")
30
+
31
+ You can obtain basic information just by printing the object:
32
+
33
+ .. code-block:: python
34
+
35
+ >>> print(source)
36
+ 'Gene', journal published by 'Elsevier B.V.', is active in Genetics
37
+ Metrics as of 2025-05-18:
38
+ SJR: year value
39
+ 2023 0.725
40
+ SNIP: year value
41
+ 2023 0.765
42
+ ISSN: 0378-1119, E-ISSN: 1879-0038, Scopus ID: 15636
43
+
44
+ The object has a number of attributes but no methods. For example, information regarding the source itself:
45
+
46
+ .. code-block:: python
47
+
48
+ >>> source.title
49
+ 'Gene'
50
+ >>> source.publisher
51
+ 'Elsevier B.V.'
52
+ >>> source.issn
53
+ '0378-1119'
54
+ >>> source.eissn
55
+ '1879-0038'
56
+ >>> source.source_id
57
+ 15636
58
+
59
+
60
+ Crucially, it provides three metrics: `CiteScore <https://service.elsevier.com/app/answers/detail/a_id/30562/supporthub/scopus/>`_, `SCImago Journal Rank indicator <https://www.scimagojr.com/journalrank.php>`_), and `Source Normalized Impact Factor (SNIP) <https://blog.scopus.com/posts/journal-metrics-in-scopus-source-normalized-impact-per-paper-snip>`_. This information is presented in lists of two-element tuples, with the first element indicating the year of metric evaluation.
61
+
62
+ .. code-block:: python
63
+
64
+ >>> source.citescoreyearinfolist
65
+ [Citescoreinfolist(year=2023, citescore=6.1),
66
+ Citescoreinfolist(year=2024, citescore=5.1)]
67
+ >>> source.sjrlist
68
+ [(2023, 0.725)]
69
+ >>> source.sniplist
70
+ [(2023, 0.765)]
71
+
72
+ The `citescoreyearinfolist` property provides detailed information for all available years when `view="CITESCORE"` is used. It includes the status of the metric, the document count and citation count (of the previous 4 years), the share of documents actually cited, and the rank and percentile for each related ASJC subject:
73
+
74
+ .. code-block:: python
75
+
76
+ >>> import pandas as pd
77
+ >>> source_full = SerialTitle("00368075", view="CITESCORE")
78
+ >>> info = pd.DataFrame(source_full.citescoreyearinfolist)
79
+ >>> print(info)
80
+
81
+
82
+ .. raw:: html
83
+
84
+ <div style="overflow-x:auto; border:1px solid #ddd; padding:10px;">
85
+ <style scoped>
86
+ .dataframe tbody tr th:only-of-type {
87
+ vertical-align: middle;
88
+ }
89
+
90
+ .dataframe tbody tr th {
91
+ vertical-align: top;
92
+ }
93
+
94
+ .dataframe thead th {
95
+ text-align: right;
96
+ }
97
+ .dataframe{
98
+ font-size: 12px;
99
+ }
100
+ </style>
101
+ <table border="1" class="dataframe">
102
+ <thead>
103
+ <tr style="text-align: right;">
104
+ <th></th>
105
+ <th>year</th>
106
+ <th>citescore</th>
107
+ <th>status</th>
108
+ <th>documentcount</th>
109
+ <th>citationcount</th>
110
+ <th>percentcited</th>
111
+ <th>rank</th>
112
+ </tr>
113
+ </thead>
114
+ <tbody>
115
+ <tr>
116
+ <th>0</th>
117
+ <td>2024</td>
118
+ <td>5.1</td>
119
+ <td>In-Progress</td>
120
+ <td>2616</td>
121
+ <td>13257</td>
122
+ <td>79</td>
123
+ <td>[(1311, 153, 56)]</td>
124
+ </tr>
125
+ <tr>
126
+ <th>1</th>
127
+ <td>2023</td>
128
+ <td>6.1</td>
129
+ <td>Complete</td>
130
+ <td>2487</td>
131
+ <td>15073</td>
132
+ <td>81</td>
133
+ <td>[(1311, 129, 62)]</td>
134
+ </tr>
135
+ <tr>
136
+ <th>2</th>
137
+ <td>2022</td>
138
+ <td>7.0</td>
139
+ <td>Complete</td>
140
+ <td>2653</td>
141
+ <td>18487</td>
142
+ <td>84</td>
143
+ <td>[(1311, 96, 70)]</td>
144
+ </tr>
145
+ <tr>
146
+ <th>3</th>
147
+ <td>2021</td>
148
+ <td>7.0</td>
149
+ <td>Complete</td>
150
+ <td>3001</td>
151
+ <td>21031</td>
152
+ <td>86</td>
153
+ <td>[(1311, 88, 73)]</td>
154
+ </tr>
155
+ <tr>
156
+ <th>4</th>
157
+ <td>2020</td>
158
+ <td>5.6</td>
159
+ <td>Complete</td>
160
+ <td>3034</td>
161
+ <td>16950</td>
162
+ <td>83</td>
163
+ <td>[(1311, 110, 66)]</td>
164
+ </tr>
165
+ <tr>
166
+ <th>5</th>
167
+ <td>2019</td>
168
+ <td>4.8</td>
169
+ <td>Complete</td>
170
+ <td>3183</td>
171
+ <td>15368</td>
172
+ <td>79</td>
173
+ <td>[(1311, 128, 60)]</td>
174
+ </tr>
175
+ <tr>
176
+ <th>6</th>
177
+ <td>2018</td>
178
+ <td>4.4</td>
179
+ <td>Complete</td>
180
+ <td>3156</td>
181
+ <td>13862</td>
182
+ <td>74</td>
183
+ <td>[(1311, 141, 56)]</td>
184
+ </tr>
185
+ <tr>
186
+ <th>7</th>
187
+ <td>2017</td>
188
+ <td>5.0</td>
189
+ <td>Complete</td>
190
+ <td>3055</td>
191
+ <td>15223</td>
192
+ <td>80</td>
193
+ <td>[(1311, 119, 62)]</td>
194
+ </tr>
195
+ <tr>
196
+ <th>8</th>
197
+ <td>2016</td>
198
+ <td>4.8</td>
199
+ <td>Complete</td>
200
+ <td>3559</td>
201
+ <td>17163</td>
202
+ <td>80</td>
203
+ <td>[(1311, 113, 63)]</td>
204
+ </tr>
205
+ <tr>
206
+ <th>9</th>
207
+ <td>2015</td>
208
+ <td>4.3</td>
209
+ <td>Complete</td>
210
+ <td>3660</td>
211
+ <td>15710</td>
212
+ <td>78</td>
213
+ <td>[(2700, 1074, 67), (1311, 134, 55)]</td>
214
+ </tr>
215
+ <tr>
216
+ <th>10</th>
217
+ <td>2014</td>
218
+ <td>3.1</td>
219
+ <td>Complete</td>
220
+ <td>3116</td>
221
+ <td>9540</td>
222
+ <td>70</td>
223
+ <td>[(2700, 1412, 56), (1311, 186, 37)]</td>
224
+ </tr>
225
+ <tr>
226
+ <th>11</th>
227
+ <td>2013</td>
228
+ <td>2.2</td>
229
+ <td>Complete</td>
230
+ <td>2336</td>
231
+ <td>5196</td>
232
+ <td>57</td>
233
+ <td>[(2700, 1706, 47), (1311, 209, 28)]</td>
234
+ </tr>
235
+ <tr>
236
+ <th>12</th>
237
+ <td>2012</td>
238
+ <td>2.6</td>
239
+ <td>Complete</td>
240
+ <td>1517</td>
241
+ <td>3979</td>
242
+ <td>53</td>
243
+ <td>[(2700, 1494, 53), (1311, 189, 34)]</td>
244
+ </tr>
245
+ <tr>
246
+ <th>13</th>
247
+ <td>2011</td>
248
+ <td>4.4</td>
249
+ <td>Complete</td>
250
+ <td>934</td>
251
+ <td>4120</td>
252
+ <td>76</td>
253
+ <td>[(2700, 861, 72), (1311, 100, 64)]</td>
254
+ </tr>
255
+ </tbody>
256
+ </table>
257
+ <p>14 rows × 7 columns</p>
258
+ </div>
259
+
260
+
261
+ The `yearly_data` time series includes the number of documents published in a given year. It contains the number of documents published in this year, the share of review articles thereof, the number and share of not-cited documents, and the number of distinct documents that were cited in this year.
262
+
263
+
264
+ .. code-block:: python
265
+
266
+ >>> source.yearly_data[-1]
267
+ Yearlydata(year=2025, publicationcount=403, revpercent=14.14, zerocitessce=335, zerocitespercentsce=83.12655086848635, citecountsce=9307)
268
+ >>> yearly_data = pd.DataFrame(source.yearly_data)
269
+ >>> yearly_data.head()
270
+
271
+ .. raw:: html
272
+
273
+ <div style="overflow-x:auto; border:1px solid #ddd; padding:10px;">
274
+ <style scoped>
275
+ .dataframe tbody tr th:only-of-type {
276
+ vertical-align: middle;
277
+ }
278
+
279
+ .dataframe tbody tr th {
280
+ vertical-align: top;
281
+ }
282
+
283
+ .dataframe thead th {
284
+ text-align: right;
285
+ }
286
+ .dataframe{
287
+ font-size: 12px;
288
+ }
289
+ </style>
290
+ <table border="1" class="dataframe">
291
+ <thead>
292
+ <tr style="text-align: right;">
293
+ <th></th>
294
+ <th>year</th>
295
+ <th>publicationcount</th>
296
+ <th>revpercent</th>
297
+ <th>zerocitessce</th>
298
+ <th>zerocitespercentsce</th>
299
+ <th>citecountsce</th>
300
+ </tr>
301
+ </thead>
302
+ <tbody>
303
+ <tr>
304
+ <th>0</th>
305
+ <td>1996</td>
306
+ <td>762</td>
307
+ <td>0.00</td>
308
+ <td>18</td>
309
+ <td>2.362205</td>
310
+ <td>21298</td>
311
+ </tr>
312
+ <tr>
313
+ <th>1</th>
314
+ <td>1997</td>
315
+ <td>853</td>
316
+ <td>0.23</td>
317
+ <td>21</td>
318
+ <td>2.461899</td>
319
+ <td>20631</td>
320
+ </tr>
321
+ <tr>
322
+ <th>2</th>
323
+ <td>1998</td>
324
+ <td>631</td>
325
+ <td>0.16</td>
326
+ <td>28</td>
327
+ <td>4.437401</td>
328
+ <td>21748</td>
329
+ </tr>
330
+ <tr>
331
+ <th>3</th>
332
+ <td>1999</td>
333
+ <td>505</td>
334
+ <td>3.37</td>
335
+ <td>5</td>
336
+ <td>0.990099</td>
337
+ <td>22319</td>
338
+ </tr>
339
+ <tr>
340
+ <th>4</th>
341
+ <td>2000</td>
342
+ <td>617</td>
343
+ <td>4.38</td>
344
+ <td>4</td>
345
+ <td>0.648298</td>
346
+ <td>22038</td>
347
+ </tr>
348
+ </tbody>
349
+ </table>
350
+ <p>5 rows × 6 columns</p>
351
+ </div>
352
+
353
+
354
+ By default, `SerialTitle()` retrieves only the most recent metrics, although yearly data is available from 1996 onwards. If you provide a year or a range of years via the optional parameter `years`, `SerialTitle()` will retrieve information for these years (except for the CiteScore):
355
+
356
+ .. code-block:: python
357
+
358
+ >>> source_y = SerialTitle("2352-7110", years="2017-2019")
359
+ >>> source_y.citescoreyearinfolist
360
+ [Citescoreinfolist(year=2023, citescore=5.5),
361
+ Citescoreinfolist(year=2024, citescore=4.2)]
362
+ >>> source_y.sjrlist
363
+ [(2017, 3.724), (2018, 4.539), (2019, 0.445)]
364
+ >>> source_y.sniplist
365
+ [(2017, 5.287), (2018, 5.153), (2019, 1.025)]
366
+
367
+
368
+ Fields associated with the source are stored as a list of `namedtuples <https://docs.python.org/3/library/collections.html#collections.namedtuple>`_:
369
+
370
+ .. code-block:: python
371
+
372
+ >>> source.subject_area
373
+ [Subjectarea(area='Genetics', abbreviation='BIOC', code=1311)]
374
+
375
+ Additionally, there is information on Open Access status, which, however, is often empty.
376
+
377
+ Downloaded results are cached to expedite subsequent analyses. This information may become outdated. To refresh the cached results if they exist, set `refresh=True`, or provide an integer that will be interpreted as maximum allowed number of days since the last modification date. For example, if you want to refresh all cached results older than 100 days, set `refresh=100`. Use `ab.get_cache_file_mdate()` to obtain the date of last modification, and `ab.get_cache_file_age()` to determine the number of days since the last modification.
@@ -1,7 +1,7 @@
1
- pybliometrics.scopus.ScDirSubjectClassifications
2
- ================================================
1
+ pybliometrics.sciencedirect.SubjectClassifications
2
+ ==================================================
3
3
 
4
- `ScDirSubjectClassifications()` implements the `ScienceDirect Subject Classifications API <https://dev.elsevier.com/documentation/SubjectClassificationsAPI.wadl>`_. It enables retrieval-like queries for All Science Journal Classification (ASJC) subjects/areas.
4
+ `SubjectClassifications()` implements the `ScienceDirect Subject Classifications API <https://dev.elsevier.com/documentation/SubjectClassificationsAPI.wadl>`_. It enables retrieval-like queries for All Science Journal Classification (ASJC) subjects/areas.
5
5
 
6
6
  .. currentmodule:: pybliometrics.sciencedirect
7
7
  .. contents:: Table of Contents
@@ -10,7 +10,7 @@ pybliometrics.scopus.ScDirSubjectClassifications
10
10
  Documentation
11
11
  -------------
12
12
 
13
- .. autoclass:: ScDirSubjectClassifications
13
+ .. autoclass:: SubjectClassifications
14
14
  :members:
15
15
  :inherited-members:
16
16
 
@@ -21,10 +21,10 @@ You initialize the class with a query `dict`. It contains the "description" (ge
21
21
 
22
22
  .. code-block:: python
23
23
 
24
- >>> from pybliometrics.sciencedirect import ScDirSubjectClassifications, init
24
+ >>> from pybliometrics.sciencedirect import SubjectClassifications, init
25
25
  >>> init()
26
26
  >>> # Retrieve subject areas with 'Chemistry' in the description
27
- >>> sc = ScDirSubjectClassifications({'description': 'Chemistry'}, refresh=30)
27
+ >>> sc = SubjectClassifications({'description': 'Chemistry'}, refresh=30)
28
28
  >>> # Access the results
29
29
  >>> sc.results
30
30
  [Subject(code='18', description='Biochemistry, Genetics and Molecular Biology', detail='Biochemistry, Genetics and Molecular Biology', abbrev='biochemgenmolbiol'),
@@ -47,11 +47,11 @@ The primary function of the class is to provide a list of `namedtuples <https://
47
47
  [Affiliation(eid='10-s2.0-60105007',
48
48
  name='Max Planck Institute for Innovation and Competition',
49
49
  variant='Max Planck Institute For Innovation And Competition',
50
- documents=581, city='Munich', country='Germany', parent=None),
50
+ documents=581, city='Munich', country='Germany'),
51
51
  Affiliation(eid='10-s2.0-117495104',
52
52
  name='Max Planck Insitute for Innovation and Com-petition in Munich',
53
53
  variant='Max-plank Institut',
54
- documents=4, city='Munich', country='Germany', parent=None)]
54
+ documents=4, city='Munich', country='Germany')]
55
55
 
56
56
 
57
57
 
@@ -70,9 +70,9 @@ Working with namedtuples is straightforward: using `pandas <https://pandas.pydat
70
70
  0 Max Planck Institute For Innovation And Compet... 581 Munich
71
71
  1 Max-plank Institut 4 Munich
72
72
 
73
- country parent
74
- 0 Germany None
75
- 1 Germany None
73
+ country
74
+ 0 Germany
75
+ 1 Germany
76
76
 
77
77
 
78
78
  Comparing the EIDs, notice that the first affiliation's EID starts with 10-s2.0-6, while the other begins with 10-s2.0-1. The latter denotes a non-org affiliation type.
@@ -55,10 +55,12 @@ ScienceDirect
55
55
  .. toctree::
56
56
  :maxdepth: 1
57
57
 
58
- reference/sciencedirect/ArticleRetrieval.rst
59
- reference/sciencedirect/ObjectRetrieval.rst
60
58
  reference/sciencedirect/ArticleEntitlement.rst
59
+ reference/sciencedirect/ArticleRetrieval.rst
60
+ reference/sciencedirect/NonserialTitle.rst
61
61
  reference/sciencedirect/ObjectMetadata.rst
62
+ reference/sciencedirect/ObjectRetrieval.rst
63
+ reference/sciencedirect/SerialTitle.rst
62
64
 
63
65
  One other Retrieval API, the Article Hosting Permission API, is not implemented yet.
64
66
 
@@ -1,5 +1,5 @@
1
- sphinx==7.2.6
2
- sphinx_autodoc_typehints==1.24.0
1
+ sphinx==8.2.3
2
+ sphinx_autodoc_typehints==3.1.0
3
3
  sphinx_autodoc_defaultargs==0.1.2
4
4
  sphinx_copybutton==0.5.2
5
5
  -e .
@@ -4,6 +4,27 @@ Change Log
4
4
 
5
5
  .. toctree::
6
6
 
7
+ 4.3
8
+ ~~~
9
+
10
+ 2025-06-06
11
+
12
+ * Add new class `sciencedirect.SerialTitle()`.
13
+ * Add new class `sciencedirect.NonSerialTitle()`.
14
+ * Rename class `sciencedirect.ScDirSubjectClassifications()` to `sciencedirect.SubjectClassifications()`.
15
+ * Remove deprecated exceptions Scopus500Error, Scopus502Error, Scopus504Error in favor of ScopusServerError.
16
+ * In `scopus.AffiliationRetrieval().name_variants`, set "doc_count" to None instead of 0 if no number is returned.
17
+ * In `scopus.AffiliationSearch().affiliations`, remove field "parent" as this is always None.
18
+
19
+ 4.2.1
20
+ -----
21
+
22
+ 2025-04-09
23
+
24
+ * Update default values for "count" parameter to reflect changes in the API.
25
+ * Fix bug related to deprecated "size" parameter.
26
+ * Update documentation.
27
+
7
28
  4.2
8
29
  ---
9
30