Added a script to post to Reddit + doc.
This commit is contained in:
68
get_refresh_token.py
Normal file
68
get_refresh_token.py
Normal file
@@ -0,0 +1,68 @@
|
||||
# get_refresh_token.py
|
||||
# A temporary, one-time-use script to get your OAuth2 refresh token.
|
||||
|
||||
import praw
|
||||
from dotenv import load_dotenv
|
||||
import os
|
||||
import random
|
||||
import socket
|
||||
|
||||
# --- IMPORTANT: Ensure this matches the "redirect uri" in your Reddit App settings ---
|
||||
REDIRECT_URI = "http://localhost:5000"
|
||||
|
||||
def main():
|
||||
print("--- RSTAT Refresh Token Generator ---")
|
||||
load_dotenv()
|
||||
client_id = os.getenv("REDDIT_CLIENT_ID")
|
||||
client_secret = os.getenv("REDDIT_CLIENT_SECRET")
|
||||
|
||||
if not all([client_id, client_secret]):
|
||||
print("Error: REDDIT_CLIENT_ID and REDDIT_CLIENT_SECRET must be set in your .env file.")
|
||||
return
|
||||
|
||||
# 1. Initialize PRAW
|
||||
reddit = praw.Reddit(
|
||||
client_id=client_id,
|
||||
client_secret=client_secret,
|
||||
redirect_uri=REDIRECT_URI,
|
||||
user_agent="rstat_token_fetcher (by u/YourUsername)" # Can be anything
|
||||
)
|
||||
|
||||
# 2. Generate the authorization URL
|
||||
# Scopes define what our script is allowed to do. 'identity' and 'submit' are needed.
|
||||
scopes = ["identity", "submit", "read"]
|
||||
state = str(random.randint(0, 65536))
|
||||
auth_url = reddit.auth.url(scopes, state, "permanent")
|
||||
|
||||
print("\nStep 1: Open this URL in your browser:\n")
|
||||
print(auth_url)
|
||||
|
||||
print("\nStep 2: Log in to Reddit, click 'Allow', and you'll be redirected to a 'page not found'.")
|
||||
print("Step 3: Copy the ENTIRE URL from your browser's address bar after the redirect.")
|
||||
|
||||
# 3. Get the redirected URL from the user
|
||||
redirected_url = input("\nStep 4: Paste the full redirected URL here and press Enter:\n> ")
|
||||
|
||||
# 4. Exchange the authorization code for a refresh token
|
||||
try:
|
||||
# The state is used to prevent CSRF attacks, we're just checking it matches
|
||||
assert state == redirected_url.split("state=")[1].split("&")[0]
|
||||
code = redirected_url.split("code=")[1].split("#_")[0]
|
||||
|
||||
print("\nAuthorization code received. Fetching refresh token...")
|
||||
|
||||
# This is the line that gets the key!
|
||||
refresh_token = reddit.auth.authorize(code)
|
||||
|
||||
print("\n--- SUCCESS! ---")
|
||||
print("Your Refresh Token is:\n")
|
||||
print(refresh_token)
|
||||
print("\nStep 5: Copy this token and add it to your .env file as REDDIT_REFRESH_TOKEN.")
|
||||
print("Step 6: You can now delete your REDDIT_USERNAME and REDDIT_PASSWORD from the .env file.")
|
||||
|
||||
except Exception as e:
|
||||
print(f"\nAn error occurred: {e}")
|
||||
print("Please make sure you copied the full URL.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
Reference in New Issue
Block a user