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() |