xitiomet / python-twitter
fork of python-twitter
Mostly the same, but i added support for Mentions http://apiwiki.twitter.com/Twitter-REST-API-Met...
Clone this repository (size: 393.3 KB): HTTPS / SSH
$ hg clone http://hg.openstatic.org/python-twitter
| commit 117: | 737a5a105dcf |
| parent 116: | 23adb15c0a18 |
| branch: | dclinton |
Added the builder for the search Results object.
16 months ago
Changed (Δ4.1 KB):
raw changeset »
twitter.proto (5 lines added, 3 lines removed)
twitter.py (46 lines added, 0 lines removed)
twitter_pb2.py (7 lines added, 7 lines removed)
twitter_test.py (34 lines added, 0 lines removed)
Up to file-list twitter.proto:
| … | … | @@ -119,7 +119,8 @@ message Results { |
119 |
119 |
optional string refresh_url = 6; |
120 |
120 |
repeated Result results = 7; |
121 |
121 |
optional uint64 since_id = 8; |
122 |
||
122 |
optional sint32 results_per_page = 9; |
|
123 |
||
123 |
124 |
message Result { |
124 |
125 |
optional string created_at = 1; |
125 |
126 |
optional string from_user = 2; |
| … | … | @@ -131,8 +132,9 @@ message Results { |
131 |
132 |
optional string text = 8; |
132 |
133 |
optional string to_user = 9; |
133 |
134 |
optional uint64 to_user_id = 10; |
134 |
optional sint32 results_per_page = 11; |
|
135 |
// 'since_id' moved to Results, do not reuse slot 12 |
|
135 |
// 'results_per_page' and 'since_id' moved to |
|
136 |
// Results. Do not reuse slots 11 or 12 |
|
137 |
// optional sint32 results_per_page = 11; |
|
136 |
138 |
// optional uint64 since_id = 12; |
137 |
139 |
} |
138 |
140 |
} |
| … | … | @@ -204,6 +204,52 @@ def NewDirectMessageFromJsonDict(data): |
204 |
204 |
return direct_message |
205 |
205 |
|
206 |
206 |
|
207 |
def NewResultsFromJsonDict(data): |
|
208 |
'''Create a new Results instance based on a JSON dict. |
|
209 |
||
210 |
Args: |
|
211 |
data: A JSON dict, as parsed from a twitter API response |
|
212 |
Returns: |
|
213 |
A Results instance |
|
214 |
''' |
|
215 |
results = twitter_pb2.Results() |
|
216 |
_CopyProperty(data, results, 'completed_in') |
|
217 |
_CopyProperty(data, results, 'max_id') |
|
218 |
_CopyProperty(data, results, 'next_page') |
|
219 |
_CopyProperty(data, results, 'page') |
|
220 |
_CopyProperty(data, results, 'query') |
|
221 |
_CopyProperty(data, results, 'refresh_url') |
|
222 |
_CopyProperty(data, results, 'since_id') |
|
223 |
_CopyProperty(data, results, 'results_per_page') |
|
224 |
if 'results' in data: |
|
225 |
for result_data in data['results']: |
|
226 |
result = results.results.add() |
|
227 |
result.CopyFrom(NewResultFromJsonDict(result_data)) |
|
228 |
return results |
|
229 |
||
230 |
||
231 |
def NewResultFromJsonDict(data): |
|
232 |
'''Create a new Result instance based on a JSON dict. |
|
233 |
||
234 |
Args: |
|
235 |
data: A JSON dict, as parsed from a twitter API response |
|
236 |
Returns: |
|
237 |
A Result instance |
|
238 |
''' |
|
239 |
result = twitter_pb2.Results.Result() |
|
240 |
_CopyProperty(data, result, 'created_at') |
|
241 |
_CopyProperty(data, result, 'from_user') |
|
242 |
_CopyProperty(data, result, 'from_user_id') |
|
243 |
_CopyProperty(data, result, 'id') |
|
244 |
_CopyProperty(data, result, 'iso_language_code') |
|
245 |
_CopyProperty(data, result, 'profile_image_url') |
|
246 |
_CopyProperty(data, result, 'source') |
|
247 |
_CopyProperty(data, result, 'text') |
|
248 |
_CopyProperty(data, result, 'to_user') |
|
249 |
_CopyProperty(data, result, 'to_user_id') |
|
250 |
return result |
|
251 |
||
252 |
||
207 |
253 |
class Api(object): |
208 |
254 |
'''A python interface into the Twitter API |
209 |
255 |
Up to file-list twitter_pb2.py:
| … | … | @@ -537,13 +537,6 @@ _RESULTS_RESULT = descriptor.Descriptor( |
537 |
537 |
message_type=None, enum_type=None, containing_type=None, |
538 |
538 |
is_extension=False, extension_scope=None, |
539 |
539 |
options=None), |
540 |
descriptor.FieldDescriptor( |
|
541 |
name='results_per_page', full_name='twitter.Results.Result.results_per_page', index=10, |
|
542 |
number=11, type=17, cpp_type=1, label=1, |
|
543 |
default_value=0, |
|
544 |
message_type=None, enum_type=None, containing_type=None, |
|
545 |
is_extension=False, extension_scope=None, |
|
546 |
options=None), |
|
547 |
540 |
], |
548 |
541 |
extensions=[ |
549 |
542 |
], |
| … | … | @@ -614,6 +607,13 @@ _RESULTS = descriptor.Descriptor( |
614 |
607 |
message_type=None, enum_type=None, containing_type=None, |
615 |
608 |
is_extension=False, extension_scope=None, |
616 |
609 |
options=None), |
610 |
descriptor.FieldDescriptor( |
|
611 |
name='results_per_page', full_name='twitter.Results.results_per_page', index=8, |
|
612 |
number=9, type=17, cpp_type=1, label=1, |
|
613 |
default_value=0, |
|
614 |
message_type=None, enum_type=None, containing_type=None, |
|
615 |
is_extension=False, extension_scope=None, |
|
616 |
options=None), |
|
617 |
617 |
], |
618 |
618 |
extensions=[ |
619 |
619 |
], |
Up to file-list twitter_test.py:
| … | … | @@ -148,6 +148,7 @@ class StatusTest(unittest.TestCase): |
148 |
148 |
status = twitter.NewStatusFromJsonDict(data) |
149 |
149 |
self.assertEqual(self._GetSampleStatus(), status) |
150 |
150 |
|
151 |
||
151 |
152 |
class UserTest(unittest.TestCase): |
152 |
153 |
|
153 |
154 |
SAMPLE_JSON = '''{"description": "Indeterminate things", "id": 673483, "location": "San Francisco, CA", "name": "DeWitt", "profile_image_url": "http://twitter.com/system/user/profile_image/673483/normal/me.jpg", "screen_name": "dewitt", "status": {"created_at": "Fri Jan 26 17:28:19 +0000 2007", "id": 4212713, "text": "\\"Select all\\" and archive your Gmail inbox. The page loads so much faster!"}, "url": "http://unto.net/"}''' |
| … | … | @@ -228,6 +229,39 @@ class UserTest(unittest.TestCase): |
228 |
229 |
self.assertEqual(self._GetSampleUser(), user) |
229 |
230 |
|
230 |
231 |
|
232 |
class ResultsTest(unittest.TestCase): |
|
233 |
||
234 |
SAMPLE_JSON = '''{"results":[{"text":"is loving how on twitter all these crazy popular celebraties seem like regular people like me & you....i <3 twitter","to_user_id":null,"from_user":"oxAly","id":1818791702,"from_user_id":6905503,"iso_language_code":"en","source":"<a href="http:\/\/twitter.com\/">web<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/212410949\/mommy__me_normal.jpg","created_at":"Sat, 16 May 2009 18:59:22 +0000"},{"text":"@ryanjoy what are u using for twitter nowadays... Twitterfon just added ads and the new update is no bueno","to_user_id":1002058,"to_user":"ryanjoy","from_user":"Tyler_Batten","id":1818791671,"from_user_id":2178043,"iso_language_code":"en","source":"<a href="http:\/\/twitterfon.net\/">TwitterFon<\/a>","profile_image_url":"http:\/\/s3.amazonaws.com\/twitter_production\/profile_images\/62948019\/Photo_249_normal.jpg","created_at":"Sat, 16 May 2009 18:59:22 +0000"}],"since_id":0,"max_id":1818791702,"refresh_url":"?since_id=1818791702&q=twitter","results_per_page":2,"next_page":"?page=2&max_id=1818791702&rpp=2&q=twitter","completed_in":0.016569,"page":1,"query":"twitter"}''' |
|
235 |
||
236 |
def testNewResultsFromJsonDict(self): |
|
237 |
data = simplejson.loads(ResultsTest.SAMPLE_JSON) |
|
238 |
results = twitter.NewResultsFromJsonDict(data) |
|
239 |
self.assertEqual(0.016569, results.completed_in) |
|
240 |
self.assertEqual(1818791702, results.max_id) |
|
241 |
self.assertEqual('?page=2&max_id=1818791702&rpp=2&q=twitter', |
|
242 |
results.next_page) |
|
243 |
self.assertEqual(1, results.page) |
|
244 |
self.assertEqual('twitter', results.query) |
|
245 |
self.assertEqual('?since_id=1818791702&q=twitter', |
|
246 |
results.refresh_url) |
|
247 |
self.assertEqual(2, results.results_per_page) |
|
248 |
self.assertEqual(0, results.since_id) |
|
249 |
self.assertEqual(2, len(results.results)) |
|
250 |
result = results.results[0] |
|
251 |
self.assertEqual('Sat, 16 May 2009 18:59:22 +0000', result.created_at) |
|
252 |
self.assertEqual('oxAly', result.from_user) |
|
253 |
self.assertEqual(6905503, result.from_user_id) |
|
254 |
self.assertEqual(1818791702, result.id) |
|
255 |
self.assertEqual('en', result.iso_language_code) |
|
256 |
self.assertFalse(result.HasField('to_user_id')) |
|
257 |
self.assertEqual('''is loving how on twitter all these crazy popular celebraties seem like regular people like me & you....i <3 twitter''', |
|
258 |
result.text) |
|
259 |
result = results.results[1] |
|
260 |
self.assertEqual(1818791671, result.id) |
|
261 |
self.assertEqual(1002058, result.to_user_id) |
|
262 |
self.assertEqual('ryanjoy', result.to_user) |
|
263 |
||
264 |
||
231 |
265 |
class FileCacheTest(unittest.TestCase): |
232 |
266 |
|
233 |
267 |
def testInit(self): |
