]> jfr.im git - z_archive/twitter.git/blob - twitter/logger.py
Update some of the cmdline to support API 1.1.
[z_archive/twitter.git] / twitter / logger.py
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