Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sqlite3
- def openDatabase(path):
- db = sqlite3.connect(path)
- cur = db.cursor()
- return (db, cur)
- def createTable(name, fields, types, cur):
- sql = "CREATE TABLE '" + name + "' ("
- for i in range(len(fields)):
- sql += fields[i] + " " + types[i] + ","
- sql = sql.strip(",")
- sql = sql + ")"
- try:
- cur.execute(sql)
- return True
- except:
- return False
- def tableExists(name, cur):
- tables = getTables(cur)
- return name in tables
- def deleteTable(name, cur):
- sql = "DROP TABLE '" + name + "'"
- try:
- cur.execute(sql)
- return True
- except:
- return False
- def removeLine(table, criteria, cur):
- sql = "DELETE FROM " + table + " WHERE "
- for field in criteria.keys():
- sql += "" + str(field) + " = ?,"
- sql = sql.strip().strip(',')
- cur.execute(sql, [criteria[key] for key in criteria.keys()])
- def addLine(table, content, cur):
- contentAsString = ""
- for elt in content:
- contentAsString += "?,"
- contentAsString = contentAsString.strip(",")
- sql = "INSERT INTO '" + str(table) + "' VALUES (" + str(contentAsString) + ")"
- cur.execute(sql, content)
- def getTables(cur):
- cur.execute("SELECT name FROM sqlite_master WHERE type='table';")
- return [x[0] for x in cur.fetchall()]
- def getLines(cur, Table):
- cur.execute("SELECT * FROM '" + Table + "'")
- return cur.fetchall()
- def lineExists(cur, Table, key, value):
- cur.execute("SELECT * FROM '" + Table + "'" + " WHERE " + key + "='" + value + "'")
- return len(cur.fetchall()) > 0
- def getColumns(cur, Table):
- cur.execute("SELECT * FROM '" + Table + "'")
- return [x[0] for x in cur.description]
- #####################
- # END OF STORAGE
- ####################
- import praw
- def initDB():
- db, cur = storage.openDatabase("Data.s3db")
- tables = "Submitted", "Upvoted", "Downvoted"
- for table in tables:
- storage.createTable(table, ["ID", "Timestamp", "Is_Self", "Contents", "Score", "Author", "Permalink", "Subreddit", "Added"],
- ["TEXT", "INT", "INT", "TEXT", "INT", "TEXT", "TEXT", "TEXT", "INT" ], cur)
- storage.createTable("Comments", ["ID", "Timestamp", "Score", "Text", "Author", "Subreddit", "Submission", "Permalink" ],
- ["INT", "INT", "INT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", ], cur)
- db.commit()
- def timestamp():
- import time
- return int(time.time())
- initDB()
- def submissionToList(s):
- returned = list()
- returned.append(s.id)
- returned.append(int(s.created))
- returned.append(int(s.is_self))
- returned.append(s.selftext if s.is_self else s.url)
- returned.append(s.score)
- returned.append(s.author.name if s.author != None else "[deleted]")
- returned.append(s.permalink)
- returned.append(s.subreddit.display_name)
- returned.append(timestamp())
- return returned
- def commentToList(c):
- returned = list()
- returned.append(c.id)
- returned.append(int(c.created))
- returned.append(c.score)
- returned.append(c.body)
- returned.append(c.author.name)
- returned.append(c.subreddit.display_name)
- returned.append(c.submission.id)
- returned.append(c.permalink)
- return returned
- def addSubmissionToDB(table, s, cur, db):
- if not storage.lineExists(cur, table, "ID", s.id):
- print("Adding submission.")
- storage.addLine(table, submissionToList(s), cur)
- def addCommentToDB(c, cur, db):
- if not storage.lineExists(cur, "Comments", "ID", c.id):
- print("Adding comment.")
- storage.addLine("Comments", commentToList(c), cur)
- user_agent = ("Timeline by /u/hoximor")
- r = praw.Reddit(user_agent=user_agent)
- username = ''
- password = ''
- assert username == '' or password = '', "Please enter your credentials."
- r.login(username, password, disable_warning = True)
- user = r.get_redditor('hoximor')
- db, cur = storage.openDatabase("Data.s3db")
- upvoted = user.get_upvoted(limit = 2000)
- submitted = user.get_submitted(limit = 2000)
- downvoted = user.get_downvoted(limit = 2000)
- comments = user.get_comments(limit = 2000)
- for s in upvoted:
- addSubmissionToDB("Upvoted", s, cur, db)
- for s in submitted:
- addSubmissionToDB("Submitted", s, cur, db)
- for s in downvoted:
- addSubmissionToDB("Downvoted", s, cur, db)
- for c in comments:
- addCommentToDB(c, cur, db)
- db.commit()
- db.close()
Add Comment
Please, Sign In to add comment