-
Notifications
You must be signed in to change notification settings - Fork 3
/
xmlToActivityStream.js
81 lines (70 loc) · 2.08 KB
/
xmlToActivityStream.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//this is adapted from @daleharvey's codez
exports.xmlToActivityStreamJson = function(xml) {
function zeroPad(n) {
return n < 10 ? '0' + n : n;
}
function rfc3339(date) {
return date.getUTCFullYear() + '-' +
zeroPad(date.getUTCMonth() + 1) + '-' +
zeroPad(date.getUTCDate()) + 'T' +
zeroPad(date.getUTCHours()) + ':' +
zeroPad(date.getUTCMinutes()) + ':' +
zeroPad(date.getUTCSeconds()) + 'Z';
};
var i, item, body, date, data,
re = /^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/,
str = xml.replace(re, ""),
feed = new XML(str);
// this is nasty, but its rss, its supposed to be nasty
// duck type rss vs atom
if (feed.channel.length() > 0) {
for (i = 0; i < feed.channel.item.length(); i++) {
item = feed.channel.item[i];
body = item.description.toString();
date = new Date(item.pubDate.toString());
if (!date) {
date = new Date();
}
data = {
title : item.title.toString(),
body : body,
link : item.link.toString(),
date : rfc3339(date),
sourceTitle : feed.channel.title.toString()
};
}
} else {
default xml namespace="http://www.w3.org/2005/Atom";
for each (item in feed..entry) {
body = item.content.toString();
date = new Date(item.updated.toString());
if (!date) {
date = new Date();
}
var link = null;
if('link' in item) link = item.link[0].@href.toString();
data = {
title : item.title.toString(),
body : body,
link : link,
date : rfc3339(date),
sourceTitle : feed.title.toString()
};
}
}
return {
"postedTime" : data.date,
"object" : {
"content" : data.body,
"permalinkUrl" : data.link,
"objectType" : "article",
"summary" : data.title
},
"verb" : "post",
"actor" : {
"permalinkUrl" : data.link,
"objectType" : "service",
"displayName" : data.sourceTitle
}
}
}