]> jfr.im git - z_archive/twitter.git/blobdiff - twitter/cmdline.py
adding list action
[z_archive/twitter.git] / twitter / cmdline.py
index b2ed3b4c391f84912d7552dcd827797320400cc9..59113de35c26ae928da52803b2a2a171fb547895 100644 (file)
@@ -1,3 +1,5 @@
+#!/usr/bin/env python
+# encoding: utf-8
 """
 USAGE:
 
 """
 USAGE:
 
@@ -11,6 +13,7 @@ ACTIONS:
  help           print this help text that you are currently reading
  leave          remove the specified user from your following list
  public         get latest public tweets
  help           print this help text that you are currently reading
  leave          remove the specified user from your following list
  public         get latest public tweets
+ list           get list of user lists
  replies        get latest replies
  search         search twitter (Beware: octothorpe, escape it)
  set            set your twitter status
  replies        get latest replies
  search         search twitter (Beware: octothorpe, escape it)
  set            set your twitter status
@@ -170,6 +173,30 @@ class URLStatusFormatter(object):
         urls = self.urlmatch.findall(status['text'])
         return u'\n'.join(urls) if urls else ""
 
         urls = self.urlmatch.findall(status['text'])
         return u'\n'.join(urls) if urls else ""
 
+class ListsFormatter(object):
+    def __call__(self, list):
+        if list['description']:
+            list_str = u"%-30s (%s)" % (list['name'], list['description'])
+        else:
+            list_str = u"%-30s" % (list['name'])
+        return u"%s\n" % list_str
+
+class ListsVerboseFormatter(object):
+    def __call__(self, list):
+        list_str = u"%-30s\n description: %s\n members: %s\n mode:%s\n" % (list['name'], list['description'], list['member_count'], list['mode'])
+        return list_str
+
+class AnsiListsFormatter(object):
+    def __init__(self):
+        self._colourMap = ansi.ColourMap()
+
+    def __call__(self, list):
+        colour = self._colourMap.colourFor(list['name'])
+        return (u"%s%-15s%s %s" %(
+            ansi.cmdColour(colour), list['name'],
+            ansi.cmdReset(), list['description']))
+
+
 class AdminFormatter(object):
     def __call__(self, action, user):
         user_str = u"%s (%s)" %(user['screen_name'], user['name'])
 class AdminFormatter(object):
     def __call__(self, action, user):
         user_str = u"%s (%s)" %(user['screen_name'], user['name'])
@@ -248,6 +275,14 @@ search_formatters = {
 }
 formatters['search'] = search_formatters
 
 }
 formatters['search'] = search_formatters
 
+lists_formatters = {
+    'default': ListsFormatter,
+    'verbose': ListsVerboseFormatter,
+    'urls': None,
+    'ansi': AnsiListsFormatter
+}
+formatters['lists'] = lists_formatters
+
 def get_formatter(action_type, options):
     formatters_dict = formatters.get(action_type)
     if (not formatters_dict):
 def get_formatter(action_type, options):
     formatters_dict = formatters.get(action_type)
     if (not formatters_dict):
@@ -331,15 +366,14 @@ 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"
         # 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=""
+        twitter.uriparts=()
         # 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.decode(get_term_encoding()))
              for term in options['extra_args']])
         # 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.decode(get_term_encoding()))
              for term in options['extra_args']])
-        twitter.encoded_args = "q=%s" %(query_string)
 
 
-        results = twitter.search()['results']
+        results = twitter.search(q=query_string)['results']
         f = get_formatter('search', options)
         for result in results:
             resultStr = f(result, options)
         f = get_formatter('search', options)
         for result in results:
             resultStr = f(result, options)
@@ -364,6 +398,16 @@ class AdminAction(Action):
         else:
             printNicely(af(options['action'], user))
 
         else:
             printNicely(af(options['action'], user))
 
+class ListsAction(StatusAction):
+    def getStatuses(self, twitter, options):
+        screen_name = twitter.account.verify_credentials()['screen_name']
+        if not (options['extra_args'] and options['extra_args'][0]):
+            for list in twitter.user.lists(user=screen_name)['lists']:
+                lf = get_formatter('lists', options)
+                printNicely(lf(list))
+            raise SystemExit(0)
+        return reversed(twitter.user.lists.list.statuses(user=screen_name, list=options['extra_args'][0]))
+
 class FriendsAction(StatusAction):
     def getStatuses(self, twitter, options):
         return reversed(twitter.statuses.friends_timeline(count=options["length"]))
 class FriendsAction(StatusAction):
     def getStatuses(self, twitter, options):
         return reversed(twitter.statuses.friends_timeline(count=options["length"]))
@@ -451,6 +495,7 @@ actions = {
     'authorize' : DoNothingAction,
     'follow'    : FollowAction,
     'friends'   : FriendsAction,
     'authorize' : DoNothingAction,
     'follow'    : FollowAction,
     'friends'   : FriendsAction,
+    'list'      : ListsAction,
     'help'      : HelpAction,
     'leave'     : LeaveAction,
     'public'    : PublicAction,
     'help'      : HelpAction,
     'leave'     : LeaveAction,
     'public'    : PublicAction,