sábado, 22 de diciembre de 2012

Implementación de clase model para acceder a la API de Wikipedia


Ésto es un ejemplo de cómo podemos implementar un modelo PHP para acceder a la API de wikipedia. Los métodos protegidos, son otros ejemplos de parámetros para obtener un resultado diferente. Recomiendo que busquéis la documentación de la API de wikimedia para asegurarse de que los parámetros no han cambiado.

class Model_Encyclopedia
{

const WIKIPEDIA_API_URL = 'http://en.wikipedia.org/w/api.php';

/**
*
* @param type $name
* @param type $language
* @return null
*/
public static function get_page($name, $language = 'en')
{
                // here you could call one of the other protected methods, to change behaviour of the response
$parameters = array(
'action' => 'parse',
'prop' => 'text',
'format' => 'json',
'mobileformat' => 'html',
'uselang' => $language,
'page' => $name,
'section' => 2 // depends on the page
);
$query = http_build_query($parameters);
$url = self::WIKIPEDIA_API_URL . '?' . $query;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, \Input::user_agent());
$data = curl_exec($ch);
curl_close($ch);

// if curl fails, it will be a json_decode of false, and will not be an object
$data = json_decode($data);
if (is_object($data) && isset($data->parse))
{
return $data->parse;
}
return null;
}

protected static function _get_action_mobileview_parameters()
{
$parameters = array(
'action' => 'mobileview',
'format' => 'json',
'noheadings' => true,
'prop' => 'text|normalizedtitle',
'sections' => 2
);
return $parameters;
}

protected static function _get_action_query_parameters()
{
$parameters = array(
'action' => 'query',
'format' => 'json',
'rvprop' => 'content',
'titles' => 'medieval age',
'prop' => 'images|info|revisions',
'noheadings' => true,
'rvsection' => 2
);
return $parameters;
}

}

No hay comentarios: