3
BrightKite interface for Gwibber
4
SegPhault (Ryan Paul) - 10/19/2008
8
import urllib2, urllib, base64, re, support, can, simplejson
9
from xml.dom import minidom
31
can.GEO_FRIEND_POSITIONS
35
NICK_PARSE = re.compile("@([A-Za-z0-9]+)")
36
HASH_PARSE = re.compile("#([A-Za-z0-9_\-.]+)")
39
def __init__(self, client, data):
41
self.account = client.account
42
self.protocol = client.account["protocol"]
43
self.username = client.account["username"]
44
self.sender = data["user"]["name"]
45
self.sender_nick = data["user"]["screen_name"]
46
self.sender_id = data["user"]["id"]
47
self.time = support.parse_time(data["created_at"])
48
self.text = support.xml_escape(data["text"])
49
self.image = data["user"]["profile_image_url"]
50
self.bgcolor = "message_color"
51
self.url = "http://identi.ca/notice/%s" % data["id"] # % (data["user"]["screen_name"], data["id"])
52
self.profile_url = "http://identi.ca/%s" % data["user"]["screen_name"]
53
self.html_string = '<span class="text">%s</span>' % \
54
HASH_PARSE.sub('#<a class="inlinehash" href="http://identi.ca/tag/\\1">\\1</a>',
55
NICK_PARSE.sub('@<a class="inlinenick" href="http://identi.ca/\\1">\\1</a>',
56
support.linkify(self.text)))
57
self.is_reply = ("@%s" % self.username) in self.text
60
def __init__(self, client, data):
62
self.account = client.account
63
self.protocol = client.account["protocol"]
64
self.username = client.account["username"]
65
self.sender = data["fullname"]
66
self.sender_nick = data["login"]
67
self.sender_id = self.sender_nick
68
self.time = support.parse_time(data["last_checked_in"])
69
self.text = data["place"]["display_location"]
70
self.image = data["small_avatar_url"]
71
self.image_small = data["smaller_avatar_url"]
72
self.bgcolor = "message_color"
73
self.url = "http://brightkite.com" # TODO
74
self.profile_url = "http://brightkite.com" # TODO
78
self.location_longitude = data["place"]["longitude"]
79
self.location_latitude = data["place"]["latitude"]
80
self.location_id = data["place"]["id"]
81
self.location_name = data["place"]["name"]
82
self.location_fullname = data["place"]["display_location"]
85
def __init__(self, acct):
89
return "Basic %s" % base64.encodestring(
90
("%s:%s" % (self.account["username"], self.account["password"]))).strip()
92
def connect(self, url, data = None):
93
return urllib2.urlopen(urllib2.Request(
94
url, data, {"Authorization": self.get_auth()})).read()
96
def get_friend_positions(self):
97
return simplejson.loads(self.connect(
98
"http://brightkite.com/me/friends.json"))
100
def get_messages(self):
101
return simplejson.loads(self.connect(
102
"http://identi.ca/api/statuses/friends_timeline.json"))
104
def get_responses(self):
105
return simplejson.loads(self.connect(
106
"http://identi.ca/api/statuses/replies.json"))
108
def get_search(self, query):
109
return minidom.parseString(urllib2.urlopen(
110
urllib2.Request("http://identi.ca/search/notice/rss",
111
urllib.urlencode({"q": query}))).read()).getElementsByTagName("item")
113
def friend_positions(self):
114
for data in self.get_friend_positions():
115
yield FriendPosition(self, data)
117
def search(self, query):
118
for data in self.get_search(query):
119
yield SearchResult(self, data, query)
122
for data in self.get_responses():
123
yield Message(self, data)
126
for data in self.get_messages():
127
yield Message(self, data)
129
def send(self, message):
130
return self.connect("http://identi.ca/api/statuses/update.json",
131
urllib.urlencode({"status":message}))