]> jfr.im git - z_archive/twitter.git/commitdiff
Deal with the encoding problem
authorWes Devauld <redacted>
Mon, 20 Apr 2009 23:51:22 +0000 (17:51 -0600)
committerWes Devauld <redacted>
Mon, 20 Apr 2009 23:51:22 +0000 (17:51 -0600)
twitter/api.py
twitter/cmdline.py

index 5d9677ab060528149e6f9651a65f9ca56623ba2c..42ec7274c5d9da5b25950c4a79f5d13d28b38412 100644 (file)
@@ -26,20 +26,23 @@ class TwitterError(Exception):
 
 class TwitterCall(object):
     def __init__(
-        self, username, password, format, domain, uri="", agent=None):
+        self, username, password, format, domain, uri="", agent=None, encoded_args=None):
         self.username = username
         self.password = password
         self.format = format
         self.domain = domain
         self.uri = uri
         self.agent = agent
+        self.encoded_args = encoded_args
+
     def __getattr__(self, k):
         try:
             return object.__getattr__(self, k)
         except AttributeError:
             return TwitterCall(
                 self.username, self.password, self.format, self.domain,
-                self.uri + "/" + k, self.agent)
+                self.uri + "/" + k, self.agent, self.encoded_args)
+
     def __call__(self, **kwargs):
         uri = self.uri
         method = "GET"
@@ -49,18 +52,20 @@ class TwitterCall(object):
                 if (self.agent):
                     kwargs["source"] = self.agent
                 break
-        
-        if kwargs.has_key('id'):
-            uri += "/%s" %(kwargs['id'])
-            
-        encoded_kwargs = urlencode(kwargs.items())
+
+        if (not self.encoded_args):
+            if kwargs.has_key('id'):
+                uri += "/%s" %(kwargs['id'])
+    
+            self.encoded_args = urlencode(kwargs.items())
+
         argStr = ""
         argData = None
         if (method == "GET"):
-            if kwargs:
-                argStr = "?%s" %(encoded_kwargs)
+            if self.encoded_args:
+                argStr = "?%s" %(self.encoded_args)
         else:
-            argData = encoded_kwargs
+            argData = self.encoded_args
 
         headers = {}
         if (self.agent):
index ef85c0ac6d1b6173d259d6b5bfaac67dea52410c..1c02484b745b320382a8d25f2338b1fdd19582f3 100644 (file)
@@ -56,6 +56,7 @@ import re
 import os.path
 from ConfigParser import SafeConfigParser
 import datetime
+from urllib import quote
 
 from api import Twitter, TwitterError
 import ansi
@@ -310,7 +311,12 @@ class SearchAction(Action):
         # We need to be pointing at search.twitter.com to work, and it is less
         # tangly to do it here than in the main()
         twitter.domain="search.twitter.com"
-        results = twitter.search(q=options['extra_args'])['results']
+        # We need to bypass the TwitterCall parameter encoding, so we
+        # don't encode the plus sign, so we have to encode it ourselves
+        query_string = "+".join([quote(term) for term in options['extra_args']])
+        twitter.encoded_args = "q=%s" %(query_string)
+
+        results = twitter.search()['results']
         f = get_formatter('search', options)
         for result in results:
             resultStr = f(result, options)