Merge pull request #4 from joehillen/master

Tons of changes
This commit is contained in:
Karan Goel
2013-09-20 21:57:31 -07:00
2 changed files with 98 additions and 47 deletions
+2 -1
View File
@@ -1,3 +1,4 @@
*.csv
*.py[cod]
# C extensions
@@ -35,4 +36,4 @@ nosetests.xml
.pydevproject
*.komodoproject
.komodotools/
.komodotools/
+96 -46
View File
@@ -3,77 +3,127 @@
import sys
import time
import csv
import os
import getpass
import praw
USER_AGENT = 'RedditAgain by @karangoeluw // github: thekarangoel'
def print_dot():
"""Prints out a dot on the same line when called"""
sys.stdout.write('. ')
sys.stdout.flush()
def main():
def csv_file(fp, header):
"""Create or append a CSV file."""
if os.path.exists(fp):
f = open(fp, 'ab')
writer = csv.writer(f)
else:
f = open(fp, 'wb')
writer = csv.writer(f)
writer.writerow(header)
return f, writer
def format_time(created):
return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(created))
if __name__ == '__main__':
print '>> Login to OLD account..'
old_r = praw.Reddit(USER_AGENT) # praw.Reddit
old_r = praw.Reddit(USER_AGENT) # praw.Reddit
old_r.login()
print '\t>>Login successful..'
old_user = old_r.user # get a praw.objects.LoggedInRedditor object
old_user = old_r.user # get a praw.objects.LoggedInRedditor object
print '>> Saving and Deleting all comments...'
comment_file = csv.writer(open('%s_comments.csv' % old_user.name, 'wb'))
comment_file.writerow(['Comment', "Posted on", "Thread"]) # header
for com in old_user.get_comments(limit=None):
comment_file.writerow([com.body,
time.strftime('%Y-%m-%d %H:%M:%S',
time.localtime(com.created)),
com.submission.permalink])
com.delete()
print_dot()
comment_file.close()
comment_file, comment_csv = csv_file(
'{}_comments.csv'.format(old_user.name),
['Comment', "Posted on", "Thread"])
with comment_file:
removed = 1
while removed > 0: # keep going until everything is gone
removed = 0
for com in old_user.get_comments(limit=None):
link = com.submission.permalink.encode('utf-8')
body = com.body.encode('utf-8')
row = [body, format_time(com.created), link]
try:
comment_csv.writerow(row)
com.delete()
removed += 1
print_dot()
except Exception as e:
print 'Failed to store', link
print e
print '\n\t>> Saved to {0}_comments.csv'.format(old_user.name)
print '>> Saving and Deleting all submissions...'
submission_file = csv.writer(open('%s_submissions.csv' % old_user.name, 'wb'))
submission_file.writerow(['Title', "Body/Link", "Created", "Karma"]) # header
for sub in old_user.get_submitted(limit=None):
submission_file.writerow([sub.title,
sub.selftext if sub.is_self else sub.url,
time.strftime('%Y-%m-%d %H:%M:%S',
time.localtime(sub.created)),
sub.score])
sub.delete()
print_dot()
submission_header = ['Title', "Body/Link", "Created", "Karma"]
submission_file, submission_csv = csv_file(
'{}_submissions.csv'.format(old_user.name),
submission_header)
with submission_file:
removed = 1
while removed > 0: # keep going until everything is gone
removed = 0
for sub in old_user.get_submitted(limit=None):
if sub.is_self:
submission = sub.selftext.encode('utf-8')
else:
submission = sub.url.encode('utf-8')
title = sub.title.encode('utf-8')
row = [title, submission, format_time(sub.created), sub.score]
try:
submission_csv.writerow(row)
sub.delete()
removed += 1
print_dot()
except Exception as e:
print 'Failed to store', submission
print e
print '\n\t>> Saved to {0}_submissions.csv'.format(old_user.name)
print '>> Preparing to migrate subscriptions.'
subs = old_r.get_my_subreddits(limit=None)
new_r = praw.Reddit(USER_AGENT)
new_username = raw_input('>> Enter username of new account to be registered.')
new_pass = raw_input('\t>> Enter preferred password for %s' % new_username)
new_r.create_redditor(new_username, new_pass) # create the new account
new_username = raw_input('>> Enter username of new account: ')
while True:
new_pass = getpass.getpass(
'\t>> Enter password for `{}`: '.format(new_username))
new_pass2 = getpass.getpass('\t>> Retype password to confirm: ')
if new_pass != new_pass2:
print 'Passwords do not match!'
else:
break
# create the new account, if available
if new_r.is_username_available(new_username):
new_r.create_redditor(new_username, new_pass)
new_r.login(new_username, new_pass)
new_user = new_r.user # get a praw.objects.LoggedInRedditor object
new_user = new_r.user # get a praw.objects.LoggedInRedditor object
print '\t>>Login successful..'
print '>> Migrating subscriptions...'
for sub in subs:
new_r.get_subreddit(sub.display_name).subscribe()
old_r.get_subreddit(sub.display_name).unsubscribe()
print_dot()
print '>> Done migrating.'
print '>> Go to https://ssl.reddit.com/prefs/delete/ to delete your old account.'
print '\n\t>> Done migrating.'
if __name__ == '__main__':
main()
print '>> Go to https://ssl.reddit.com/prefs/delete/',
print 'to delete your old account.'