9
import urllib2, urllib, base64, re, support, can, simplejson
10
from xml.dom import minidom
9
import urllib2, urllib, base64, re, support, can, simplejson, feedparser
13
12
"name": "Identi.ca",
38
37
NICK_PARSE = re.compile("\B@([A-Za-z0-9_]+|@[A-Za-z0-9_]$)")
39
38
HASH_PARSE = re.compile("\B#([A-Za-z0-9_\-]+|@[A-Za-z0-9_\-]$)")
40
def _posticon(self, a): self._getContext()["laconica_posticon"] = a["rdf:resource"]
41
def _has_creator(self, a): self._getContext()["sioc_has_creator"] = a["rdf:resource"]
42
feedparser._FeedParserMixin._start_laconica_posticon = _posticon
43
feedparser._FeedParserMixin._start_sioc_has_creator = _has_creator
42
46
def __init__(self, client, data):
43
47
self.client = client
44
48
self.account = client.account
45
49
self.protocol = client.account["protocol"]
46
50
self.username = client.account["username"]
48
51
self.sender = data["user"]["name"]
49
52
self.sender_nick = data["user"]["screen_name"]
50
53
self.sender_id = data["user"]["id"]
66
69
self.account = client.account
67
70
self.protocol = client.account["protocol"]
68
71
self.username = client.account["username"]
70
self.sender = data.getElementsByTagName("dc:creator")[0].firstChild.nodeValue
71
self.sender_nick = data.getElementsByTagName("title")[0].firstChild.nodeValue.split(":")[0]
72
self.sender = data.author
73
self.sender_nick = data.title.split(":")[0]
72
74
self.sender_id = self.sender_nick
73
self.time = support.parse_time(data.getElementsByTagName("dc:date")[0].firstChild.nodeValue)
74
self.text = data.getElementsByTagName("title")[0].firstChild.nodeValue.split(":", 1)[1].strip()
75
self.image = data.getElementsByTagName("laconica:postIcon")[0].getAttribute("rdf:resource").replace("-96-", "-48-")
75
self.time = support.parse_time(data.updated)
76
self.text = data.title.split(":", 1)[1].strip()
77
self.image = data.laconica_posticon.replace("-96-", "-48-")
76
78
self.bgcolor = "message_color"
77
self.url = data.getAttribute("rdf:about")
78
self.profile_url = data.getElementsByTagName("sioc:has_creator")[0].getAttribute("rdf:resource")
80
self.profile_url = data.sioc_has_creator
80
81
self.html_string = '<span class="text">%s</span>' % \
81
82
HASH_PARSE.sub('#<a class="inlinehash" href="gwibber:tag/\\1">\\1</a>',
82
83
NICK_PARSE.sub('@<a class="inlinenick" href="http://identi.ca/\\1">\\1</a>',
105
106
"http://identi.ca/api/statuses/replies.json"))
107
108
def get_search(self, query):
108
return minidom.parseString(urllib2.urlopen(
109
return feedparser.parse(urllib2.urlopen(
109
110
urllib2.Request("http://identi.ca/search/notice/rss",
110
urllib.urlencode({"q": query}))).read()).getElementsByTagName("item")
111
urllib.urlencode({"q": query}))))["entries"]
112
113
def get_tag(self, query):
113
return minidom.parseString(urllib2.urlopen(
114
return feedparser.parse(urllib2.urlopen(
114
115
urllib2.Request("http://identi.ca/index.php",
115
116
urllib.urlencode({"action": "tagrss", "tag":
116
query}))).read()).getElementsByTagName("item")
117
query}))))["entries"]
118
119
def search(self, query):
119
120
for data in self.get_search(query):