Add statusnet: prefix for API to JSON and XML output

I added the statusnet: prefix to the xml output. This prefix should
be declared on the root element of all relevant XML output.

I also added two StatusNet-specific fields:

* statusnet:html - rendered HTML. Clients shouldn't have to guess
  at the correct HTML rendering for notices, especially since some
  of the links depend on context.
* statusnet:profile_url - profile URL for a user. You can't count
  on a user being a local user in a distributed microblogging world.
  So, this shows the explicit profile_url.
This commit is contained in:
Evan Prodromou 2010-04-22 08:49:33 -07:00
parent fd9d520aeb
commit beaecb18d5
3 changed files with 35 additions and 12 deletions

View File

@ -232,7 +232,8 @@ class ApiDirectMessageAction extends ApiAuthAction
function showXmlDirectMessages() function showXmlDirectMessages()
{ {
$this->initDocument('xml'); $this->initDocument('xml');
$this->elementStart('direct-messages', array('type' => 'array')); $this->elementStart('direct-messages', array('type' => 'array',
'xmlns:statusnet' => 'http://status.net/schema/api/1/'));
foreach ($this->messages as $m) { foreach ($this->messages as $m) {
$dm_array = $this->directMessageArray($m); $dm_array = $this->directMessageArray($m);

View File

@ -113,7 +113,7 @@ class ApiUserShowAction extends ApiPrivateAuthAction
if ($this->format == 'xml') { if ($this->format == 'xml') {
$this->initDocument('xml'); $this->initDocument('xml');
$this->showTwitterXmlUser($twitter_user); $this->showTwitterXmlUser($twitter_user, 'user', true);
$this->endDocument('xml'); $this->endDocument('xml');
} elseif ($this->format == 'json') { } elseif ($this->format == 'json') {
$this->initDocument('json'); $this->initDocument('json');

View File

@ -223,6 +223,10 @@ class ApiAction extends Action
} }
} }
// StatusNet-specific
$twitter_user['statusnet:profile_url'] = $profile->profileurl;
return $twitter_user; return $twitter_user;
} }
@ -308,6 +312,10 @@ class ApiAction extends Action
$twitter_status['user'] = $twitter_user; $twitter_status['user'] = $twitter_user;
} }
// StatusNet-specific
$twitter_status['statusnet:html'] = $notice->rendered;
return $twitter_status; return $twitter_status;
} }
@ -475,9 +483,13 @@ class ApiAction extends Action
} }
} }
function showTwitterXmlStatus($twitter_status, $tag='status') function showTwitterXmlStatus($twitter_status, $tag='status', $namespaces=false)
{ {
$this->elementStart($tag); $attrs = array();
if ($namespaces) {
$attrs['xmlns:statusnet'] = 'http://status.net/schema/api/1/';
}
$this->elementStart($tag, $attrs);
foreach($twitter_status as $element => $value) { foreach($twitter_status as $element => $value) {
switch ($element) { switch ($element) {
case 'user': case 'user':
@ -511,9 +523,13 @@ class ApiAction extends Action
$this->elementEnd('group'); $this->elementEnd('group');
} }
function showTwitterXmlUser($twitter_user, $role='user') function showTwitterXmlUser($twitter_user, $role='user', $namespaces=false)
{ {
$this->elementStart($role); $attrs = array();
if ($namespaces) {
$attrs['xmlns:statusnet'] = 'http://status.net/schema/api/1/';
}
$this->elementStart($role, $attrs);
foreach($twitter_user as $element => $value) { foreach($twitter_user as $element => $value) {
if ($element == 'status') { if ($element == 'status') {
$this->showTwitterXmlStatus($twitter_user['status']); $this->showTwitterXmlStatus($twitter_user['status']);
@ -595,7 +611,7 @@ class ApiAction extends Action
{ {
$this->initDocument('xml'); $this->initDocument('xml');
$twitter_status = $this->twitterStatusArray($notice); $twitter_status = $this->twitterStatusArray($notice);
$this->showTwitterXmlStatus($twitter_status); $this->showTwitterXmlStatus($twitter_status, 'status', true);
$this->endDocument('xml'); $this->endDocument('xml');
} }
@ -611,7 +627,8 @@ class ApiAction extends Action
{ {
$this->initDocument('xml'); $this->initDocument('xml');
$this->elementStart('statuses', array('type' => 'array')); $this->elementStart('statuses', array('type' => 'array',
'xmlns:statusnet' => 'http://status.net/schema/api/1/'));
if (is_array($notice)) { if (is_array($notice)) {
foreach ($notice as $n) { foreach ($notice as $n) {
@ -778,9 +795,13 @@ class ApiAction extends Action
$this->elementEnd('entry'); $this->elementEnd('entry');
} }
function showXmlDirectMessage($dm) function showXmlDirectMessage($dm, $namespaces=false)
{ {
$this->elementStart('direct_message'); $attrs = array();
if ($namespaces) {
$attrs['xmlns:statusnet'] = 'http://status.net/schema/api/1/';
}
$this->elementStart('direct_message', $attrs);
foreach($dm as $element => $value) { foreach($dm as $element => $value) {
switch ($element) { switch ($element) {
case 'sender': case 'sender':
@ -857,7 +878,7 @@ class ApiAction extends Action
{ {
$this->initDocument('xml'); $this->initDocument('xml');
$dmsg = $this->directMessageArray($message); $dmsg = $this->directMessageArray($message);
$this->showXmlDirectMessage($dmsg); $this->showXmlDirectMessage($dmsg, true);
$this->endDocument('xml'); $this->endDocument('xml');
} }
@ -974,7 +995,8 @@ class ApiAction extends Action
{ {
$this->initDocument('xml'); $this->initDocument('xml');
$this->elementStart('users', array('type' => 'array')); $this->elementStart('users', array('type' => 'array',
'xmlns:statusnet' => 'http://status.net/schema/api/1/'));
if (is_array($user)) { if (is_array($user)) {
foreach ($user as $u) { foreach ($user as $u) {