]> jfr.im git - z_archive/twitter.git/blame_incremental - twitter/logger.py
Merge pull request #110 from anmarmansur/master
[z_archive/twitter.git] / twitter / logger.py
... / ...
CommitLineData
1"""
2twitter-log - Twitter Logger/Archiver
3
4USAGE:
5
6 twitter-log <screen_name> [max_id]
7
8DESCRIPTION:
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
25from __future__ import print_function
26
27import sys
28import os
29from time import sleep
30
31from .api import Twitter, TwitterError
32from .cmdline import CONSUMER_KEY, CONSUMER_SECRET
33from .auth import NoAuth
34from .util import printNicely
35
36
37def log_debug(msg):
38 print(msg, file=sys.stderr)
39
40def 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
64def 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