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.
dcli...@b35c0ba3-1128-0410-9219-0b39014e361d
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
}

Up to file-list twitter.py:

@@ -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):