diff --git a/get_rankings/jranker.py b/get_rankings/jranker.py index 8f94c54a37447c2dd2b8be8db11df1bcfc703e8a..1c4f479f9022ab2583c43ad9d4f9504657cedc63 100644 --- a/get_rankings/jranker.py +++ b/get_rankings/jranker.py @@ -7,6 +7,17 @@ from tqdm import tqdm SCIMAGOURL = "https://www.scimagojr.com/journalrank.php?year={}&type=j&out=xls" +def fetchifneeded(f): + def wrapper(self, year, *args): + res = f(self, year, *args) + if res is None and not self.fetched(year): + self.fetch_scimago_year(year) + res = f(self, year, *args) + return res + + return wrapper + + class SJR: def __init__(self, database): self.con = sqlite3.connect(database) @@ -33,18 +44,19 @@ class SJR: (title, issn, year, quartiles), ) - def raw_by_ISSN(self, issn, year): + @fetchifneeded + def by_ISSN(self, year, issn): self.cursor.execute( "SELECT * FROM sjr_journals WHERE ISSN=? AND Year=?", (issn, year) ) return self.cursor.fetchone() - def by_ISSN(self, issn, year): - res = self.raw_by_ISSN(issn, year) - if res is None and not self.fetched(year): - self.fetch_scimago_year(year) - res = self.raw_by_ISSN(issn, year) - return res + @fetchifneeded + def by_Title(self, year, title): + self.cursor.execute( + "SELECT * FROM sjr_journals WHERE Title=? AND Year=?", (title, year) + ) + return self.cursor.fetchone() def fetched(self, year): self.cursor.execute("SELECT Year FROM fetched WHERE Year=?", (year,)) @@ -84,13 +96,15 @@ class SJR: if __name__ == "__main__": sjr = SJR("/tmp/lapin.db") print("** A few rankings\n") - for pair in [("25206508", 2020), ("00045411", 2018)]: + for pair in [(2020, "25206508"), (2018, "00045411")]: print(" ", "; ".join(map(str, sjr.by_ISSN(*pair)))) + for pair in [(2020, "Journal of the ACM")]: + print(" ", "; ".join(map(str, sjr.by_Title(*pair)))) print("\n** Evolution from 2019 to 2021\n") for issn in ["10902724", "03043975", "14627264", "22105379", "00045411"]: q = [] for year in [2019, 2020, 2021]: - res = sjr.by_ISSN(issn, year) + res = sjr.by_ISSN(year, issn) title = res[0] q.append(res[3]) print(f" {title}: {', '.join(q)}")