]>
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> | |
14 | Date: <tweet_time> | |
15 | [In-Reply-To: a_tweet_id] | |
16 | ||
17 | Tweet text possibly spanning multiple lines with | |
18 | each line indented by four spaces. | |
19 | ||
20 | ||
21 | Each tweet is separated by two blank lines. | |
22 | ||
23 | """ | |
24 | ||
25 | from __future__ import print_function | |
26 | ||
27 | import sys | |
28 | import os | |
29 | from time import sleep | |
30 | ||
31 | from .api import Twitter, TwitterError | |
32 | from .cmdline import CONSUMER_KEY, CONSUMER_SECRET | |
33 | from .auth import NoAuth | |
34 | from .util import printNicely | |
35 | ||
36 | ||
37 | def log_debug(msg): | |
38 | print(msg, file=sys.stderr) | |
39 | ||
40 | def get_tweets(twitter, screen_name, max_id=None): | |
41 | kwargs = dict(count=3200, screen_name=screen_name) | |
42 | if max_id: | |
43 | kwargs['max_id'] = max_id | |
44 | ||
45 | n_tweets = 0 | |
46 | tweets = twitter.statuses.user_timeline(**kwargs) | |
47 | for tweet in tweets: | |
48 | if tweet['id'] == max_id: | |
49 | continue | |
50 | print("%s %s\nDate: %s" % (tweet['user']['screen_name'], | |
51 | tweet['id'], | |
52 | tweet['created_at'])) | |
53 | if tweet.get('in_reply_to_status_id'): | |
54 | print("In-Reply-To: %s" % tweet['in_reply_to_status_id']) | |
55 | print() | |
56 | for line in tweet['text'].splitlines(): | |
57 | printNicely(' ' + line + '\n') | |
58 | print() | |
59 | print() | |
60 | max_id = tweet['id'] | |
61 | n_tweets += 1 | |
62 | return n_tweets, max_id | |
63 | ||
64 | def main(args=sys.argv[1:]): | |
65 | twitter = Twitter( | |
66 | auth=NoAuth(), | |
67 | api_version='1', | |
68 | domain='api.twitter.com') | |
69 | ||
70 | if not args: | |
71 | print(__doc__) | |
72 | return 1 | |
73 | ||
74 | screen_name = args[0] | |
75 | ||
76 | if args[1:]: | |
77 | max_id = args[1] | |
78 | else: | |
79 | max_id = None | |
80 | ||
81 | n_tweets = 0 | |
82 | while True: | |
83 | try: | |
84 | tweets_processed, max_id = get_tweets(twitter, screen_name, max_id) | |
85 | n_tweets += tweets_processed | |
86 | log_debug("Processed %i tweets (max_id %s)" %(n_tweets, max_id)) | |
87 | if tweets_processed == 0: | |
88 | log_debug("That's it, we got all the tweets. Done.") | |
89 | break | |
90 | except TwitterError as e: | |
91 | log_debug("Twitter bailed out. I'm going to sleep a bit then try again") | |
92 | sleep(3) | |
93 | ||
94 | return 0 |