'service.semanticproxy.com',
'format' => 'rdf',
);
public $parameters;
public $rdf;
public $triples = array();
public $flatTriples = array();
public $keywords = array();
/**
* Constructs an instance of the Calais facade.
*
* Valid parameters are specified in the options array as key/value pairs with the
* parameter name being the key and the parameter setting being the value
* e.g. array('allowSearch' => 'false')
*
* @param options
* An array of parameter options for the Semantic Proxy Web Service. These will override the defaults.
*
* - host
* - The server name for the SemanticProxy service (default: service.semanticproxy.com)
* - format
* - The return data format for the SemanticProxy service (default: rdf)
*
*
*/
function __construct($options = array()) {
$this->parameters = array_merge($this->defaults, $options);
}
/**
* Analyze the url via SemanticProxy/Calais
*
* @param $url
* The url to send to SemanticProxy for analysis
* @return
* The processed Calais results. The raw RDF result is contained in the $this->rdf field.
*/
public function analyze($url) {
if (!valid_url($url, TRUE)) {
self::log_url_error($url);
return array();
}
$data = array(
'@apikey' => variable_get('calais_api_key', NULL),
'@host' => $this->parameters['host'],
'@format' => $this->parameters['format'],
'@url' => $url,
);
$uri = strtr(self::SERVICE, $data);
$ret = drupal_http_request($uri);
if (isset($ret->error)) {
self::log_http_error($ret);
return array();
}
if($this->parameters['format'] == 'rdf') {
$this->rdf = $ret->data;
$this->processor = new CalaisRdfProcessor();
$this->keywords = $this->processor->parse_rdf($this->rdf);
$this->triples = $this->processor->triples;
$this->flatTriples = $this->processor->flatTriples;
}
return $this->keywords;
}
private static function log_url_error($url) {
$msg = t('URL for SemanticProxy is invalid: @url', array('@url' => $url));
drupal_set_message($msg, 'error');
watchdog('calais', $msg, array(), WATCHDOG_ERROR);
}
private static function log_http_error($ret) {
$errordoc = @simplexml_load_string($ret->data);
if (method_exists($errordoc, 'xpath')) {
$exception = $errordoc->xpath('/Error/Exception');
$errormsg = (string) $exception[0];
$msg = t('SemanticProxy processing error: @msg', array('@msg' => $errormsg));
drupal_set_message($msg, 'error');
$errors = array('@code' => $ret->code, '@error' => $ret->error, '@msg' => $errormsg);
watchdog('calais', 'SemanticProxy processing error: (@code - @error) @msg', $errors, WATCHDOG_ERROR);
}
else {
$msg = t('Unexpected error processing SemanticProxy request.');
drupal_set_message($msg, 'error');
watchdog('calais', $msg, WATCHDOG_ERROR);
}
}
}