def resolve_doi(doi): """ Gets the paper and references information from an article DOI. Parameters ---------- doi : str DOI = digital object identifier. Unique ID assigned to a journal article. Example: 10.1002/biot.201400046 Returns ------- paper_info : PaperInfo See resolve_citation for description. """ doi_prefix = doi[0:7] # Same steps as in resolve_citation saved_info = get_saved_info(doi) if saved_info is not None: saved_paper_info = PaperInfo() for k, v in saved_info.items(): setattr(saved_paper_info, k, v) saved_paper_info.make_interface_object() return saved_paper_info paper_info = doi_to_info(doi) idnum = assign_id() paper_info.idnum = idnum log_info(paper_info) return paper_info
def resolve_citation(citation): """ Gets the paper and references information from a plaintext citation. Uses a search to CrossRef.org to retrive paper DOI. Parameters ---------- citation : str Full journal article citation. Example: Senís, Elena, et al. "CRISPR/Cas9‐mediated genome engineering: An adeno‐associated viral (AAV) vector toolbox. Biotechnology journal 9.11 (2014): 1402-1412. Returns ------- paper_info : PaperInfo Class containing relevant paper meta-information and references list. Information about the paper itself is in 'entry' value, and is a dict (with str and dict values). References list is in 'references' value and is a list of dicts (each with str and dict values). Must call .__dict__ to be JSON-serializable """ # Encode raw citation citation = urllib_quote(citation) # Search for citation on CrossRef.org to try to get a DOI link api_search_url = 'http://search.labs.crossref.org/dois?q=' + citation response = requests.get(api_search_url).json() doi = response[0]['doi'] print(doi) # If crossref returns a http://dx.doi.org/ link, retrieve the doi from it # and save the URL to pass to doi_to_info url = None if doi[0:18] == 'http://dx.doi.org/': url = doi doi = doi[18:] doi_prefix = doi[0:7] # Check if this DOI has been searched and saved before. # If it has, return saved information saved_info = get_saved_info(doi) if saved_info is not None: saved_paper_info = PaperInfo() for k, v in saved_info.items(): setattr(saved_paper_info, k, v) saved_paper_info.make_interface_object() return saved_paper_info paper_info = doi_to_info(doi, doi_prefix, url) idnum = assign_id() paper_info.idnum = idnum log_info(paper_info) return paper_info