import os import sys import csv import subprocess import time import random import re import simplejson as json import click from s2 import SemanticScholarAPI, fetch_paper from util import * ''' s2 search API format: results matchedAuthors matchedPresentations query querySuggestions results stats totalPages totalResults ''' @click.command() @click.option('--index', '-n', default=0, help='Index of CSV (query,)') def fetch_entries(index): keys, lines = read_citation_list(index) citation_lookup = [] s2 = SemanticScholarAPI() for line in lines: key = line[0] name = line[1] title = re.sub(r'[^-0-9a-zA-Z ]+', '', line[2]) if len(title) < 2: continue dump_fn = './datasets/s2/dumps/{}.json'.format(key) entry_fn = './datasets/s2/entries/{}.json'.format(key) result = None if os.path.exists(entry_fn): result = read_json(entry_fn) else: results = s2.search(title) write_json(dump_fn, results) if len(results['results']) == 0: print("- {}".format(title)) else: print("+ {}".format(title)) result = results['results'][0] write_json(entry_fn, result) if result: paper_id = result['id'] paper = fetch_paper(s2, paper_id) citation_lookup.append([key, name, title, paper_id]) write_csv("datasets/citation_lookup.csv", keys=['key', 'name', 'title', 'paper_id'], rows=citation_lookup) if __name__ == '__main__': fetch_entries()