-#!/usr/bin/env python
# encoding: utf-8
"""
USAGE:
ACTIONS:
authorize authorize the command-line tool to interact with Twitter
- follow add the specified user to your follow list
+ follow follow a user
friends get latest tweets from your friends (default action)
help print this help text that you are currently reading
- leave remove the specified user from your following list
+ leave stop following a user
+ list get list of a user's lists; give a list name to get
+ tweets from that list
+ mylist get list of your lists; give a list name to get tweets
+ from that list
public get latest public tweets
- replies get latest replies
+ replies get latest replies to you
search search twitter (Beware: octothorpe, escape it)
set set your twitter status
- shell login the twitter shell
+ shell login to the twitter shell
OPTIONS:
-l --length <count> specify number of status updates shown
(default: 20, max: 200)
-t --timestamp show time before status lines
- -d --datestamp shoe date before status lines
- --no-ssl use HTTP instead of more secure HTTPS
+ -d --datestamp show date before status lines
+ --no-ssl use less-secure HTTP instead of HTTPS
--oauth <filename> filename to read/store oauth credentials to
FORMATS for the --format option
from oauth import OAuth, write_token_file, read_token_file
from oauth_dance import oauth_dance
import ansi
+from util import smrt_input
OPTIONS = {
'action': 'friends',
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'])
}
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):
else:
printNicely(af(options['action'], user))
+class ListsAction(StatusAction):
+ def getStatuses(self, twitter, options):
+ if not options['extra_args']:
+ raise TwitterError("Please provide a user to query for lists")
+
+ screen_name = options['extra_args'][0]
+
+ if not options['extra_args'][1:]:
+ lists = twitter.user.lists(user=screen_name)['lists']
+ if not lists:
+ printNicely("This user has no lists.")
+ for list in lists:
+ lf = get_formatter('lists', options)
+ printNicely(lf(list))
+ return []
+ else:
+ return reversed(twitter.user.lists.list.statuses(
+ user=screen_name, list=options['extra_args'][1]))
+
+
+class MyListsAction(ListsAction):
+ def getStatuses(self, twitter, options):
+ screen_name = twitter.account.verify_credentials()['screen_name']
+ options['extra_args'].insert(0, screen_name)
+ return ListsAction.getStatuses(self, twitter, options)
+
+
class FriendsAction(StatusAction):
def getStatuses(self, twitter, options):
return reversed(twitter.statuses.friends_timeline(count=options["length"]))
else:
raise SystemExit(0)
+class PythonPromptAction(Action):
+ def __call__(self, twitter, options):
+ try:
+ while True:
+ smrt_input(globals(), locals())
+ except EOFError:
+ pass
+
class HelpAction(Action):
def __call__(self, twitter, options):
print __doc__
'authorize' : DoNothingAction,
'follow' : FollowAction,
'friends' : FriendsAction,
+ 'list' : ListsAction,
+ 'mylist' : MyListsAction,
'help' : HelpAction,
'leave' : LeaveAction,
'public' : PublicAction,
+ 'pyprompt' : PythonPromptAction,
'replies' : RepliesAction,
'search' : SearchAction,
'set' : SetStatusAction,