pybliometrics.sciencedirect.SerialTitleISSN

SerialTitleISSN() implements the issn endpoint of the Serial Title API. It offers basic information on registered serials (also known as sources), including publisher details, identifiers, and various metrics.

Documentation

class pybliometrics.sciencedirect.SerialTitleISSN(issn, refresh=False, view='ENHANCED', years=None, **kwds)[source]

Interaction with the ISSN endpoint of the Serial Title API. Class retrieves data from both Scopus and ScienceDirect.

Parameters:
  • issn (int | str) – The ISSN or the E-ISSN of the source.

  • refresh (bool | int, optional) – 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.

    Default: False

  • view (str, optional) – The view of the file that should be downloaded. Allowed values: STANDARD, ENHANCED, CITESCORE. For details see https://dev.elsevier.com/sc_serial_title_views.html.

    Default: 'ENHANCED'

  • years (str | None, optional) – A string specifying a year or range of years (combining two years with a hyphen) for which yearly metric data (SJR, SNIP, yearly-data) should be looked up for. If None, only the most recent metric data values are provided. Note: If not None, refresh will always be True.

    Default: None

  • kwds (str) – Keywords passed on as query parameters. Must contain fields and values mentioned in the API specification at https://dev.elsevier.com/documentation/SerialTitleAPI.wadl.

Raises:

ValueError – If any of the parameters refresh or view is not one of the allowed values.

Notes

The directory for cached results is {path}/{view}/{source_id}, where path is specified in your configuration file.

property aggregation_type: str

The type of the source.

property citescoreyearinfolist: list[Citescoreinfolist] | None

(year citescore) or (when view=”CITESCORE”) (year citescore status documentcount citationcount percentcited rank). rank is None or a named tuple of the form (subjectcode rank percentile).

For more information see the [CiteScore documentation](https://service.elsevier.com/app/answers/detail/a_id/14880/supporthub/scopus/).

Type:

A list of named tuples of the form

property eissn: str | None

The electronic ISSN of the source.

property issn: str | None

The ISSN of the source.

property oaallowsauthorpaid: str | None

Whether under the Open-Access policy authors are allowed to pay.

property openaccess: int | None

Open Access status (0 or 1).

property openaccessstartdate

Starting availability date.

property openaccesstype: str | None

Open Archive status (full or partial).

property openaccessarticle: bool | None

Open Access status.

property openarchivearticle: bool | None

Open Archive status.

property openaccesssponsorname: str | None

The name of the Open Access sponsor.

property openaccesssponsortype: str | None

The type of the Open Access sponsor.

property openaccessuserlicense: str | None

The User license.

property publisher: str

The publisher of the source.

property scopus_source_link: str

URL to info site on scopus.com.

property self_link: str

URL to the source’s API page.

property sjrlist: list[tuple[int, float]] | None

The SCImago Journal Rank (SJR) indicator as list of tuples in the form (year, indicator). See https://www.scimagojr.com/journalrank.php.

property sniplist: list[tuple[int, float]] | None

The Source-Normalized Impact per Paper (SNIP) as list of tuples in the form (year, indicator). See https://blog.scopus.com/posts/journal-metrics-in-scopus-source-normalized-impact-per-paper-snip.

property source_id: int

The Scopus ID of the source.

property subject_area: list[Subjectarea] | None

List of named tuples of subject areas in the form (area, abbreviation, code) of the source.

property title: str

The title of the source.

property yearly_data: list[Yearlydata] | None

Yearly citation information as a list of Yearlydata in the form (year, publicationcount, revpercent, zerocitessce, zerocitespercentsce, citecountsce). That’s 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.

get_cache_file_age()

Return the age of the cached file in days.

Return type:

int

get_cache_file_mdate()

Return the modification date of the cached file.

Return type:

str

get_key_remaining_quota()

Return number of remaining requests for the current key and the current API (relative on last actual request).

Return type:

str | None

get_key_reset_time()

Return time when current key is reset (relative on last actual request).

Return type:

str | None

Examples

You initialize the class with an ISSN or an E-ISSN (works with and without hyphen, but leading zeros are mandatory):

>>> import pybliometrics
>>> from pybliometrics.sciencedirect import SerialTitleISSN, init
>>> init()
>>> source = SerialTitleISSN("03781119")

You can obtain basic information just by printing the object:

>>> print(source)
'Gene', journal published by 'Elsevier B.V.', is active in Genetics
Metrics as of 2025-05-18:
    SJR:  year value
        2023 0.725
    SNIP: year value
        2023 0.765
    ISSN: 0378-1119, E-ISSN: 1879-0038, Scopus ID: 15636

The object has a number of attributes but no methods. For example, information regarding the source itself:

>>> source.title
'Gene'
>>> source.publisher
'Elsevier B.V.'
>>> source.issn
'0378-1119'
>>> source.eissn
'1879-0038'
>>> source.source_id
15636

Crucially, it provides three metrics: CiteScore, SCImago Journal Rank indicator), and Source Normalized Impact Factor (SNIP). This information is presented in lists of two-element tuples, with the first element indicating the year of metric evaluation.

