You are here

function BiblioCrossRefClient::fetchByAuthorTitle in Bibliography Module 6.2

File

modules/crossref/biblio.crossref.client.php, line 81

Class

BiblioCrossRefClient

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