Merge branch 'oembed-provider' into 0.8.x

This commit is contained in:
Craig Andrews 2009-07-17 12:33:56 -04:00
commit 3dbbefd5ad
9 changed files with 88 additions and 29 deletions

View File

@ -129,6 +129,7 @@ class ApiAction extends Action
'laconica/config', 'laconica/config',
'laconica/wadl', 'laconica/wadl',
'tags/timeline', 'tags/timeline',
'oembed/oembed',
'groups/timeline'); 'groups/timeline');
static $bareauth = array('statuses/user_timeline', static $bareauth = array('statuses/user_timeline',

View File

@ -98,6 +98,28 @@ class AttachmentAction extends Action
return $a->title(); return $a->title();
} }
function extraHead()
{
$this->element('link',array('rel'=>'alternate',
'type'=>'application/json+oembed',
'href'=>common_local_url(
'api',
array('apiaction'=>'oembed','method'=>'oembed.json'),
array('url'=>
common_local_url('attachment',
array('attachment' => $this->attachment->id)))),
'title'=>'oEmbed'),null);
$this->element('link',array('rel'=>'alternate',
'type'=>'text/xml+oembed',
'href'=>common_local_url(
'api',
array('apiaction'=>'oembed','method'=>'oembed.xml'),
array('url'=>
common_local_url('attachment',
array('attachment' => $this->attachment->id)))),
'title'=>'oEmbed'),null);
}
/** /**
* Handle input * Handle input
* *

View File

@ -275,6 +275,20 @@ class ShownoticeAction extends OwnerDesignAction
$this->element('meta', array('name' => 'microid', $this->element('meta', array('name' => 'microid',
'content' => $id->toString())); 'content' => $id->toString()));
} }
$this->element('link',array('rel'=>'alternate',
'type'=>'application/json+oembed',
'href'=>common_local_url(
'api',
array('apiaction'=>'oembed','method'=>'oembed.json'),
array('url'=>$this->notice->uri)),
'title'=>'oEmbed'),null);
$this->element('link',array('rel'=>'alternate',
'type'=>'text/xml+oembed',
'href'=>common_local_url(
'api',
array('apiaction'=>'oembed','method'=>'oembed.xml'),
array('url'=>$this->notice->uri)),
'title'=>'oEmbed'),null);
} }
} }

View File

@ -171,4 +171,5 @@ class TwitapilaconicaAction extends TwitterapiAction
parent::handle($args); parent::handle($args);
$this->serverError(_('API method under construction.'), 501); $this->serverError(_('API method under construction.'), 501);
} }
} }

View File

@ -79,9 +79,8 @@ class File extends Memcached_DataObject
if (isset($redir_data['type']) if (isset($redir_data['type'])
&& ('text/html' === substr($redir_data['type'], 0, 9)) && ('text/html' === substr($redir_data['type'], 0, 9))
&& ($oembed_data = File_oembed::_getOembed($given_url)) && ($oembed_data = File_oembed::_getOembed($given_url))) {
&& isset($oembed_data['json'])) { File_oembed::saveNew($oembed_data, $file_id);
File_oembed::saveNew($oembed_data['json'], $file_id);
} }
return $x; return $x;
} }

View File

@ -56,33 +56,46 @@ class File_oembed extends Memcached_DataObject
return array(false, false, false); return array(false, false, false);
} }
function _getOembed($url, $maxwidth = 500, $maxheight = 400, $format = 'json') { function _getOembed($url, $maxwidth = 500, $maxheight = 400) {
$cmd = common_config('oohembed', 'endpoint') . '?url=' . urlencode($url); require_once INSTALLDIR.'/extlib/Services/oEmbed.php';
if (is_int($maxwidth)) $cmd .= "&maxwidth=$maxwidth"; $parameters = array(
if (is_int($maxheight)) $cmd .= "&maxheight=$maxheight"; 'maxwidth'=>$maxwidth,
if (is_string($format)) $cmd .= "&format=$format"; 'maxheight'=>$maxheight,
$oe = @file_get_contents($cmd); );
if (false === $oe) return false; try{
return array($format => (('json' === $format) ? json_decode($oe, true) : $oe)); $oEmbed = new Services_oEmbed($url);
$object = $oEmbed->getObject($parameters);
return $object;
}catch(Exception $e){
try{
$oEmbed = new Services_oEmbed($url, array(
Services_oEmbed::OPTION_API => common_config('oohembed', 'endpoint')
));
$object = $oEmbed->getObject($parameters);
return $object;
}catch(Exception $ex){
return false;
}
}
} }
function saveNew($data, $file_id) { function saveNew($data, $file_id) {
$file_oembed = new File_oembed; $file_oembed = new File_oembed;
$file_oembed->file_id = $file_id; $file_oembed->file_id = $file_id;
$file_oembed->version = $data['version']; $file_oembed->version = $data->version;
$file_oembed->type = $data['type']; $file_oembed->type = $data->type;
if (!empty($data['provider_name'])) $file_oembed->provider = $data['provider_name']; if (!empty($data->provider_name)) $file_oembed->provider = $data->provider_name;
if (!isset($file_oembed->provider) && !empty($data['provide'])) $file_oembed->provider = $data['provider']; if (!empty($data->provider)) $file_oembed->provider = $data->provider;
if (!empty($data['provide_url'])) $file_oembed->provider_url = $data['provider_url']; if (!empty($data->provide_url)) $file_oembed->provider_url = $data->provider_url;
if (!empty($data['width'])) $file_oembed->width = intval($data['width']); if (!empty($data->width)) $file_oembed->width = intval($data->width);
if (!empty($data['height'])) $file_oembed->height = intval($data['height']); if (!empty($data->height)) $file_oembed->height = intval($data->height);
if (!empty($data['html'])) $file_oembed->html = $data['html']; if (!empty($data->html)) $file_oembed->html = $data->html;
if (!empty($data['title'])) $file_oembed->title = $data['title']; if (!empty($data->title)) $file_oembed->title = $data->title;
if (!empty($data['author_name'])) $file_oembed->author_name = $data['author_name']; if (!empty($data->author_name)) $file_oembed->author_name = $data->author_name;
if (!empty($data['author_url'])) $file_oembed->author_url = $data['author_url']; if (!empty($data->author_url)) $file_oembed->author_url = $data->author_url;
if (!empty($data['url'])) $file_oembed->url = $data['url']; if (!empty($data->url)) $file_oembed->url = $data->url;
$file_oembed->insert(); $file_oembed->insert();
if (!empty($data['thumbnail_url'])) { if (!empty($data->thumbnail_url)) {
File_thumbnail::saveNew($data, $file_id); File_thumbnail::saveNew($data, $file_id);
} }
} }

View File

@ -51,9 +51,9 @@ class File_thumbnail extends Memcached_DataObject
function saveNew($data, $file_id) { function saveNew($data, $file_id) {
$tn = new File_thumbnail; $tn = new File_thumbnail;
$tn->file_id = $file_id; $tn->file_id = $file_id;
$tn->url = $data['thumbnail_url']; $tn->url = $data->thumbnail_url;
$tn->width = intval($data['thumbnail_width']); $tn->width = intval($data->thumbnail_width);
$tn->height = intval($data['thumbnail_height']); $tn->height = intval($data->thumbnail_height);
$tn->insert(); $tn->insert();
} }
} }

View File

@ -162,7 +162,7 @@ class Services_oEmbed
} }
if ($this->options[self::OPTION_API] === null) { if ($this->options[self::OPTION_API] === null) {
$this->options[self::OPTION_API] = $this->discover(); $this->options[self::OPTION_API] = $this->discover($url);
} }
} }
@ -319,7 +319,7 @@ class Services_oEmbed
} }
} }
return (isset($ret['json']) ? $ret['json'] : array_pop($ret)); return (isset($ret['application/json']) ? $ret['application/json'] : array_pop($ret));
} }
/** /**

View File

@ -113,6 +113,11 @@ class Router
$m->connect('main/tagother/:id', array('action' => 'tagother')); $m->connect('main/tagother/:id', array('action' => 'tagother'));
$m->connect('main/:method',
array('action' => 'api',
'method' => 'oembed(.xml|.json)?',
'apiaction' => 'oembed'));
// these take a code // these take a code
foreach (array('register', 'confirmaddress', 'recoverpassword') as $c) { foreach (array('register', 'confirmaddress', 'recoverpassword') as $c) {
@ -390,6 +395,10 @@ class Router
// laconica // laconica
$m->connect('api/laconica/:method',
array('action' => 'api',
'apiaction' => 'laconica'));
$m->connect('api/laconica/:method', $m->connect('api/laconica/:method',
array('action' => 'api', array('action' => 'api',
'apiaction' => 'laconica')); 'apiaction' => 'laconica'));