def _lookup_doi_from_biblio(self, biblio, cache_enabled):
        if not biblio:
            return []

        try:
            if (biblio["journal"] == ""):
                # need to have journal or can't look up with current api call
                logger.info(u"%20s /biblio_print NO DOI because no journal in %s" % (
                    self.provider_name, biblio))
                return []
            query_string =  (u"|%s|%s|%s|%s|%s|%s||%s|" % (
                biblio.get("journal", ""),
                biblio.get("first_author", biblio.get("authors", "").split(",")[0].strip()),
                biblio.get("volume", ""),
                biblio.get("number", ""),
                biblio.get("first_page", ""),
                biblio.get("year", ""),
                "ImpactStory"
                ))
        except __HOLE__:
            logger.info(u"%20s /biblio_print NO DOI because missing needed attribute in %s" % (
                self.provider_name, biblio))
            return []


        # for more info on crossref spec, see
        # http://ftp.crossref.org/02publishers/25query_spec.html
        url = "http://doi.crossref.org/servlet/query?pid=totalimpactdev@gmail.com&qdata=%s" % query_string

        try:
            logger.debug(u"%20s /biblio_print calling crossref at %s" % (self.provider_name, url))
            # doi-lookup call to crossref can take a while, give it a long timeout
            response = self.http_get(url, timeout=30, cache_enabled=cache_enabled)
        except ProviderTimeout:
            raise ProviderTimeout("CrossRef timeout")

        if response.status_code != 200:
            raise ProviderServerError("CrossRef status code was not 200")

        if not biblio["journal"].lower() in response.text.lower():
            raise ProviderServerError("CrossRef returned invalid text response")

        response_lines = response.text.split("\n")

        split_lines = [line.split("|") for line in response_lines if line]
        line_keys = [line[-2].strip() for line in split_lines]
        dois = [line[-1].strip() for line in split_lines]

        for key, doi in zip(line_keys, dois):
            if not doi:
                try:
                    logger.debug(u"%20s /biblio_print NO DOI from %s, %s" %(self.provider_name, biblio, key))
                except KeyError:
                    logger.debug(u"%20s /biblio_print NO DOI from %s, %s" %(self.provider_name, "", key))                    

        return doi


    # overriding default
    # gets url and biblio from doi
dataset/ETHPy150Open Impactstory/total-impact-core/totalimpact/providers/crossref.py/Crossref._lookup_doi_from_biblio