]> jfr.im git - z_archive/twitter.git/blame - twitter/logger.py
Make twitter-log work with py 3.2
[z_archive/twitter.git] / twitter / logger.py
CommitLineData
146b4f29 1"""
c115f12f 2twitter-log - Twitter Logger/Archiver
146b4f29
MV
3
4USAGE:
5
c115f12f 6 twitter-log <screen_name> [max_id]
146b4f29
MV
7
8DESCRIPTION:
9
10 Produce a complete archive in text form of a user's tweets. The
11 archive format is:
12
5f3ddd05
MV
13 screen_name <tweet_id>
14 Date: <tweet_time>
15 [In-Reply-To: a_tweet_id]
146b4f29 16
c115f12f 17 Tweet text possibly spanning multiple lines with
146b4f29
MV
18 each line indented by four spaces.
19
5f3ddd05
MV
20
21 Each tweet is separated by two blank lines.
146b4f29
MV
22
23"""
24
5f3ddd05
MV
25from __future__ import print_function
26
146b4f29
MV
27import sys
28import os
7f9d60c6
MV
29from time import sleep
30
098660ce
MV
31from .api import Twitter, TwitterError
32from .cmdline import CONSUMER_KEY, CONSUMER_SECRET
33from .auth import NoAuth
34from .util import printNicely
35
146b4f29 36
7f9d60c6 37def log_debug(msg):
5f3ddd05 38 print(msg, file=sys.stderr)
146b4f29 39
c115f12f
MV
40def get_tweets(twitter, screen_name, max_id=None):
41 kwargs = dict(count=3200, screen_name=screen_name)
7f9d60c6
MV
42 if max_id:
43 kwargs['max_id'] = max_id
146b4f29 44
7f9d60c6 45 n_tweets = 0
146b4f29
MV
46 tweets = twitter.statuses.user_timeline(**kwargs)
47 for tweet in tweets:
7f9d60c6
MV
48 if tweet['id'] == max_id:
49 continue
5f3ddd05
MV
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()
146b4f29 56 for line in tweet['text'].splitlines():
098660ce 57 printNicely(' ' + line + '\n')
5f3ddd05
MV
58 print()
59 print()
7f9d60c6
MV
60 max_id = tweet['id']
61 n_tweets += 1
62 return n_tweets, max_id
63
64def main(args=sys.argv[1:]):
7f9d60c6 65 twitter = Twitter(
c115f12f 66 auth=NoAuth(),
7f9d60c6
MV
67 api_version='1',
68 domain='api.twitter.com')
69
c115f12f 70 if not args:
5f3ddd05 71 print(__doc__)
c115f12f
MV
72 return 1
73
74 screen_name = args[0]
75
76 if args[1:]:
77 max_id = args[1]
7f9d60c6
MV
78 else:
79 max_id = None
80
81 n_tweets = 0
82 while True:
83 try:
c115f12f 84 tweets_processed, max_id = get_tweets(twitter, screen_name, max_id)
7f9d60c6
MV
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
098660ce 90 except TwitterError as e:
7f9d60c6
MV
91 log_debug("Twitter bailed out. I'm going to sleep a bit then try again")
92 sleep(3)
c115f12f
MV
93
94 return 0