Выскабливание в PubMed результаты запроса


Как я могу сделать следующий PHP код лучше, эффективнее, короче, Элегант и т. д? В то время как он уже работает, я еще учусь PHP и хотите улучшить мой текущий код:

<?php

$query = 'psoriasis';

$eSearchQueryParameters = array(
    'db' => 'pubmed',
    'term' => $query,
    'retmode' => 'xml',
    'retstart' => '0',
    'retmax' => '500',
    'usehistory' => 'y',
);

$eSearchQueryResults = simplexml_load_file('http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?' . http_build_query($eSearchQueryParameters));

$eFetchQueryParameters = array(
    'db' => 'pubmed',
    'retmax' => '500',
    'query_key' => (string) $eSearchQueryResults->QueryKey,
    'WebEnv' => (string) $eSearchQueryResults->WebEnv,
);

$eFetchURL = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?' . http_build_query($eFetchQueryParameters);
$matches = array();
preg_match_all('/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}/', file_get_contents($eFetchURL), $matches);

foreach ($matches[0] as $key => $value) {
    echo $value . "<br />";
}

?>


606
1
задан 16 октября 2011 в 08:10 Источник Поделиться
Комментарии
1 ответ

По моему скромному мнению, версия ниже более элегантно, легче читать и поддерживать.

Он использует класс, чтобы держать вещи более организованными.

Я считаю, что код ниже в качестве отправной точки , чтобы начать совершенствуется, с такими вещами, как проверка ошибок и т. д.

Я надеюсь, вам понравится, и, возможно, чему-нибудь научиться.

<?php

class MyQuery
{
public $query = '';

public $search_url = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?';
public $fetch_url = 'http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?';

public $search_parameters = array(
'db' => 'pubmed',
'term' => '',
'retmode' => 'xml',
'retstart' => '0',
'retmax' => '500',
'usehistory' => 'y'
);

public $fetch_parameters = array(
'db' => 'pubmed',
'retmax' => '500',
'query_key' => '',
'WebEnv' => ''
);

public $search_results;
public $fetch_results;
public $matches = array();

public $match_regex = '/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}/';

public __constructor( $query )
{
$this->query = $query;
}

public search()
{
$this->search_parameters['term'] = $this->query;
$url = $this->search_url . http_build_query( $this->search_parameters );
$this->search_results = simplexml_load_file( $url );
}

public fetch()
{
$this->fetch_parameters['query_key'] = (string) $this->search_results->QueryKey;
$this->fetch_parameters['WebEnv'] = (string) $this->search_results->WebEnv
$url = $this->fetch_url . http_build_query( $this->fetch_parameters );
$this->fetch_results = file_get_contents( $url );
}

public match()
{
$matches = array();
preg_match_all( $this->match_regex, $this->fetch_results, $matches );
$this->matches = array_values( $matches[0] );
}

public get()
{
$this->search();
$this->fetch();
$this->match();
return $this->matches;
}
}

$query = new MyQuery( 'psoriasis' );
$result = $query->get();
echo implode( '<br />', $result );

?>

2
ответ дан 17 октября 2011 в 02:10 Источник Поделиться