def normalize_alias_tuple(ns, nid): ns = clean_id(ns) ns = ns.lower() if ns == "biblio": return (ns, nid) nid = clean_id(nid) from totalimpact.providers import crossref from totalimpact.providers import pubmed from totalimpact.providers import arxiv from totalimpact.providers import webpage from totalimpact import importer clean_nid = None if ns=="doi" or importer.is_doi(nid): ns = "doi" clean_nid = crossref.clean_doi(nid) elif ns=="pmid" or importer.is_pmid(nid): ns = "pmid" clean_nid = pubmed.clean_pmid(nid) elif ns=="arxiv" or importer.is_arxiv(nid): ns = "arxiv" clean_nid = arxiv.clean_arxiv_id(nid) elif ns=="url" or importer.is_url(nid): ns = "url" clean_nid = webpage.clean_url(nid) elif ns not in ["doi", "pmid", "arxiv", "url"]: clean_nid = nid if not clean_nid: return None return (ns, clean_nid)
def _extract_members(self, page, query_string=None): if 'orcid-profile' not in page: raise ProviderContentMalformedError( "Content does not contain expected text") data = provider._load_json(page) members = [] try: orcid_works = data["orcid-profile"]["orcid-activities"][ "orcid-works"]["orcid-work"] except KeyError: return [] for work in orcid_works: new_member = None try: ids = work["work-external-identifiers"][ "work-external-identifier"] for myid in ids: if myid['work-external-identifier-type'] == "DOI": doi = myid['work-external-identifier-id']['value'] doi = crossref.clean_doi(doi) if doi: new_member = ("doi", doi) if myid['work-external-identifier-type'] == "PMID": new_member = ( "pmid", myid['work-external-identifier-id']['value']) except KeyError: pass if not new_member: logger.info( u"no external identifiers, try saving whole citation for {orcid}" .format(orcid=query_string)) biblio = self._parse_orcid_work(work) new_member = ("biblio", biblio) if new_member: members += [new_member] if not members: raise ProviderItemNotFoundError logger.info(u"returning {n} members for {orcid}".format( n=len(members), orcid=query_string)) return (members)
def _extract_members(self, page, query_string=None): if 'orcid-profile' not in page: raise ProviderContentMalformedError("Content does not contain expected text") data = provider._load_json(page) members = [] try: orcid_works = data["orcid-profile"]["orcid-activities"]["orcid-works"]["orcid-work"] except KeyError: return [] for work in orcid_works: new_member = None try: ids = work["work-external-identifiers"]["work-external-identifier"] for myid in ids: if myid['work-external-identifier-type'] == "DOI": doi = myid['work-external-identifier-id']['value'] doi = crossref.clean_doi(doi) if doi: new_member = ("doi", doi) if myid['work-external-identifier-type'] == "PMID": new_member = ("pmid", myid['work-external-identifier-id']['value']) except KeyError: pass if not new_member: logger.info(u"no external identifiers, try saving whole citation for {orcid}".format( orcid=query_string)) biblio = self._parse_orcid_work(work) new_member = ("biblio", biblio) if new_member: members += [new_member] if not members: raise ProviderItemNotFoundError logger.info(u"returning {n} members for {orcid}".format( n=len(members), orcid=query_string)) return(members)