script/lib/iri_tweet/tweet_twitter_user.py
changeset 289 a5eff8f2b81d
parent 286 6ac68295defe
equal deleted inserted replaced
288:4c870c767d3e 289:a5eff8f2b81d
     1 from iri_tweet.models import setup_database, Message, UserMessage, User
     1 from iri_tweet.models import setup_database, Message, UserMessage, User
     2 from iri_tweet.utils import (get_oauth_token, get_user_query, set_logging_options, 
     2 from iri_tweet.utils import (get_oauth_token, get_user_query, set_logging_options, 
     3     set_logging, parse_date, get_logger)
     3     set_logging, parse_date, get_logger)
     4 from optparse import OptionParser #@UnresolvedImport
     4 from optparse import OptionParser #@UnresolvedImport
     5 from sqlalchemy import BigInteger
     5 from sqlalchemy import BigInteger
     6 from sqlalchemy.orm import sessionmaker
     6 from sqlalchemy.schema import Table, Column
     7 from sqlalchemy.schema import MetaData, Table, Column
       
     8 from sqlalchemy.sql import and_
     7 from sqlalchemy.sql import and_
     9 import datetime
     8 import datetime
       
     9 import re
    10 import sys
    10 import sys
    11 import time
       
    12 import twitter
    11 import twitter
    13 import re
       
    14 
    12 
    15 APPLICATION_NAME = "Tweet recorder user"
    13 APPLICATION_NAME = "Tweet recorder user"
    16 CONSUMER_KEY = "Vdr5ZcsjI1G3esTPI8yDg"
    14 CONSUMER_KEY = "Vdr5ZcsjI1G3esTPI8yDg"
    17 CONSUMER_SECRET = "LMhNrY99R6a7E0YbZZkRFpUZpX5EfB1qATbDk1sIVLs"
    15 CONSUMER_SECRET = "LMhNrY99R6a7E0YbZZkRFpUZpX5EfB1qATbDk1sIVLs"
    18 
    16 
    20 def get_options():
    18 def get_options():
    21     parser = OptionParser()
    19     parser = OptionParser()
    22     parser.add_option("-d", "--database", dest="database",
    20     parser.add_option("-d", "--database", dest="database",
    23                       help="Input database", metavar="DATABASE")
    21                       help="Input database", metavar="DATABASE")
    24     parser.add_option("-s", "--start-date", dest="start_date",
    22     parser.add_option("-s", "--start-date", dest="start_date",
    25                       help="start date", metavar="START_DATE")
    23                       help="start date", metavar="START_DATE", default=None)
    26     parser.add_option("-e", "--end-date", dest="end_date",
    24     parser.add_option("-e", "--end-date", dest="end_date",
    27                       help="end date", metavar="END_DATE")
    25                       help="end date", metavar="END_DATE")
    28     parser.add_option("-H", "--hashtag", dest="hashtag",
    26     parser.add_option("-H", "--hashtag", dest="hashtag",
    29                       help="Hashtag", metavar="HASHTAG", default=[], action="append")                      
    27                       help="Hashtag", metavar="HASHTAG", default=[], action="append")                      
    30     parser.add_option("-x", "--exclude", dest="exclude",
    28     parser.add_option("-x", "--exclude", dest="exclude",
    55     set_logging(options)
    53     set_logging(options)
    56         
    54         
    57     get_logger().debug("OPTIONS : " + repr(options)) #@UndefinedVariable
    55     get_logger().debug("OPTIONS : " + repr(options)) #@UndefinedVariable
    58 
    56 
    59     if not options.message or len(options.message) == 0:
    57     if not options.message or len(options.message) == 0:
       
    58         get_logger().warning("No message exiting")
    60         sys.exit()
    59         sys.exit()
    61 
    60 
    62     conn_str = options.database.strip()
    61     conn_str = options.database.strip()
    63     if not re.match("^\w+://.+", conn_str):
    62     if not re.match("^\w+://.+", conn_str):
    64         conn_str = 'sqlite:///' + conn_str
    63         conn_str = 'sqlite:///' + conn_str
    65 
    64 
    66     engine, metadata = setup_database(conn_str, echo=((options.verbose-options.quiet)>0), create_all = False)        
    65     engine, metadata, Session = setup_database(conn_str, echo=((options.verbose-options.quiet)>0), create_all = False)        
    67     
    66     
    68     Session = sessionmaker()
    67     conn = None
    69     conn = engine.connect()
       
    70     try :
    68     try :
    71         session = Session(bind=conn, autoflush=True, autocommit=True)
    69         conn = engine.connect()  
       
    70         session = None      
    72         try:
    71         try:
    73             metadata = MetaData(bind=conn)
    72             session = Session(bind=conn, autoflush=True, autocommit=True)
    74             tweet_exclude_table = Table("tweet_exclude", metadata, Column('id', BigInteger, primary_key=True), prefixes=['TEMPORARY'])
    73             tweet_exclude_table = Table("tweet_exclude", metadata, Column('id', BigInteger, primary_key=True), prefixes=['TEMPORARY'])
    75             metadata.create_all()
    74             metadata.create_all(bind=conn,tables=[tweet_exclude_table])
    76 
    75 
    77             start_date_str = options.start_date
    76             start_date_str = options.start_date
    78             end_date_str = options.end_date
    77             end_date_str = options.end_date
    79             duration = options.duration
    78             duration = options.duration
    80             hashtags = options.hashtag
    79             hashtags = options.hashtag
    81             
    80             
    82             
    81             start_date = None
    83             start_date = parse_date(start_date_str) 
    82             if start_date_str:
    84             ts = time.mktime(start_date.timetuple())
    83                 start_date = parse_date(start_date_str) 
    85         
    84 
       
    85             end_date = None
    86             if end_date_str:
    86             if end_date_str:
    87                 end_date = parse_date(end_date_str)
    87                 end_date = parse_date(end_date_str)
    88                 te = time.mktime(end_date.timetuple())
    88             elif start_date and duration:
    89             else:
       
    90                 te = ts + duration
       
    91                 end_date = start_date + datetime.timedelta(seconds=duration)
    89                 end_date = start_date + datetime.timedelta(seconds=duration)
    92             
    90             
    93             base_message = options.message.decode(sys.getfilesystemencoding())
    91             base_message = options.message.decode(sys.getfilesystemencoding())
    94             #get or create message
    92             #get or create message
    95             message_obj = session.query(Message).filter(Message.text == base_message).first()
    93             message_obj = session.query(Message).filter(Message.text == base_message).first()
   117                     t.statuses.update(status=message)
   115                     t.statuses.update(status=message)
   118                     user_message = UserMessage(user_id=user.id, message_id=message_obj.id)
   116                     user_message = UserMessage(user_id=user.id, message_id=message_obj.id)
   119                     session.add(user_message)
   117                     session.add(user_message)
   120                     session.flush()
   118                     session.flush()
   121         finally:
   119         finally:
   122             # if message created and simulate, do not  
   120             # if message created and simulate, do not
   123             session.close()
   121             if session:  
       
   122                 session.close()
   124     finally:
   123     finally:
   125         conn.close()
   124         if conn:
       
   125             conn.close()
   126 
   126