~greg.grossmeier/+junk/laconica.groups

« back to all changes in this revision

Viewing changes to gwibber/microblog/identica.py

  • Committer: Ryan Paul
  • Date: 2008-12-28 02:52:41 UTC
  • Revision ID: segphault@arstechnica.com-20081228025241-njioksqcdkuno9l5
Refactored microblog library to eliminate minidom usage

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
 
7
7
"""
8
8
 
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
11
10
 
12
11
PROTOCOL_INFO = {
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
39
 
 
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
 
44
 
41
45
class Message:
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"]
47
 
    self.data = data
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"]
69
 
    self.data = data
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")
79
 
 
 
79
    self.url = data.link
 
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"))
106
107
 
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"]
111
112
 
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"]
117
118
 
118
119
  def search(self, query):
119
120
    for data in self.get_search(query):