1
from gwibber.microblog import network, util
2
from gwibber.microblog.util import resources
3
from gettext import lgettext as _
36
URL_PREFIX = "http://www.qaiku.com"
39
def __init__(self, acct):
42
def _common(self, data):
44
m["mid"] = str(data["id"])
45
m["service"] = "qaiku"
46
m["account"] = self.account["id"]
47
m["time"] = util.parsetime(data["created_at"])
48
m["text"] = data["text"]
49
m["to_me"] = ("@%s" % self.account["username"]) in data["text"]
51
m["html"] = data["html"]
53
# TODO: Change Qaiku's @-links to people to Gwibber-internal ones
54
m["content"] = data["html"]
56
if (data["external_url"]):
57
# Qaiku posts can have external links in them, display that under the message
58
m["content"] += "<p><a href=\"" + data["external_url"] + "\">" + data["external_url"] + "</a></p>"
60
# TODO: Display picture Qaikus
62
if "channel" in data and data["channel"]:
63
# Put message's Qaiku channel as "source" so it will be displayed in the UI
64
m["source"] = "<a href=\"http://www.qaiku.com/channels/show/" + data["channel"] + "/\">#" + data["channel"] + "</a>"
66
if "in_reply_to_status_id" in data and data["in_reply_to_status_id"]:
68
m["reply"]["id"] = data["in_reply_to_status_id"]
69
m["reply"]["nick"] = data["in_reply_to_screen_name"]
70
m["reply"]["url"] = data["in_reply_to_status_url"]
74
def _message(self, data):
75
m = self._common(data)
77
img = user["profile_image_url"]
80
m["sender"]["name"] = user["name"]
81
m["sender"]["nick"] = user["screen_name"]
82
m["sender"]["id"] = user["id"]
83
m["sender"]["location"] = user.get("location", "")
84
m["sender"]["followers"] = user["followers_count"]
85
m["sender"]["image"] = "/".join((URL_PREFIX, img)) if img[0] == "/" else img
86
m["sender"]["url"] = user["url"]
87
m["sender"]["is_me"] = m["sender"]["nick"] == self.account["username"]
88
m["url"] = "/".join((m["sender"]["url"], "show", m["mid"]))
92
def _get(self, path, parse="message", post=False, single=False, **args):
93
url = "/".join((URL_PREFIX, "api", path))
94
url += ("&" if "?" in url else "?") + "apikey=%s" % self.account["password"]
95
data = network.Download(url, util.compact(args) or None, post).get_json()
97
resources.dump(self.account["service"], self.account["id"], data)
99
if single: return [getattr(self, "_%s" % parse)(data)]
100
if parse: return [getattr(self, "_%s" % parse)(m) for m in data]
103
def __call__(self, opname, **args):
104
return getattr(self, opname)(**args)
107
return self._get("statuses/friends_timeline.json")
109
def user_messages(self, id=None):
110
return self._get("statuses/user_timeline.json", screen_name=id)
113
return self._get("statuses/mentions.json")
115
def send(self, message):
116
return self._get("statuses/update.json", post=True, single=True, status=message, source='gwibbernet')
118
def send_thread(self, message, target):
119
recipient = target.get("reply", {}).get("id", 0) or target.get("mid", 0)
120
return self._get("statuses/update.json", post=True, single=True,
121
status=message, in_reply_to_status_id=recipient, source='gwibbernet')