]>
Commit | Line | Data |
---|---|---|
1 | """ | |
2 | twitter-log - Twitter Logger/Archiver | |
3 | ||
4 | USAGE: | |
5 | ||
6 | twitter-log <screen_name> [max_id] | |
7 | ||
8 | DESCRIPTION: | |
9 | ||
10 | Produce a complete archive in text form of a user's tweets. The | |
11 | archive format is: | |
12 | ||
13 | screen_name tweet_id tweet_time | |
14 | ||
15 | Tweet text possibly spanning multiple lines with | |
16 | each line indented by four spaces. | |
17 | ||
18 | Each tweet is separated by a blank line. | |
19 | ||
20 | """ | |
21 | ||
22 | import sys | |
23 | import os | |
24 | from time import sleep | |
25 | ||
26 | from api import Twitter, TwitterError | |
27 | from cmdline import CONSUMER_KEY, CONSUMER_SECRET | |
28 | from auth import NoAuth | |
29 | ||
30 | def log_debug(msg): | |
31 | print >> sys.stderr, msg | |
32 | ||
33 | def get_tweets(twitter, screen_name, max_id=None): | |
34 | kwargs = dict(count=3200, screen_name=screen_name) | |
35 | if max_id: | |
36 | kwargs['max_id'] = max_id | |
37 | ||
38 | n_tweets = 0 | |
39 | tweets = twitter.statuses.user_timeline(**kwargs) | |
40 | for tweet in tweets: | |
41 | if tweet['id'] == max_id: | |
42 | continue | |
43 | print "%s %s %s" % (tweet['user']['screen_name'], | |
44 | tweet['id'], | |
45 | tweet['created_at']) | |
46 | ||
47 | for line in tweet['text'].splitlines(): | |
48 | print ' ' + line.encode('utf-8') | |
49 | ||
50 | max_id = tweet['id'] | |
51 | n_tweets += 1 | |
52 | return n_tweets, max_id | |
53 | ||
54 | def main(args=sys.argv[1:]): | |
55 | twitter = Twitter( | |
56 | auth=NoAuth(), | |
57 | api_version='1', | |
58 | domain='api.twitter.com') | |
59 | ||
60 | if not args: | |
61 | print __doc__ | |
62 | return 1 | |
63 | ||
64 | screen_name = args[0] | |
65 | ||
66 | if args[1:]: | |
67 | max_id = args[1] | |
68 | else: | |
69 | max_id = None | |
70 | ||
71 | n_tweets = 0 | |
72 | while True: | |
73 | try: | |
74 | tweets_processed, max_id = get_tweets(twitter, screen_name, max_id) | |
75 | n_tweets += tweets_processed | |
76 | log_debug("Processed %i tweets (max_id %s)" %(n_tweets, max_id)) | |
77 | if tweets_processed == 0: | |
78 | log_debug("That's it, we got all the tweets. Done.") | |
79 | break | |
80 | except TwitterError, e: | |
81 | log_debug("Twitter bailed out. I'm going to sleep a bit then try again") | |
82 | sleep(3) | |
83 | ||
84 | return 0 |