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);
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); } } } }