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