]> jfr.im git - z_archive/twitter.git/blobdiff - twitter/cmdline.py
Revert domain to twitter.com to fix a regression. see issue 13
[z_archive/twitter.git] / twitter / cmdline.py
index 597329beed73c74cc828bf1e631e519aeba6515f..e7a73cb3e856446de7ba3486d4da01b6e6445f7c 100644 (file)
@@ -12,7 +12,7 @@ ACTIONS:
  leave          remove the specified user from your following list
  public         get latest public tweets
  replies        get latest replies
- search         searchtwitter (Beware: octothorpe, escape it)
+ search         search twitter (Beware: octothorpe, escape it)
  set            set your twitter status
  shell          login the twitter shell
 
@@ -69,7 +69,8 @@ from urllib import quote
 import webbrowser
 
 from api import Twitter, TwitterError
-from oauth import OAuth
+from oauth import OAuth, write_token_file, read_token_file
+from oauth_dance import oauth_dance
 import ansi
 
 OPTIONS = {
@@ -211,6 +212,17 @@ class AnsiSearchFormatter(object):
             ansi.cmdColour(colour), result['from_user'],
             ansi.cmdReset(), result['text']))
 
+_term_encoding = None
+def get_term_encoding():
+    global _term_encoding
+    if not _term_encoding:
+        lang = os.getenv('LANG', 'unknown.UTF-8').split('.')
+        if lang[1:]:
+            _term_encoding = lang[1]
+        else:
+            _term_encoding = 'UTF-8'
+    return _term_encoding
+
 formatters = {}
 status_formatters = {
     'default': StatusFormatter,
@@ -319,9 +331,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"
+        twitter.uri=""
         # 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']])
+        query_string = "+".join(
+            [quote(term.decode(get_term_encoding()))
+             for term in options['extra_args']])
         twitter.encoded_args = "q=%s" %(query_string)
 
         results = twitter.search()['results']
@@ -371,7 +386,7 @@ class LeaveAction(AdminAction):
 
 class SetStatusAction(Action):
     def __call__(self, twitter, options):
-        statusTxt = (u" ".join(options['extra_args'])
+        statusTxt = (" ".join(options['extra_args']).decode(get_term_encoding())
                      if options['extra_args']
                      else unicode(raw_input("message: ")))
         status = (statusTxt.encode('utf8', 'replace'))
@@ -432,46 +447,6 @@ class DoNothingAction(Action):
     def __call__(self, twitter, options):
         pass
 
-def parse_oauth_tokens(result):
-    for r in result.split('&'):
-        k, v = r.split('=')
-        if k == 'oauth_token':
-            oauth_token = v
-        elif k == 'oauth_token_secret':
-            oauth_token_secret = v
-    return oauth_token, oauth_token_secret
-
-def oauth_dance(options):
-    print ("Hi there! We're gonna get you all set up to use Twitter"
-           " on the command-line.")
-    twitter = Twitter(
-        auth=OAuth('', '', CONSUMER_KEY, CONSUMER_SECRET),
-        format='')
-    oauth_token, oauth_token_secret = parse_oauth_tokens(
-        twitter.oauth.request_token())
-    print """
-In the web browser window that opens please choose to Allow access to the
-command-line tool. Copy the PIN number that appears on the next page and
-paste or type it here:
-"""
-    webbrowser.open(
-        'http://api.twitter.com/oauth/authorize?oauth_token=' +
-        oauth_token)
-    oauth_verifier = raw_input("Please type the PIN: ").strip()
-    twitter = Twitter(
-        auth=OAuth(
-            oauth_token, oauth_token_secret, CONSUMER_KEY, CONSUMER_SECRET),
-        format='')
-    oauth_token, oauth_token_secret = parse_oauth_tokens(
-        twitter.oauth.access_token(oauth_verifier=oauth_verifier))
-    oauth_file = open(options['oauth_filename'], 'w')
-    print >> oauth_file, oauth_token
-    print >> oauth_file, oauth_token_secret
-    oauth_file.close()
-    print "That's it! Your authorization keys have been written to %s." % (
-        options['oauth_filename'])
-
-
 actions = {
     'authorize' : DoNothingAction,
     'follow'    : FollowAction,
@@ -495,10 +470,6 @@ def loadConfig(filename):
                 options[option] = cp.get('twitter', option)
     return options
 
-def read_oauth_file(fn):
-    f = open(fn)
-    return f.readline().strip(), f.readline().strip()
-
 def main(args=sys.argv[1:]):
     arg_options = {}
     try:
@@ -527,14 +498,17 @@ def main(args=sys.argv[1:]):
 
     if (options['action'] == 'authorize'
         or not os.path.exists(options['oauth_filename'])):
-        oauth_dance(options)
+        oauth_dance(
+            "the Command-Line Tool", CONSUMER_KEY, CONSUMER_SECRET,
+            options['oauth_filename'])
 
-    oauth_token, oauth_token_secret = read_oauth_file(options['oauth_filename'])
+    oauth_token, oauth_token_secret = read_token_file(options['oauth_filename'])
     
     twitter = Twitter(
         auth=OAuth(
             oauth_token, oauth_token_secret, CONSUMER_KEY, CONSUMER_SECRET),
-        secure=options['secure'])
+        secure=options['secure'],
+        api_version='1')
 
     try:
         Action()(twitter, options)