From 0aeea42724b7eac2bd2cd78b9d740fe5491d8df4 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Wed, 15 Jul 2009 10:29:54 -0400 Subject: Added stub oembed api endpoint --- actions/api.php | 1 + actions/twitapilaconica.php | 8 ++++++++ 2 files changed, 9 insertions(+) (limited to 'actions') diff --git a/actions/api.php b/actions/api.php index 452ed8e82..fa5a7e7ae 100644 --- a/actions/api.php +++ b/actions/api.php @@ -129,6 +129,7 @@ class ApiAction extends Action 'laconica/config', 'laconica/wadl', 'tags/timeline', + 'laconica/oembed', 'groups/timeline'); static $bareauth = array('statuses/user_timeline', diff --git a/actions/twitapilaconica.php b/actions/twitapilaconica.php index 8cd7a64b9..ec40bc627 100644 --- a/actions/twitapilaconica.php +++ b/actions/twitapilaconica.php @@ -171,4 +171,12 @@ class TwitapilaconicaAction extends TwitterapiAction parent::handle($args); $this->serverError(_('API method under construction.'), 501); } + + function oembed($args, $apidata) + { + parent::handle($args); + $url = $args['url']; + print_r($apidata); + die("oembed!"); + } } -- cgit v1.2.3-54-g00ecf From e637e5a8a97d5a30710046e70b1994007d65b939 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Wed, 15 Jul 2009 14:49:41 -0400 Subject: Support oembed for attachments and notices --- actions/twitapilaconica.php | 117 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 115 insertions(+), 2 deletions(-) (limited to 'actions') diff --git a/actions/twitapilaconica.php b/actions/twitapilaconica.php index ec40bc627..114dff6ee 100644 --- a/actions/twitapilaconica.php +++ b/actions/twitapilaconica.php @@ -175,8 +175,121 @@ class TwitapilaconicaAction extends TwitterapiAction function oembed($args, $apidata) { parent::handle($args); + + common_debug("in oembed api action"); + + $this->auth_user = $apidata['user']; + $url = $args['url']; - print_r($apidata); - die("oembed!"); + if( substr(strtolower($url),0,strlen(common_root_url())) == strtolower(common_root_url()) ){ + $path = substr($url,strlen(common_root_url())); + + $r = Router::get(); + + $proxy_args = $r->map($path); + + if (!$proxy_args) { + $this->serverError(_("$path not found"), 404); + } + $oembed=array(); + $oembed['version']='1.0'; + $oembed['provider_name']=common_config('site', 'name'); + $oembed['provider_url']=common_root_url(); + switch($proxy_args['action']){ + case 'shownotice': + $oembed['type']='link'; + $id = $proxy_args['notice']; + $notice = Notice::staticGet($id); + if(empty($notice)){ + $this->serverError(_("notice $id not found"), 404); + } + $profile = $notice->getProfile(); + if (empty($profile)) { + $this->serverError(_('Notice has no profile'), 500); + } + if (!empty($profile->fullname)) { + $authorname = $profile->fullname . ' (' . $profile->nickname . ')'; + } else { + $authorname = $profile->nickname; + } + $oembed['title'] = sprintf(_('%1$s\'s status on %2$s'), + $authorname, + common_exact_date($notice->created)); + $oembed['author_name']=$authorname; + $oembed['author_url']=$profile->profileurl; + $oembed['url']=($notice->url?$notice->url:$notice->uri); + $oembed['html']=$notice->rendered; + break; + case 'attachment': + $id = $proxy_args['attachment']; + $attachment = File::staticGet($id); + if(empty($attachment)){ + $this->serverError(_("attachment $id not found"), 404); + } + if(empty($attachment->filename) && $file_oembed = File_oembed::staticGet('file_id', $attachment->id)){ + // Proxy the existing oembed information + $oembed['type']=$file_oembed->type; + $oembed['provider']=$file_oembed->provider; + $oembed['provider_url']=$file_oembed->provider_url; + $oembed['width']=$file_oembed->width; + $oembed['height']=$file_oembed->height; + $oembed['html']=$file_oembed->html; + $oembed['title']=$file_oembed->title; + $oembed['author_name']=$file_oembed->author_name; + $oembed['author_url']=$file_oembed->author_url; + $oembed['url']=$file_oembed->url; + }else if(substr($attachment->mimetype,0,strlen('image/'))=='image/'){ + $oembed['type']='photo'; + //TODO set width and height + //$oembed['width']= + //$oembed['height']= + $oembed['url']=$attachment->url; + }else{ + $oembed['type']='link'; + $oembed['url']=common_local_url('attachment', + array('attachment' => $attachment->id)); + } + if($attachment->title) $oembed['title']=$attachment->title; + break; + default: + $this->serverError(_("$path not supported for oembed requests"), 501); + } + + switch($apidata['content-type']){ + case 'xml': + $this->init_document('xml'); + $this->elementStart('oembed'); + $this->element('version',null,$oembed['version']); + $this->element('type',null,$oembed['type']); + if($oembed['provider_name']) $this->element('provider_name',null,$oembed['provider_name']); + if($oembed['provider_url']) $this->element('provider_url',null,$oembed['provider_url']); + if($oembed['title']) $this->element('title',null,$oembed['title']); + if($oembed['author_name']) $this->element('author_name',null,$oembed['author_name']); + if($oembed['author_url']) $this->element('author_url',null,$oembed['author_url']); + if($oembed['url']) $this->element('url',null,$oembed['url']); + if($oembed['html']) $this->element('html',null,$oembed['html']); + if($oembed['width']) $this->element('width',null,$oembed['width']); + if($oembed['height']) $this->element('height',null,$oembed['height']); + if($oembed['cache_age']) $this->element('cache_age',null,$oembed['cache_age']); + if($oembed['thumbnail_url']) $this->element('thumbnail_url',null,$oembed['thumbnail_url']); + if($oembed['thumbnail_width']) $this->element('thumbnail_width',null,$oembed['thumbnail_width']); + if($oembed['thumbnail_height']) $this->element('thumbnail_height',null,$oembed['thumbnail_height']); + + + $this->elementEnd('oembed'); + $this->end_document('xml'); + break; + case 'json': + $this->init_document('json'); + print(json_encode($oembed)); + $this->end_document('json'); + break; + default: + $this->serverError(_('content type ' . $apidata['content-type'] . ' not supported'), 501); + } + + }else{ + $this->serverError(_('Only ' . common_root_url() . ' urls over plain http please'), 404); + } } } -- cgit v1.2.3-54-g00ecf From 6308539c1d669ad0b6072b48deeaa95969ebe318 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Wed, 15 Jul 2009 15:11:29 -0400 Subject: Added oEmbed discovery for attachments and notices --- actions/attachment.php | 22 ++++++++++++++++++++++ actions/shownotice.php | 14 ++++++++++++++ 2 files changed, 36 insertions(+) (limited to 'actions') diff --git a/actions/attachment.php b/actions/attachment.php index ee4cd9640..c9c416cb5 100644 --- a/actions/attachment.php +++ b/actions/attachment.php @@ -98,6 +98,28 @@ class AttachmentAction extends Action return $a->title(); } + function extraHead() + { + $this->element('link',array('rel'=>'alternate', + 'type'=>'application/json+oembed', + 'href'=>common_local_url( + 'api', + array('apiaction'=>'laconica','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'=>'laconica','method'=>'oembed.xml'), + array('url'=> + common_local_url('attachment', + array('attachment' => $this->attachment->id)))), + 'title'=>'oEmbed'),null); + } + /** * Handle input * diff --git a/actions/shownotice.php b/actions/shownotice.php index 1ec38a76b..4cf226f1c 100644 --- a/actions/shownotice.php +++ b/actions/shownotice.php @@ -275,6 +275,20 @@ class ShownoticeAction extends OwnerDesignAction $this->element('meta', array('name' => 'microid', 'content' => $id->toString())); } + $this->element('link',array('rel'=>'alternate', + 'type'=>'application/json+oembed', + 'href'=>common_local_url( + 'api', + array('apiaction'=>'laconica','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'=>'laconica','method'=>'oembed.xml'), + array('url'=>$this->notice->uri)), + 'title'=>'oEmbed'),null); } } -- cgit v1.2.3-54-g00ecf From 9ed117dc3a405175359d0a541dddfb14cdf15d47 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Fri, 17 Jul 2009 12:33:12 -0400 Subject: Move the oembed endpoint to /main/oembed --- actions/api.php | 2 +- actions/attachment.php | 4 +- actions/shownotice.php | 4 +- actions/twitapilaconica.php | 120 -------------------------------------------- lib/router.php | 5 ++ 5 files changed, 10 insertions(+), 125 deletions(-) (limited to 'actions') diff --git a/actions/api.php b/actions/api.php index fa5a7e7ae..8b92889f8 100644 --- a/actions/api.php +++ b/actions/api.php @@ -129,7 +129,7 @@ class ApiAction extends Action 'laconica/config', 'laconica/wadl', 'tags/timeline', - 'laconica/oembed', + 'oembed/oembed', 'groups/timeline'); static $bareauth = array('statuses/user_timeline', diff --git a/actions/attachment.php b/actions/attachment.php index c9c416cb5..c6a5d0d52 100644 --- a/actions/attachment.php +++ b/actions/attachment.php @@ -104,7 +104,7 @@ class AttachmentAction extends Action 'type'=>'application/json+oembed', 'href'=>common_local_url( 'api', - array('apiaction'=>'laconica','method'=>'oembed.json'), + array('apiaction'=>'oembed','method'=>'oembed.json'), array('url'=> common_local_url('attachment', array('attachment' => $this->attachment->id)))), @@ -113,7 +113,7 @@ class AttachmentAction extends Action 'type'=>'text/xml+oembed', 'href'=>common_local_url( 'api', - array('apiaction'=>'laconica','method'=>'oembed.xml'), + array('apiaction'=>'oembed','method'=>'oembed.xml'), array('url'=> common_local_url('attachment', array('attachment' => $this->attachment->id)))), diff --git a/actions/shownotice.php b/actions/shownotice.php index 4cf226f1c..8f73dc824 100644 --- a/actions/shownotice.php +++ b/actions/shownotice.php @@ -279,14 +279,14 @@ class ShownoticeAction extends OwnerDesignAction 'type'=>'application/json+oembed', 'href'=>common_local_url( 'api', - array('apiaction'=>'laconica','method'=>'oembed.json'), + 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'=>'laconica','method'=>'oembed.xml'), + array('apiaction'=>'oembed','method'=>'oembed.xml'), array('url'=>$this->notice->uri)), 'title'=>'oEmbed'),null); } diff --git a/actions/twitapilaconica.php b/actions/twitapilaconica.php index 114dff6ee..442fdbcef 100644 --- a/actions/twitapilaconica.php +++ b/actions/twitapilaconica.php @@ -172,124 +172,4 @@ class TwitapilaconicaAction extends TwitterapiAction $this->serverError(_('API method under construction.'), 501); } - function oembed($args, $apidata) - { - parent::handle($args); - - common_debug("in oembed api action"); - - $this->auth_user = $apidata['user']; - - $url = $args['url']; - if( substr(strtolower($url),0,strlen(common_root_url())) == strtolower(common_root_url()) ){ - $path = substr($url,strlen(common_root_url())); - - $r = Router::get(); - - $proxy_args = $r->map($path); - - if (!$proxy_args) { - $this->serverError(_("$path not found"), 404); - } - $oembed=array(); - $oembed['version']='1.0'; - $oembed['provider_name']=common_config('site', 'name'); - $oembed['provider_url']=common_root_url(); - switch($proxy_args['action']){ - case 'shownotice': - $oembed['type']='link'; - $id = $proxy_args['notice']; - $notice = Notice::staticGet($id); - if(empty($notice)){ - $this->serverError(_("notice $id not found"), 404); - } - $profile = $notice->getProfile(); - if (empty($profile)) { - $this->serverError(_('Notice has no profile'), 500); - } - if (!empty($profile->fullname)) { - $authorname = $profile->fullname . ' (' . $profile->nickname . ')'; - } else { - $authorname = $profile->nickname; - } - $oembed['title'] = sprintf(_('%1$s\'s status on %2$s'), - $authorname, - common_exact_date($notice->created)); - $oembed['author_name']=$authorname; - $oembed['author_url']=$profile->profileurl; - $oembed['url']=($notice->url?$notice->url:$notice->uri); - $oembed['html']=$notice->rendered; - break; - case 'attachment': - $id = $proxy_args['attachment']; - $attachment = File::staticGet($id); - if(empty($attachment)){ - $this->serverError(_("attachment $id not found"), 404); - } - if(empty($attachment->filename) && $file_oembed = File_oembed::staticGet('file_id', $attachment->id)){ - // Proxy the existing oembed information - $oembed['type']=$file_oembed->type; - $oembed['provider']=$file_oembed->provider; - $oembed['provider_url']=$file_oembed->provider_url; - $oembed['width']=$file_oembed->width; - $oembed['height']=$file_oembed->height; - $oembed['html']=$file_oembed->html; - $oembed['title']=$file_oembed->title; - $oembed['author_name']=$file_oembed->author_name; - $oembed['author_url']=$file_oembed->author_url; - $oembed['url']=$file_oembed->url; - }else if(substr($attachment->mimetype,0,strlen('image/'))=='image/'){ - $oembed['type']='photo'; - //TODO set width and height - //$oembed['width']= - //$oembed['height']= - $oembed['url']=$attachment->url; - }else{ - $oembed['type']='link'; - $oembed['url']=common_local_url('attachment', - array('attachment' => $attachment->id)); - } - if($attachment->title) $oembed['title']=$attachment->title; - break; - default: - $this->serverError(_("$path not supported for oembed requests"), 501); - } - - switch($apidata['content-type']){ - case 'xml': - $this->init_document('xml'); - $this->elementStart('oembed'); - $this->element('version',null,$oembed['version']); - $this->element('type',null,$oembed['type']); - if($oembed['provider_name']) $this->element('provider_name',null,$oembed['provider_name']); - if($oembed['provider_url']) $this->element('provider_url',null,$oembed['provider_url']); - if($oembed['title']) $this->element('title',null,$oembed['title']); - if($oembed['author_name']) $this->element('author_name',null,$oembed['author_name']); - if($oembed['author_url']) $this->element('author_url',null,$oembed['author_url']); - if($oembed['url']) $this->element('url',null,$oembed['url']); - if($oembed['html']) $this->element('html',null,$oembed['html']); - if($oembed['width']) $this->element('width',null,$oembed['width']); - if($oembed['height']) $this->element('height',null,$oembed['height']); - if($oembed['cache_age']) $this->element('cache_age',null,$oembed['cache_age']); - if($oembed['thumbnail_url']) $this->element('thumbnail_url',null,$oembed['thumbnail_url']); - if($oembed['thumbnail_width']) $this->element('thumbnail_width',null,$oembed['thumbnail_width']); - if($oembed['thumbnail_height']) $this->element('thumbnail_height',null,$oembed['thumbnail_height']); - - - $this->elementEnd('oembed'); - $this->end_document('xml'); - break; - case 'json': - $this->init_document('json'); - print(json_encode($oembed)); - $this->end_document('json'); - break; - default: - $this->serverError(_('content type ' . $apidata['content-type'] . ' not supported'), 501); - } - - }else{ - $this->serverError(_('Only ' . common_root_url() . ' urls over plain http please'), 404); - } - } } diff --git a/lib/router.php b/lib/router.php index 652d2a266..bf3895bf0 100644 --- a/lib/router.php +++ b/lib/router.php @@ -113,6 +113,11 @@ class Router $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 foreach (array('register', 'confirmaddress', 'recoverpassword') as $c) { -- cgit v1.2.3-54-g00ecf