OSDN Git Service

fix template for reflet input y/m, and add argument for fetch tools
[otptools/sfmstat.git] / generate_result.py
1 #!/usr/bin/env python
2
3 import sqlite3
4 import sys
5 import getopt
6 import os.path
7 import getpass
8
9 import otptools2
10
11 LOG_DB = "database/analytics_dat"
12 CACHE_DB = "database/urlcache_dat"
13
14 def login(otp, uname=""):
15     if uname == "":
16         try:
17             uname = raw_input("user: ")
18         except KeyboardInterrupt:
19             sys.exit("\nabort.")
20         try:
21             passwd = getpass.getpass("login password:")
22         except KeyboardInterrupt:
23             sys.exit("\nabort.")
24         if not otp.login(uname, passwd):
25             sys.exit("login error!")
26     otp.save_cookie()
27
28 def prepare_database():
29     if os.path.exists(CACHE_DB):
30         return
31     con = sqlite3.connect(CACHE_DB)
32     cur = con.cursor()
33
34     cur.execute("""
35     create table sid_cache (
36       sid text unique,
37       title text default ""
38     );
39 """)
40
41     cur.execute("""
42     create table topics (
43       sid text,
44       topic text
45     );
46 """)
47
48     con.commit()
49     cur.close()
50     con.close()
51
52
53 def get_story_info(otp, sid):
54     con = sqlite3.connect(CACHE_DB)
55     cur = con.cursor()
56     cur.execute("""select title from sid_cache where sid=?;""", (sid,) )
57     tags = []
58     title = ""
59     result = cur.fetchone()
60     if result is None:
61         tags = otp.get_tags("/magazine.sourceforge.jp/article.pl?sid=" + sid)
62         title = otp.get_title("/magazine.sourceforge.jp/article.pl?sid=" + sid)
63         cur.execute("""insert into sid_cache (sid, title) values (?, ?);""",
64                     (sid, title))
65         for tag in tags:
66             cur.execute("""insert into topics (sid, topic) values (?, ?);""",
67                         (sid, tag))                     
68         con.commit()
69     else:
70         title = result[0]
71         cur.execute("""select topic from topics where sid=?""", (sid,))
72         for row in cur:
73             tags.append(row[0])
74     cur.close()
75     con.close()
76     return (title, tags)
77
78 # main proc.
79 def main():
80     usage = "%s [-c]" % sys.argv[0]
81     (optlist, args) = getopt.getopt(sys.argv[1:], "c")
82
83     if ('-c', '') in optlist:
84         # create database
85         prepare_database()
86         return
87
88     otp = otptools2.otptools("./cookies.txt")
89     try:
90         otp.load_cookie()
91     except IOError:
92         sys.stderr.write("cannot use cookie file. create.\n")
93
94     if otp.get_cookie() == "":
95         login(otp)
96         otp.save_cookie()
97
98     #test
99     #test = "10/04/22/1028220"
100     #(title, tags) = get_story_info(otp, test)
101     #print title, tags
102     
103
104 if __name__ == '__main__':
105     main()