>>> source.citescoreyearinfolist
[Citescoreinfolist(year=2023, citescore=6.1),
 Citescoreinfolist(year=2024, citescore=5.1)]
>>> source.sjrlist
[(2023, 0.725)]
>>> source.sniplist
[(2023, 0.765)]

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:

>>> import pandas as pd
>>> source_full = SerialTitleISSN("00368075", view="CITESCORE")
>>> info = pd.DataFrame(source_full.citescoreyearinfolist)
>>> print(info)
year citescore status documentcount citationcount percentcited rank
0 2024 5.1 In-Progress 2616 13257 79 [(1311, 153, 56)]
1 2023 6.1 Complete 2487 15073 81 [(1311, 129, 62)]
2 2022 7.0 Complete 2653 18487 84 [(1311, 96, 70)]
3 2021 7.0 Complete 3001 21031 86 [(1311, 88, 73)]
4 2020 5.6 Complete 3034 16950 83 [(1311, 110, 66)]
5 2019 4.8 Complete 3183 15368 79 [(1311, 128, 60)]
6 2018 4.4 Complete 3156 13862 74 [(1311, 141, 56)]
7 2017 5.0 Complete 3055 15223 80 [(1311, 119, 62)]
8 2016 4.8 Complete 3559 17163 80 [(1311, 113, 63)]
9 2015 4.3 Complete 3660 15710 78 [(2700, 1074, 67), (1311, 134, 55)]
10 2014 3.1 Complete 3116 9540 70 [(2700, 1412, 56), (1311, 186, 37)]
11 2013 2.2 Complete 2336 5196 57 [(2700, 1706, 47), (1311, 209, 28)]
12 2012 2.6 Complete 1517 3979 53 [(2700, 1494, 53), (1311, 189, 34)]
13 2011 4.4 Complete 934 4120 76 [(2700, 861, 72), (1311, 100, 64)]

14 rows × 7 columns

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.

>>> source.yearly_data[-1]
    Yearlydata(year=2025, publicationcount=403, revpercent=14.14, zerocitessce=335, zerocitespercentsce=83.12655086848635, citecountsce=9307)
>>> yearly_data = pd.DataFrame(source.yearly_data)
>>> yearly_data.head()
year publicationcount revpercent zerocitessce zerocitespercentsce citecountsce
0 1996 762 0.00 18 2.362205 21298
1 1997 853 0.23 21 2.461899 20631
2 1998 631 0.16 28 4.437401 21748
3 1999 505 3.37 5 0.990099 22319
4 2000 617 4.38 4 0.648298 22038

5 rows × 6 columns

By default, SerialTitleISSN() 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, SerialTitleISSN() will retrieve information for these years (except for the CiteScore):

>>> source_y = SerialTitleISSN("2352-7110", years="2017-2019")
>>> source_y.citescoreyearinfolist
[Citescoreinfolist(year=2023, citescore=5.5),
 Citescoreinfolist(year=2024, citescore=4.2)]
>>> source_y.sjrlist
[(2017, 3.724), (2018, 4.539), (2019, 0.445)]
>>> source_y.sniplist
[(2017, 5.287), (2018, 5.153), (2019, 1.025)]

Fields associated with the source are stored as a list of namedtuples:

>>> source.subject_area
[Subjectarea(area='Genetics', abbreviation='BIOC', code=1311)]

Additionally, there is information on Open Access status, which, however, is often empty.

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.