reddit_export_data/main.py

105 lines
3.5 KiB
Python

#!/bin/env python
import praw
from dotenv import load_dotenv
import os
import yaml
import argparse
def subreddits(reddit):
with open("subreddits.txt", "w") as file:
for subreddit in reddit.user.subreddits(limit=None):
file.write(str(subreddit) + "\n")
def multireddits(reddit):
with open("multireddits.yaml", "w") as file:
multireddits = {}
for multireddit in reddit.user.multireddits():
subreddits = []
for subreddit in multireddit.subreddits:
subreddits.append(str(subreddit))
multireddits[multireddit.name] = subreddits
yaml.dump(multireddits, file)
def saved(reddit):
with open("saved.yaml", "w") as file:
saved = []
redditor = reddit.user.me()
for item in redditor.saved(limit=None):
i= {}
i["type"] = "comment"
if isinstance(item, praw.models.Submission):
i["type"] = "submission"
i["url"] = item.url
i["title"] = item.title
i["upvote_ratio"] = item.upvote_ratio
i["is_self"] = item.is_self
i["external_link"] = False
domains = ["redd.it","i.imgur.com","reddit.com"]
is_media = any(domain in item.url for domain in domains)
if not is_media and not item.is_self:
i["external_link"] = True
i["id"] = item.id
i["created_utc"] = int(item.created_utc)
i["permalink"] = item.permalink
i["score"] = item.score
saved.append(i)
yaml.dump(saved, file)
def redditor(reddit):
with open("redditor.yaml", "w") as file:
cs = []
redditor = reddit.user.me()
for comment in redditor.comments.new():
c= {}
c["type"] = "comment"
c["id"] = comment.id
c["created_utc"] = int(comment.created_utc)
c["permalink"] = comment.permalink
c["score"] = comment.score
cs.append(c)
for submission in redditor.submissions.new():
s= {}
s["type"] = "submission"
s["id"] = submission.id
s["created_utc"] = int(submission.created_utc)
s["permalink"] = submission.permalink
s["score"] = submission.score
s["url"] = submission.url
s["title"] = submission.title
s["upvote_ratio"] = submission.upvote_ratio
cs.append(s)
yaml.dump(cs, file)
if __name__ == '__main__':
load_dotenv()
reddit = praw.Reddit(
username = os.environ["PRAW_USERNAME"],
password = os.environ["PRAW_PASSWORD"],
client_id = os.environ["PRAW_CLIENT_ID"],
client_secret = os.environ["PRAW_CLIENT_SECRET"],
user_agent = os.environ["PRAW_USER_AGENT"],
)
parser = argparse.ArgumentParser()
parser.add_argument('--subreddits', action="store_true", help="Save subcribed subreddits in subreddits.txt")
parser.add_argument('--multireddits', action="store_true", help="Save user's multireddits in multireddits.yaml")
parser.add_argument('--saved', action="store_true", help="Save saved comments and submissions in saved.yaml")
parser.add_argument('--redditor', action="store_true", help="Save redditor's submissions and comments in redditor.yaml")
args = parser.parse_args()
if args.subreddits:
subreddits(reddit)
if args.multireddits:
multireddits(reddit)
if args.saved:
saved(reddit)
if args.redditor:
redditor(reddit)