예제 #1
0
function pubmed_efetch($pmid)
{
    // Setup the URL for efetch
    $params = array('db' => 'pubmed', 'retmode' => 'xml', 'retmax' => 25, 'id' => (string) $pmid);
    $efetch = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?';
    $q = array();
    foreach ($params as $key => $value) {
        $q[] = $key . '=' . $value;
    }
    $httpquery = implode('&', $q);
    $url = $efetch . $httpquery;
    $XML = proxy_simplexml_load_file($url);
    return $XML;
}
     cache_start($db_change);
     ########## register the time of search ##############
     if (!empty($_SESSION['session_download_arxiv_searchname']) && $from == 1) {
         database_connect(IL_DATABASE_PATH, 'library');
         $stmt = $dbHandle->prepare("UPDATE searches SET searchvalue=:searchvalue WHERE userID=:user AND searchname=:searchname AND searchfield='arxiv_last_search'");
         $stmt->bindParam(':user', $user, PDO::PARAM_STR);
         $stmt->bindParam(':searchname', $searchname, PDO::PARAM_STR);
         $stmt->bindParam(':searchvalue', $searchvalue, PDO::PARAM_STR);
         $user = $_SESSION['user_id'];
         $searchname = "arxiv#" . $_SESSION['session_download_arxiv_searchname'];
         $searchvalue = time();
         $stmt->execute();
     }
     ########## search arXiv ##############
     $request_url = "http://export.arxiv.org/api/query?" . $query_string . $category_string . $edat_string . $year_string . "&start=" . ($from - 1) . "&max_results=10&sortBy=lastUpdatedDate&sortOrder=descending";
     $xml = proxy_simplexml_load_file($request_url, $proxy_name, $proxy_port, $proxy_username, $proxy_password);
     if (empty($xml)) {
         die('Error! I, Librarian could not connect with an external web service. This usually indicates that you access the Web through a proxy server.
         Enter your proxy details in Tools->Settings. Alternatively, the external service may be temporarily down. Try again later.');
     }
 }
 ########## display search result summaries ##############
 if (!empty($xml)) {
     print '<div style="padding:2px;font-weight:bold">arXiv search';
     if (!empty($_SESSION['session_download_arxiv_searchname'])) {
         print ': ' . htmlspecialchars($_SESSION['session_download_arxiv_searchname']);
     }
     print '</div>';
     $count = 0;
     $xmlxml = $xml->asXML();
     preg_match('/<opensearch:totalResults.*opensearch:totalResults>/', $xmlxml, $xmlxml_match);
예제 #3
0
function fetch_from_pubmed($doi, $pmid)
{
    global $proxy_name, $proxy_port, $proxy_username, $proxy_password, $response;
    if (empty($pmid) && !empty($doi)) {
        $request_url = "http://www.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=Pubmed&term=" . $doi . "[AID]&usehistory=y&retstart=&retmax=1&sort=&tool=I,Librarian&email=i.librarian.software@gmail.com";
        $xml = proxy_simplexml_load_file($request_url, $proxy_name, $proxy_port, $proxy_username, $proxy_password);
        if (empty($xml)) {
            die('Error! I, Librarian could not connect with an external web service. This usually indicates that you access the Web through a proxy server.
            Enter your proxy details in Tools->Settings. Alternatively, the external service may be temporarily down. Try again later.');
        }
        $count = $xml->Count;
        if ($count == 1) {
            $pmid = $xml->IdList->Id;
        }
    }
    if (!empty($pmid)) {
        ##########	open efetch, read xml	##########
        $request_url = "http://www.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=Pubmed&rettype=abstract&retmode=XML&id=" . urlencode($pmid) . "&tool=I,Librarian&email=i.librarian.software@gmail.com";
        $xml = proxy_simplexml_load_file($request_url, $proxy_name, $proxy_port, $proxy_username, $proxy_password);
        if (empty($xml)) {
            die('Error! I, Librarian could not connect with an external web service. This usually indicates that you access the Web through a proxy server.
            Enter your proxy details in Tools->Settings. Alternatively, the external service may be temporarily down. Try again later.');
        }
        $xml_type = '';
        if (!empty($xml->PubmedBookArticle)) {
            $xml_type = 'book';
        }
        if (!empty($xml->PubmedArticle)) {
            $xml_type = 'article';
        }
        if ($xml_type == 'article') {
            foreach ($xml->PubmedArticle->PubmedData->ArticleIdList->ArticleId as $articleid) {
                foreach ($articleid->attributes() as $a => $b) {
                    if ($a == 'IdType' && $b == 'doi') {
                        $doi = $articleid[0];
                    }
                    if ($a == 'IdType' && $b == 'pmc') {
                        $response['pmcid'] = substr($articleid[0], 3);
                        $response['uid'][] = 'PMCID:' . $response['pmcid'];
                    }
                }
            }
            if (!empty($doi)) {
                $response['doi'] = $doi;
            }
            $response['uid'][] = 'PMID:' . $pmid;
            $response['url'][] = "http://www.pubmed.org/{$pmid}";
            $response['reference_type'] = 'article';
            $response['title'] = $xml->PubmedArticle->MedlineCitation->Article->ArticleTitle;
            $abstract_array = array();
            $xml_abstract = $xml->PubmedArticle->MedlineCitation->Article->Abstract->AbstractText;
            if (!empty($xml_abstract)) {
                foreach ($xml_abstract as $mini_ab) {
                    foreach ($mini_ab->attributes() as $a => $b) {
                        if ($a == 'Label') {
                            $mini_ab = $b . ": " . $mini_ab;
                        }
                    }
                    $abstract_array[] = "{$mini_ab}";
                }
                $response['abstract'] = implode(' ', $abstract_array);
            }
            $response['secondary_title'] = $xml->PubmedArticle->MedlineCitation->Article->Journal->Title;
            $day = (string) $xml->PubmedArticle->MedlineCitation->Article->Journal->JournalIssue->PubDate->Day;
            $month = (string) $xml->PubmedArticle->MedlineCitation->Article->Journal->JournalIssue->PubDate->Month;
            $year = (string) $xml->PubmedArticle->MedlineCitation->Article->Journal->JournalIssue->PubDate->Year;
            if (empty($year)) {
                $year = (string) $xml->PubmedArticle->MedlineCitation->Article->Journal->JournalIssue->PubDate->MedlineDate;
                preg_match('/\\d{4}/', $year, $year_match);
                $year = $year_match[0];
            }
            $response['year'] = '';
            if (!empty($year)) {
                if (empty($day)) {
                    $day = '01';
                }
                if (empty($month)) {
                    $month = '01';
                }
                $response['year'] = date('Y-m-d', strtotime($day . '-' . $month . '-' . $year));
            }
            $response['volume'] = $xml->PubmedArticle->MedlineCitation->Article->Journal->JournalIssue->Volume;
            $response['issue'] = $xml->PubmedArticle->MedlineCitation->Article->Journal->JournalIssue->Issue;
            $response['pages'] = $xml->PubmedArticle->MedlineCitation->Article->Pagination->MedlinePgn;
            $response['journal_abbr'] = $xml->PubmedArticle->MedlineCitation->MedlineJournalInfo->MedlineTA;
            $authors = $xml->PubmedArticle->MedlineCitation->Article->AuthorList->Author;
            $name_array = array();
            $response['affiliation'] = '';
            if (!empty($authors)) {
                foreach ($authors as $author) {
                    $name_array[] = 'L:"' . $author->LastName . '",F:"' . $author->ForeName . '"';
                    if (empty($response['affiliation'])) {
                        $response['affiliation'] = $author->Affiliation;
                    }
                }
            }
            $mesh = $xml->PubmedArticle->MedlineCitation->MeshHeadingList->MeshHeading;
            if (!empty($mesh)) {
                foreach ($mesh as $meshheading) {
                    $mesh_array[] = $meshheading->DescriptorName;
                }
            }
            if (isset($name_array)) {
                $response['authors'] = join(";", $name_array);
            }
            if (isset($mesh_array)) {
                $response['keywords'] = join(" / ", $mesh_array);
            }
        }
        if ($xml_type == 'book') {
            $pmid = $xml->PubmedBookArticle->BookDocument->PMID;
            $response['uid'][] = "PMID:{$pmid}";
            $response['url'][] = "http://www.pubmed.org/{$pmid}";
            $response['title'] = $xml->PubmedBookArticle->BookDocument->ArticleTitle;
            if (empty($response['title'])) {
                $response['reference_type'] = 'book';
                $response['title'] = $xml->PubmedBookArticle->BookDocument->Book->BookTitle;
                $response['secondary_title'] = $xml->PubmedBookArticle->BookDocument->Book->CollectionTitle;
            } else {
                $response['reference_type'] = 'chapter';
                $response['secondary_title'] = $xml->PubmedBookArticle->BookDocument->Book->BookTitle;
                $response['tertiary_title'] = $xml->PubmedBookArticle->BookDocument->Book->CollectionTitle;
            }
            $response['publisher'] = $xml->PubmedBookArticle->BookDocument->Book->Publisher->PublisherName;
            $response['place_published'] = $xml->PubmedBookArticle->BookDocument->Book->Publisher->PublisherLocation;
            $abstract_array = array();
            foreach ($xml->PubmedBookArticle->BookDocument->Abstract->AbstractText as $mini_ab) {
                foreach ($mini_ab->attributes() as $a => $b) {
                    if ($a == 'Label') {
                        $mini_ab = $b . ": " . $mini_ab;
                    }
                }
                $abstract_array[] = "{$mini_ab}";
            }
            $response['abstract'] = implode(' ', $abstract_array);
            $day = $xml->PubmedBookArticle->BookDocument->Book->PubDate->Day;
            $month = $xml->PubmedBookArticle->BookDocument->Book->PubDate->Month;
            $year = $xml->PubmedBookArticle->BookDocument->Book->PubDate->Year;
            $response['year'] = '';
            if (!empty($year)) {
                if (empty($day)) {
                    $day = '01';
                }
                if (empty($month)) {
                    $month = '01';
                }
                $response['year'] = date('Y-m-d', strtotime($day . '-' . $month . '-' . $year));
            }
            $authors = $xml->PubmedBookArticle->BookDocument->AuthorList->Author;
            $name_array = array();
            if (!empty($authors)) {
                foreach ($authors as $author) {
                    $name_array[] = 'L:"' . $author->LastName . '",F:"' . $author->ForeName . '"';
                }
            }
            if (isset($name_array)) {
                $response['authors'] = join(";", $name_array);
            }
            $editors = $xml->PubmedBookArticle->BookDocument->Book->AuthorList->Author;
            $name_array = array();
            if (!empty($editors)) {
                foreach ($editors as $editor) {
                    $name_array[] = 'L:"' . $editor->LastName . '",F:"' . $editor->ForeName . '"';
                }
            }
            if (isset($name_array)) {
                $response['editors'] = join(";", $name_array);
            }
        }
    }
}