function oembed_default_callback in oEmbed 7.0
Same name and namespace in other branches
- 8 plugins/providers/default.inc \oembed_default_callback()
- 7 plugins/providers/default.inc \oembed_default_callback()
Default provider callback makes HTTP requests using drupal_http_request().
1 string reference to 'oembed_default_callback'
- default.inc in plugins/
providers/ default.inc
File
- plugins/
providers/ default.inc, line 56
Code
function oembed_default_callback($plugin, $url, $matches, $parameters) {
$embed = FALSE;
// Remote oEmbed endpoint request.
$parameters['url'] = $url;
$query = http_build_query($parameters, NULL, '&');
$fetch_url = $plugin['endpoint'] . '?' . $query;
//TODO: Add alternative ways of fetching the content - like http client?
$response = drupal_http_request($fetch_url);
if (!isset($response->error)) {
// JSON or XML data might be returned, so be agnostic about decoding it.
$embed = json_decode($response->data, TRUE);
if (!is_array($embed)) {
try {
$xml = @new SimpleXMLElement($response->data);
$embed = array();
foreach ($xml as $key => $value) {
$embed[$key] = (string) $value;
}
} catch (Exception $e) {
watchdog('oembed', 'Could not parse response from %url.', array(
'%url' => $fetch_url,
), WATCHDOG_ERROR);
}
}
if (empty($embed['version']) || empty($embed['type']) || intval($embed['version']) != 1) {
$embed = FALSE;
}
if ($embed && !isset($embed['title'])) {
$embed['title'] = '';
}
if (!$embed) {
watchdog('oembed', 'Response from %url not a valid oEmbed response.', array(
'%url' => $fetch_url,
), WATCHDOG_ERROR);
}
}
else {
watchdog('oembed', 'Error fetching data from %url.', array(
'%url' => $fetch_url,
), WATCHDOG_ERROR);
}
return $embed;
}