script/lib/iri_tweet/tweet_twitter_user.py
author Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
Fri, 18 Mar 2011 15:45:49 +0100
changeset 82 210dc265c70f
child 98 6e8930a1b8f7
permissions -rw-r--r--
add script to tweet users
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
82
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     1
from optparse import OptionParser
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     2
from utils import *
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     3
import models
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     4
from sqlalchemy.orm import sessionmaker, mapper
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     5
import logging
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     6
import time
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     7
import twitter
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     8
import sys
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     9
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    10
APPLICATION_NAME = "Tweet recorder user"
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    11
CONSUMER_KEY = "Vdr5ZcsjI1G3esTPI8yDg"
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    12
CONSUMER_SECRET = "LMhNrY99R6a7E0YbZZkRFpUZpX5EfB1qATbDk1sIVLs"
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    13
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    14
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    15
def get_options():
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    16
    parser = OptionParser()
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    17
    parser.add_option("-d", "--database", dest="database",
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    18
                      help="Input database", metavar="DATABASE")
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    19
    parser.add_option("-s", "--start-date", dest="start_date",
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    20
                      help="start date", metavar="START_DATE")
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    21
    parser.add_option("-e", "--end-date", dest="end_date",
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    22
                      help="end date", metavar="END_DATE")
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    23
    parser.add_option("-H", "--hashtag", dest="hashtag",
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    24
                      help="Hashtag", metavar="HASHTAG", default=[], action="append")                      
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    25
    parser.add_option("-x", "--exclude", dest="exclude",
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    26
                      help="file containing the id to exclude", metavar="EXCLUDE")
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    27
    parser.add_option("-D", "--duration", dest="duration", type="int",
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    28
                      help="Duration", metavar="DURATION", default=None)
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    29
    parser.add_option("-m", "--message", dest="message",
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    30
                      help="tweet", metavar="MESSAGE", default="")    
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    31
    parser.add_option("-u", "--user", dest="user",
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    32
                      help="user", metavar="USER")    
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    33
    parser.add_option("-w", "--password", dest="password",
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    34
                      help="password", metavar="PASSWORD")    
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    35
    parser.add_option("-t", dest="token_filename", metavar="TOKEN_FILENAME", default=".oauth_token",
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    36
                      help="Token file name")
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    37
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    38
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    39
    set_logging_options(parser)
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    40
    
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    41
    return parser.parse_args()
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    42
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    43
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    44
if __name__ == "__main__":
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    45
    
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    46
    (options, args) = get_options()
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    47
    
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    48
    set_logging(options)
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    49
        
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    50
    logging.debug("OPTIONS : " + repr(options))
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    51
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    52
    if not options.message or len(options.message) == 0:
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    53
        sys.exit()
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    54
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    55
    engine, metadata = setup_database('sqlite:///'+options.database, echo=((options.verbose-options.quiet)>0), create_all = False)        
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    56
    
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    57
    Session = sessionmaker()
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    58
    conn = engine.connect()
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    59
    try :
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    60
        session = Session(bind=conn)
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    61
        try:
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    62
            metadata = MetaData(bind=conn)
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    63
            tweet_exclude_table = Table("tweet_exclude", metadata, Column('id', BigInteger, primary_key=True), prefixes=['TEMPORARY'])
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    64
            #mapper(TweetExclude, tweet_exclude_table)
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    65
            metadata.create_all()
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    66
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    67
            start_date_str = options.start_date
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    68
            end_date_str = options.end_date
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    69
            duration = options.duration
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    70
            hashtags = options.hashtag
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    71
            
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    72
            
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    73
            start_date = parse_date(start_date_str) 
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    74
            ts = time.mktime(start_date.timetuple())
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    75
        
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    76
            if end_date_str:
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    77
                end_date = parse_date(end_date_str)
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    78
                te = time.mktime(end_date.timetuple())
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    79
            else:
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    80
                te = ts + duration
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    81
                end_date = start_date + datetime.timedelta(seconds=duration)
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    82
            
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    83
            query = get_user_query(session, start_date, end_date, hashtags, tweet_exclude_table)
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    84
            #query = query.filter(User.screen_name == "tibo_c")
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    85
                
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    86
            query_res = query.all()
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    87
            
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    88
            acess_token_key, access_token_secret = get_oauth_token(options.token_filename, application_name=APPLICATION_NAME, consumer_key=CONSUMER_KEY, consumer_secret=CONSUMER_SECRET)
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    89
            t = twitter.Twitter(auth=twitter.OAuth(acess_token_key, access_token_secret, CONSUMER_KEY, CONSUMER_SECRET))
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    90
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    91
            for user in query_res:
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    92
                screen_name = user.screen_name
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    93
                
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    94
                message = u"@%s: %s" % (screen_name, options.message.decode(sys.getfilesystemencoding()))
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    95
                logging.debug("new status : " + message)
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    96
                t.statuses.update(status=message)
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    97
                
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    98
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    99
        finally:
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   100
            session.close()
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   101
    finally:
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   102
        conn.close()
210dc265c70f add script to tweet users
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   103