summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/rssaction.php55
1 files changed, 53 insertions, 2 deletions
diff --git a/lib/rssaction.php b/lib/rssaction.php
index 6e2efc182..6409b1b93 100644
--- a/lib/rssaction.php
+++ b/lib/rssaction.php
@@ -21,6 +21,9 @@ if (!defined('LACONICA')) { exit(1); }
define('DEFAULT_RSS_LIMIT', 48);
+# This will contain the details of each feed item's author and be used to generate SIOC data.
+$creators = array();
+
class Rss10Action extends Action {
function handle($args) {
@@ -67,6 +70,7 @@ class Rss10Action extends Action {
$this->show_item($n);
}
+ $this->show_creators();
$this->end_rss();
}
@@ -90,7 +94,7 @@ class Rss10Action extends Action {
common_element_start('rdf:Seq');
foreach ($notices as $notice) {
- common_element('rdf:li', array('rdf:resource' => $notice->uri));
+ common_element('sioct:MicroblogPost', array('rdf:resource' => $notice->uri));
}
common_element_end('rdf:Seq');
@@ -112,7 +116,7 @@ class Rss10Action extends Action {
}
function show_item($notice) {
- global $config;
+ global $config, $creators;
$profile = Profile::staticGet($notice->profile_id);
$nurl = common_local_url('shownotice', array('notice' => $notice->id));
common_element_start('item', array('rdf:about' => $notice->uri));
@@ -122,11 +126,43 @@ class Rss10Action extends Action {
common_element('description', NULL, $profile->nickname."'s status on ".common_exact_date($notice->created));
common_element('dc:date', NULL, common_date_w3dtf($notice->created));
common_element('dc:creator', NULL, ($profile->fullname) ? $profile->fullname : $profile->nickname);
+ common_element('sioc:has_creator', array('rdf:resource' =>
+ common_local_url('userbyid', array('id' => $profile->id))
+ ));
common_element('cc:licence', array('rdf:resource' => $config['license']['url']));
common_element_end('item');
+ $creators[$nurl] = $profile;
}
+ function show_creators() {
+ global $creators;
+
+ foreach ($creators as $nurl => $profile) {
+ $id = $profile->id;
+ $nickname = $profile->nickname;
+
+ common_element_start('sioc:User', array('rdf:about' =>
+ common_local_url('userbyid', array('id' => $id))
+ ));
+ common_element('foaf:nick', NULL, $nickname);
+ if ($profile->fullname) {
+ common_element('foaf:name', NULL, $profile->fullname);
+ }
+ common_element('sioc:id', NULL, $id);
+ common_element('sioc:avatar', array('rdf:resource' =>
+ common_local_url('avatarbynickname',
+ array('nickname' => $nickname,
+ 'size' => 48
+ ))
+ ));
+ common_element_end('sioc:User');
+ }
+ }
+
function init_rss() {
+ global $config;
+ $channel = $this->get_channel();
+
header('Content-Type: application/rdf+xml');
common_start_xml();
@@ -136,7 +172,22 @@ class Rss10Action extends Action {
'http://purl.org/dc/elements/1.1/',
'xmlns:cc' =>
'http://web.resource.org/cc/',
+ 'xmlns:foaf' =>
+ 'http://xmlns.com/foaf/0.1/',
+ 'xmlns:sioc' =>
+ 'http://rdfs.org/sioc/ns#',
+ 'xmlns:sioct' =>
+ 'http://rdfs.org/sioc/types#',
'xmlns' => 'http://purl.org/rss/1.0/'));
+
+ common_element_start('sioc:Site', array('rdf:about' =>
+ 'http://identi.ca/'));
+ common_element('sioc:name', NULL, $config['site']['name']);
+ common_element_start('sioc:container_of');
+ common_element('sioc:Container', array('rdf:about' =>
+ $channel['url']));
+ common_element_end('sioc:container_of');
+ common_element_end('sioc:Site');
}
function end_rss() {