Spaces:
Running
Running
# Install necessary libraries | |
# pip install praw gradio pandas | |
import praw | |
import gradio as gr | |
import os | |
# Step 1: Set up Reddit API authentication using environment variables | |
reddit = praw.Reddit( | |
client_id=os.getenv("REDDIT_CLIENT_ID"), # Fetch from environment variables | |
client_secret=os.getenv("REDDIT_CLIENT_SECRET"), # Fetch from environment variables | |
user_agent="my-reddit-app/1.0" # User-agent can stay as is | |
) | |
# Step 2: Function to fetch posts from subreddits | |
def get_posts(subreddits, keywords, time_filter="day"): | |
posts = [] | |
for subreddit in subreddits.split(","): | |
subreddit_obj = reddit.subreddit(subreddit.strip()) | |
for post in subreddit_obj.search(" OR ".join(keywords.split(",")), time_filter=time_filter): | |
posts.append({ | |
"title": post.title, | |
"url": post.url, | |
"created": post.created_utc, | |
"selftext": post.selftext | |
}) | |
return posts | |
# Step 3: Function to filter posts based on keywords | |
def filter_posts(posts, keywords): | |
filtered_posts = [] | |
for post in posts: | |
if any(keyword.lower() in (post['title'] + post['selftext']).lower() for keyword in keywords.split(",")): | |
filtered_posts.append(post) | |
return filtered_posts | |
# Step 4: Function to categorize posts into topics | |
def categorize_posts(posts): | |
categories = { | |
"AI": ["AI", "machine learning", "deep learning"], | |
"Programming": ["Python", "JavaScript", "coding"], | |
"Tech": ["gadgets", "technology", "innovation"] | |
} | |
categorized_posts = {category: [] for category in categories} | |
for post in posts: | |
for category, keywords in categories.items(): | |
if any(keyword.lower() in post['title'].lower() for keyword in keywords): | |
categorized_posts[category].append(post) | |
return categorized_posts | |
# Step 5: Main function to process Reddit data | |
def process_reddit(subreddits, keywords, time_filter): | |
posts = get_posts(subreddits, keywords, time_filter) | |
filtered = filter_posts(posts, keywords) | |
categorized = categorize_posts(filtered) | |
result = {} | |
for category, posts in categorized.items(): | |
result[category] = [{"Title": post["title"], "URL": post["url"]} for post in posts] | |
return result | |
# Step 6: Create Gradio interface | |
interface = gr.Interface( | |
fn=process_reddit, | |
inputs=[ | |
gr.Textbox(label="Subreddits (comma-separated)", placeholder="e.g., technology, python"), | |
gr.Textbox(label="Keywords (comma-separated)", placeholder="e.g., AI, Python, gadgets"), | |
gr.Dropdown(choices=["hour", "day", "week", "month", "year", "all"], value="day", label="Time Filter") | |
], | |
outputs=gr.JSON(label="Categorized Posts"), | |
title="Reddit Post Filter", | |
description="Search specific subreddits for posts containing certain keywords and categorize them into topics." | |
) | |
# Launch the Gradio interface | |
if __name__ == "__main__": | |
interface.launch() | |