function BiblioCrossRefClient::fetchByAuthorTitle in Bibliography Module 6.2
File
- modules/
crossref/ biblio.crossref.client.php, line 81
Class
Code
function fetchByAuthorTitle($author, $title) {
$qdata = simplexml_load_string('<query_batch version="2.0" xsi:schemaLocation="http://www.crossref.org/qschema/2.0 http://www.crossref.org/qschema/crossref_query_input2.0.xsd" xmlns="http://www.crossref.org/qschema/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />');
$qdata->head->email_address = $this->pid;
$qdata->head->doi_batch_id = uniqid('NA');
$qdata->body->query = '';
$query = $qdata->body->query;
$query['enable-multiple-hits'] = 'exact';
$query['key'] = 'key';
$query->article_title = $title;
$query->article_title['match'] = 'fuzzy';
$query->author = $author;
$query->author['search-all-authors'] = 'true';
$this->query = url($this->url, array(
'external' => TRUE,
'query' => array(
'pid' => $this->pid,
'noredirect' => 'true',
'format' => 'unixref',
'qdata' => (string) $qdata
->asXml(),
),
));
$response = drupal_http_request($this->query);
if ($response->code != 200) {
drupal_set_message(t('Could not open crossref.org for XML author/title query.'), 'error');
return array();
}
$xml = simplexml_load_string($response->data);
$results = array();
foreach ($xml->doi_record as $record) {
$result = array(
'full' => $record
->asXml(),
'doi' => $record
->xpath('.//doi[1]'),
'title' => $record
->xpath('.//title[1]'),
);
$result['full'] = preg_replace('@<[^>]+>@s', '.', $result['full']);
$result['full'] = preg_replace('@\\.[\\s\\.]+@', '. ', $result['full']);
$result['full'] = trim($result['full'], '. ');
$result['doi'] = (string) $result['doi'][0];
$result['title'] = (string) $result['title'][0];
$results[] = $result;
}
return $results;
}