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)
示例#2
0
    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)
示例#3
0
    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)