Merge lp:~xndchn/gwibber/buzz into lp:gwibber

Proposed by xndcn
Status: Rejected
Rejected by: Ken VanDine
Proposed branch: lp:~xndchn/gwibber/buzz
Merge into: lp:gwibber
Diff against target: 189 lines (+86/-16)
2 files modified
gwibber/microblog/plugins/buzz/__init__.py (+83/-12)
gwibber/microblog/plugins/buzz/gtk/buzz/__init__.py (+3/-4)
To merge this branch: bzr merge lp:~xndchn/gwibber/buzz
Reviewer Review Type Date Requested Status
Ken VanDine Disapprove
Review via email: mp+43187@code.launchpad.net

Description of the change

Fix buzz Authorize
Add buzz features: search, like and delete.
Fix buzz features: reply.

To post a comment you must log in.
Revision history for this message
Ken VanDine (ken-vandine) wrote :

Buzz is no longer supported, thanks for your submission.

review: Disapprove
Revision history for this message
xndcn (xndchn) wrote :

Wow! One and half years ago! I really forgot it! :-)

Unmerged revisions

935. By xndcn

Fix buzz Authorize

934. By xndcn

Fix buzz login.
Add buzz features: search, like and delete.
Fix buzz features: reply.

933. By xndcn

Fix Buzz

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'gwibber/microblog/plugins/buzz/__init__.py'
2--- gwibber/microblog/plugins/buzz/__init__.py 2010-10-18 21:56:15 +0000
3+++ gwibber/microblog/plugins/buzz/__init__.py 2010-12-09 11:17:54 +0000
4@@ -1,10 +1,11 @@
5 from gwibber.microblog import network, util
6+import urllib, pycurl, StringIO
7 import json
8 from oauth import oauth
9
10 PROTOCOL_INFO = {
11 "name": "Buzz",
12- "version": "1.0",
13+ "version": "1.1",
14
15 "config": [
16 "color",
17@@ -19,9 +20,12 @@
18 "color": "#0773DD",
19
20 "features": [
21+ "search",
22 "receive",
23 "send",
24 "reply",
25+ "delete",
26+ "like",
27 "send_thread",
28 "user_messages",
29 ],
30@@ -37,10 +41,10 @@
31 def __init__(self, acct):
32 self.account = acct
33 self.sigmethod = oauth.OAuthSignatureMethod_HMAC_SHA1()
34- self.consumer = oauth.OAuthConsumer("anonymous", "anonymous")
35+ self.consumer = oauth.OAuthConsumer("anonymous", "anonymous")
36 self.token = oauth.OAuthToken(acct["access_token"], acct["secret_token"])
37
38- def _actor(self, user):
39+ def _actor(self, user):
40 return {
41 "name": user["name"],
42 "nick": user["id"],
43@@ -97,39 +101,106 @@
44
45 return m
46
47- def _get(self, path, collection="items", parse="message", post=False, single=False, body=None, **args):
48+ def _get(self, path, count=util.COUNT, collection="items", parse="message", post=False, single=False, body=None, **args):
49 url = "/".join((URL_PREFIX, path))
50 args.update({"alt": "json"})
51-
52+ args.update({"max-results": count})
53+
54 request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, self.token,
55 http_method=post and "POST" or "GET", http_url=url, parameters=util.compact(args))
56 request.sign_request(self.sigmethod, self.consumer, self.token)
57-
58+
59 data = network.Download(request.to_url(), None, post,
60- header=["Content-Type: application/json"] if body else None, body=body)
61+ header=["Content-Type: application/json"] if body else None, body=body)
62
63 data = data.get_json()
64
65 if single: return [getattr(self, "_%s" % parse)(data["data"])]
66 if parse: return [getattr(self, "_%s" % parse)(m) for m in data["data"][collection]]
67 else: return []
68+
69+ def _del(self, path):
70+ url = "/".join((URL_PREFIX, path))
71+ curl = pycurl.Curl()
72+
73+ request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, self.token,
74+ http_method="DELETE", http_url=url)
75+ request.sign_request(self.sigmethod, self.consumer, self.token)
76+
77+ curl.setopt(pycurl.URL, str(request.to_url()))
78+ curl.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json']);
79+ curl.setopt(pycurl.FOLLOWLOCATION, 1)
80+ curl.setopt(pycurl.MAXREDIRS, 5)
81+ curl.setopt(pycurl.TIMEOUT, 150)
82+
83+ curl.setopt(pycurl.CUSTOMREQUEST, "DELETE")
84+ curl.setopt(pycurl.HTTP_VERSION, pycurl.CURL_HTTP_VERSION_1_0)
85+ content = StringIO.StringIO()
86+ curl.setopt(pycurl.WRITEFUNCTION, content.write)
87+
88+ try:
89+ curl.perform()
90+ except pycurl.error, e:
91+ log.logger.error("Network failure - error: %d - %s", e[0], e[1])
92+ return []
93+
94+ return []
95+
96+ def _put(self, path, body):
97+ url = "/".join((URL_PREFIX, path))
98+ curl = pycurl.Curl()
99+
100+ request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, self.token,
101+ http_method="PUT", http_url=url)
102+ request.sign_request(self.sigmethod, self.consumer, self.token)
103+
104+ curl.setopt(pycurl.URL, str(request.to_url()))
105+ curl.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json', 'Content-Length: %d' % len(body)]);
106+ curl.setopt(pycurl.FOLLOWLOCATION, 1)
107+ curl.setopt(pycurl.MAXREDIRS, 5)
108+ curl.setopt(pycurl.TIMEOUT, 150)
109+
110+ curl.setopt(pycurl.INFILESIZE, len(body))
111+ curl.setopt(pycurl.UPLOAD, 1)
112+ curl.setopt(pycurl.HTTP_VERSION, pycurl.CURL_HTTP_VERSION_1_0)
113+ content = StringIO.StringIO()
114+ curl.setopt(pycurl.WRITEFUNCTION, content.write)
115+ s = StringIO.StringIO(body)
116+ curl.setopt(pycurl.READFUNCTION, s.read)
117+
118+ try:
119+ curl.perform()
120+ except pycurl.error, e:
121+ log.logger.error("Network failure - error: %d - %s", e[0], e[1])
122+ return []
123+ return []
124
125 def __call__(self, opname, **args):
126 return getattr(self, opname)(**args)
127+
128+ def search(self, **args):
129+ return self._get("activities/search", q=args["query"])
130
131 def receive(self, count=util.COUNT, since=None):
132- return self._get("activities/@me/@consumption")
133+ return self._get("activities/@me/@consumption", count)
134
135 def user_messages(self, id, count=util.COUNT, since=None):
136- print id
137- return self._get("activities/%s/@self" % id)
138+ return self._get("activities/%s/@self" % id, count)
139+
140+ def delete(self, message):
141+ self._del("activities/@me/@self/" + message["mid"])
142+ return []
143
144 def send(self, message):
145 text = json.dumps({"data": {"object": {"type": "note", "content": message}}})
146 return self._get("activities/@me/@self", post=True, single=True, body=text)
147-
148+
149+ def like(self, message):
150+ path = "activities/@me/@liked/%s" % (message["mid"])
151+ return self._put(path, body="")
152+
153 def send_thread(self, message, target):
154- text = json.dumps({"data": {"object": {"content": message}}})
155+ text = json.dumps({"data": {"content": message}})
156 path = "activities/%s/@self/%s/@comments" % (target["sender"]["id"], target["mid"])
157 self._get(path, post=True, single=True, body=text)
158 return []
159
160=== modified file 'gwibber/microblog/plugins/buzz/gtk/buzz/__init__.py'
161--- gwibber/microblog/plugins/buzz/gtk/buzz/__init__.py 2010-10-27 22:36:59 +0000
162+++ gwibber/microblog/plugins/buzz/gtk/buzz/__init__.py 2010-12-09 11:17:54 +0000
163@@ -64,8 +64,7 @@
164
165 tokendata = urllib2.urlopen(request.http_url, request.to_postdata()).read()
166 self.token = oauth.OAuthToken.from_string(tokendata)
167-
168- url = "https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=" + self.token.key
169+ url = "https://www.google.com/buzz/api/auth/OAuthAuthorizeToken?oauth_token=" + self.token.key + "&domain=gwibber.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fbuzz"
170
171 web.open(url)
172 web.set_size_request(450, 340)
173@@ -82,7 +81,7 @@
174
175 def on_buzz_auth_title_change(self, web=None, title=None, data=None):
176 if title.get_title() == "Success":
177- url = web.get_main_frame().get_uri()
178+ url = web.get_main_frame().get_uri()
179 data = urlparse.parse_qs(url.split("?", 1)[1])
180 verifier = data["oauth_verifier"][0]
181 self.token.set_verifier(verifier)
182@@ -93,7 +92,7 @@
183
184 tokendata = urllib2.urlopen(request.to_url()).read()
185 data = urlparse.parse_qs(tokendata)
186-
187+
188 self.account["access_token"] = data["oauth_token"][0]
189 self.account["secret_token"] = data["oauth_token_secret"][0]
190

Subscribers

People subscribed via source and target branches