Pouknouki

Reddit

Nov 21st, 2016
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.54 KB | None | 0 0
  1. import sqlite3
  2.  
  3. def openDatabase(path):
  4.     db = sqlite3.connect(path)
  5.     cur = db.cursor()
  6.     return (db, cur)
  7.  
  8. def createTable(name, fields, types, cur):
  9.     sql = "CREATE TABLE '" + name + "' ("
  10.     for i in range(len(fields)):
  11.         sql += fields[i] + " " + types[i] + ","
  12.     sql = sql.strip(",")
  13.     sql = sql + ")"
  14.     try:
  15.         cur.execute(sql)
  16.         return True
  17.     except:
  18.         return False
  19.        
  20. def tableExists(name, cur):
  21.     tables = getTables(cur)
  22.     return name in tables
  23.  
  24. def deleteTable(name, cur):
  25.     sql = "DROP TABLE '" + name + "'"
  26.     try:
  27.         cur.execute(sql)
  28.         return True
  29.     except:
  30.         return False
  31.  
  32. def removeLine(table, criteria, cur):
  33.     sql = "DELETE FROM " + table + " WHERE "
  34.     for field in criteria.keys():
  35.         sql += "" + str(field) + " = ?,"
  36.     sql = sql.strip().strip(',')
  37.     cur.execute(sql, [criteria[key] for key in criteria.keys()])
  38.  
  39. def addLine(table, content, cur):
  40.     contentAsString = ""
  41.     for elt in content:
  42.         contentAsString += "?,"
  43.     contentAsString = contentAsString.strip(",")
  44.     sql = "INSERT INTO '" + str(table) + "' VALUES (" + str(contentAsString) + ")"
  45.     cur.execute(sql, content)
  46.    
  47. def getTables(cur):
  48.     cur.execute("SELECT name FROM sqlite_master WHERE type='table';")
  49.     return [x[0] for x in cur.fetchall()]
  50.        
  51. def getLines(cur, Table):
  52.     cur.execute("SELECT * FROM '" + Table + "'")
  53.     return cur.fetchall()
  54.  
  55. def lineExists(cur, Table, key, value):
  56.     cur.execute("SELECT * FROM '" + Table + "'" + " WHERE " + key + "='" + value + "'")
  57.     return len(cur.fetchall()) > 0
  58.    
  59. def getColumns(cur, Table):
  60.     cur.execute("SELECT * FROM '" + Table + "'")
  61.     return [x[0] for x in cur.description]
  62.  
  63. #####################
  64. # END OF STORAGE
  65. ####################
  66.  
  67. import praw
  68.  
  69.  
  70. def initDB():
  71.     db, cur = storage.openDatabase("Data.s3db")
  72.     tables = "Submitted", "Upvoted", "Downvoted"
  73.     for table in tables:
  74.         storage.createTable(table,  ["ID",   "Timestamp", "Is_Self", "Contents", "Score", "Author", "Permalink", "Subreddit", "Added"],
  75.                                     ["TEXT", "INT",       "INT",     "TEXT",     "INT",   "TEXT",   "TEXT",      "TEXT",      "INT"  ], cur)
  76.     storage.createTable("Comments", ["ID", "Timestamp", "Score", "Text", "Author", "Subreddit", "Submission", "Permalink"            ],
  77.                                     ["INT", "INT",      "INT",   "TEXT", "TEXT",   "TEXT",      "TEXT",       "TEXT",                ], cur)
  78.     db.commit()
  79.  
  80. def timestamp():
  81.     import time
  82.     return int(time.time())
  83.  
  84. initDB()
  85.    
  86. def submissionToList(s):
  87.     returned = list()
  88.     returned.append(s.id)
  89.     returned.append(int(s.created))
  90.     returned.append(int(s.is_self))
  91.     returned.append(s.selftext if s.is_self else s.url)
  92.     returned.append(s.score)
  93.     returned.append(s.author.name if s.author != None else "[deleted]")
  94.     returned.append(s.permalink)
  95.     returned.append(s.subreddit.display_name)
  96.     returned.append(timestamp())
  97.     return returned
  98.  
  99. def commentToList(c):
  100.     returned = list()
  101.     returned.append(c.id)
  102.     returned.append(int(c.created))
  103.     returned.append(c.score)
  104.     returned.append(c.body)
  105.     returned.append(c.author.name)
  106.     returned.append(c.subreddit.display_name)
  107.     returned.append(c.submission.id)
  108.     returned.append(c.permalink)
  109.     return returned
  110.  
  111. def addSubmissionToDB(table, s, cur, db):
  112.     if not storage.lineExists(cur, table, "ID", s.id):
  113.         print("Adding submission.")
  114.         storage.addLine(table, submissionToList(s), cur)
  115.  
  116. def addCommentToDB(c, cur, db):
  117.     if not storage.lineExists(cur, "Comments", "ID", c.id):
  118.         print("Adding comment.")
  119.         storage.addLine("Comments", commentToList(c), cur)
  120.  
  121. user_agent = ("Timeline by /u/hoximor")
  122. r = praw.Reddit(user_agent=user_agent)
  123.  
  124. username = ''
  125. password = ''
  126.  
  127. assert username == '' or password = '', "Please enter your credentials."
  128.  
  129. r.login(username, password, disable_warning = True)
  130.  
  131.  
  132. user = r.get_redditor('hoximor')
  133.  
  134. db, cur = storage.openDatabase("Data.s3db")
  135.  
  136. upvoted = user.get_upvoted(limit = 2000)
  137. submitted = user.get_submitted(limit = 2000)
  138. downvoted = user.get_downvoted(limit = 2000)
  139. comments = user.get_comments(limit = 2000)
  140.  
  141. for s in upvoted:
  142.     addSubmissionToDB("Upvoted", s, cur, db)
  143.  
  144. for s in submitted:
  145.     addSubmissionToDB("Submitted", s, cur, db)
  146.  
  147. for s in downvoted:
  148.     addSubmissionToDB("Downvoted", s, cur, db)
  149.  
  150. for c in comments:
  151.     addCommentToDB(c, cur, db)
  152.  
  153. db.commit()
  154. db.close()
Add Comment
Please, Sign In to add comment