Allow backing up of specific username
This commit is contained in:
parent
54ff47d9ed
commit
61f61b6535
26
html/username.html
Normal file
26
html/username.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Saved Posts</title>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,600;0,700;1,300;1,400;1,600;1,700&display=swap" rel="stylesheet">
|
||||||
|
<style></style>
|
||||||
|
<script></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="links">
|
||||||
|
<a href="[username].p.html">Previous</a>
|
||||||
|
<a href="[username].n.html">Next</a>
|
||||||
|
</div>
|
||||||
|
<section class="posts-section">
|
||||||
|
<h1>u/[username]'s' Posts</h1>
|
||||||
|
<!--posts-->
|
||||||
|
</section>
|
||||||
|
<section class="comments-section">
|
||||||
|
<h1>u/[username]'s' Comments</h1>
|
||||||
|
<!--comments-->
|
||||||
|
</section>
|
||||||
|
<div class="links">
|
||||||
|
<a href="[username].n.html">Previous</a>
|
||||||
|
<a href="[username].n.html">Next</a>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
17
save.py
17
save.py
@ -7,8 +7,12 @@ from tqdm import tqdm
|
|||||||
from utilities import *
|
from utilities import *
|
||||||
|
|
||||||
# Get arguments
|
# Get arguments
|
||||||
|
def validate_mode(mode):
|
||||||
|
if mode not in ["saved", "upvoted"] and not mode.startswith("user:"):
|
||||||
|
raise argparse.ArgumentTypeError(f"Invalid mode: {mode}")
|
||||||
|
return mode
|
||||||
parser = argparse.ArgumentParser(description="Save reddit posts to file.")
|
parser = argparse.ArgumentParser(description="Save reddit posts to file.")
|
||||||
parser.add_argument("mode", type=str, nargs=1, choices=["saved", "upvoted"], help="The file to convert.")
|
parser.add_argument("mode", type=validate_mode, nargs=1, help="The file to convert.")
|
||||||
if os.getenv("DOCKER", "0") != "1":
|
if os.getenv("DOCKER", "0") != "1":
|
||||||
parser.add_argument("location", type=str, nargs=1, help="The path to save to.")
|
parser.add_argument("location", type=str, nargs=1, help="The path to save to.")
|
||||||
# Optional page size argument
|
# Optional page size argument
|
||||||
@ -30,10 +34,15 @@ if mode == "saved":
|
|||||||
html_file = "saved.html"
|
html_file = "saved.html"
|
||||||
get_posts = get_saved_posts
|
get_posts = get_saved_posts
|
||||||
get_comments = get_saved_comments
|
get_comments = get_saved_comments
|
||||||
else:
|
elif mode == "upvoted":
|
||||||
html_file = "upvoted.html"
|
html_file = "upvoted.html"
|
||||||
get_posts = get_upvoted_posts
|
get_posts = get_upvoted_posts
|
||||||
get_comments = lambda client: []
|
get_comments = lambda client: []
|
||||||
|
elif mode.startswith("user:"):
|
||||||
|
username = mode.split(":")[-1]
|
||||||
|
html_file = f"{username}.html"
|
||||||
|
get_posts = lambda client: get_user_posts(client, username)
|
||||||
|
get_comments = lambda client: get_user_comments(client, username)
|
||||||
|
|
||||||
# Make directory for media and posts
|
# Make directory for media and posts
|
||||||
if not os.path.exists(os.path.join(location, "media")):
|
if not os.path.exists(os.path.join(location, "media")):
|
||||||
@ -85,5 +94,5 @@ if page_size:
|
|||||||
posts_on_page = posts_html[i*page_size:(i+1)*page_size]
|
posts_on_page = posts_html[i*page_size:(i+1)*page_size]
|
||||||
comments_on_page = comments_html[i*page_size:(i+1)*page_size]
|
comments_on_page = comments_html[i*page_size:(i+1)*page_size]
|
||||||
has_next = i < page_count - 1
|
has_next = i < page_count - 1
|
||||||
save_html(posts_on_page, comments_on_page, location, html_file, i, has_next)
|
save_html(posts_on_page, comments_on_page, location, html_file, i, has_next, username=html_file.split(".")[0])
|
||||||
save_html(posts_html, comments_html, location, html_file, None, False)
|
save_html(posts_html, comments_html, location, html_file, None, False, username=html_file.split(".")[0])
|
||||||
|
24
utilities.py
24
utilities.py
@ -23,6 +23,8 @@ PLATFORMS = ["redgifs.com", "gfycat.com", "imgur.com", "youtube.com"]
|
|||||||
def make_client():
|
def make_client():
|
||||||
"""Creates a PRAW client with the details in the secrets.py file."""
|
"""Creates a PRAW client with the details in the secrets.py file."""
|
||||||
|
|
||||||
|
print(REDDIT_USERNAME)
|
||||||
|
|
||||||
return praw.Reddit(
|
return praw.Reddit(
|
||||||
username=REDDIT_USERNAME,
|
username=REDDIT_USERNAME,
|
||||||
password=REDDIT_PASSWORD,
|
password=REDDIT_PASSWORD,
|
||||||
@ -92,6 +94,22 @@ def get_saved_comments(client):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_posts(client, username):
|
||||||
|
"""Gets a list of posts that the user has made."""
|
||||||
|
|
||||||
|
return [
|
||||||
|
post for post in client.redditor(username).submissions.new(limit=None)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_comments(client, username):
|
||||||
|
"""Gets a list of comments that the user has made."""
|
||||||
|
|
||||||
|
return [
|
||||||
|
comment for comment in client.redditor(username).comments.new(limit=None)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
def get_post_html(post):
|
def get_post_html(post):
|
||||||
"""Takes a post object and creates a HTML for it - but not including the
|
"""Takes a post object and creates a HTML for it - but not including the
|
||||||
preview HTML."""
|
preview HTML."""
|
||||||
@ -278,7 +296,11 @@ def get_comment_html(comment, children=True, op=None):
|
|||||||
return html
|
return html
|
||||||
|
|
||||||
|
|
||||||
def save_html(posts, comments, location, html_file, page, has_next):
|
def save_html(posts, comments, location, html_file, page, has_next, username=None):
|
||||||
|
if username:
|
||||||
|
with open(os.path.join("html", "username.html"), encoding="utf-8") as f:
|
||||||
|
html = f.read().replace("[username]", username)
|
||||||
|
else:
|
||||||
with open(os.path.join("html", html_file), encoding="utf-8") as f:
|
with open(os.path.join("html", html_file), encoding="utf-8") as f:
|
||||||
html = f.read()
|
html = f.read()
|
||||||
with open(os.path.join("html", "style.css"), encoding="utf-8") as f:
|
with open(os.path.join("html", "style.css"), encoding="utf-8") as f:
|
||||||
|
Loading…
Reference in New Issue
Block a user