DEV Community 👩‍💻👨‍💻

Madhusudhan
Madhusudhan

Posted on

Build a web app that gets a random meme from Reddit

Hey folks,

In this article, I will be showing you how to build a very simple web app that makes use of PRAW(Python Reddit API Wrapper) to fetch a random meme from r/memes subreddit.

By understanding how this works, you will be able to build your own customized apps based on your interests such as fetching a random horror story from r/nosleep or fetching cute pictures of pets from r/aww and the possibilities are endless.

So, what are you waiting for? LET'S GET STARTED !

STEP 1: Create a Reddit App

Reddit provides an API to scrape its contents which allows up to 30 requests in a minute. And PRAW is an acronym for 'Python Reddit API Wrapper' which is basically a python package that makes it easy to access reddit API. In order to be able to use the reddit API, we will first have to create a reddit app in our reddit account.

  • Log into reddit and visit https://old.reddit.com/prefs/apps/
  • Click on Create App and fill the necessary details.
  • Once the app has been created, you can use the tokens that has been generated for the app in your program.

STEP 2: Install necessary packages

  • You will first need to install PRAW package before you can use it to access Reddit API.
  • And you will need to install a python web framework since we are building a web app. I have decided to use "Bottle". It is a very simple and lightweight web framework for python that is easy to use.

Installing any package in Python is a Walk In the Park using pip python package manager. So fire up your terminal,

To install PRAW:

pip install praw 
Enter fullscreen mode Exit fullscreen mode

To install Bottle:

pip install bottle 
Enter fullscreen mode Exit fullscreen mode

Step 3: Time to CODE

  • Create a new python file called "app.py". First and foremost, we import the packages.
from bottle import route, template, run
import praw
Enter fullscreen mode Exit fullscreen mode
  • Next, we create an instance of reddit. The tokens obtained in Step 1 while creating the reddit app will be used here.
reddit = praw.Reddit(client_id='your_app_id',
                     client_secret='your_app_secret', 
                     password="your_reddit_password",
                     user_agent='your_app_name',
                     username='your_redditusername')
Enter fullscreen mode Exit fullscreen mode

Be sure to fill in your reddit account and app details.

  • Define the route and the logic for that route
@route('/')
def hello_world():
    subreddit = reddit.subreddit("memes")
    meme = subreddit.random()
    return template("<img src={{submission}}>",submission=meme.url)
Enter fullscreen mode Exit fullscreen mode

This piece of code makes sure that whenever the user requests the route "/" (homepage), @route('/') , it invokes this function hello_world().
subreddit = reddit.subreddit("memes") creates a subreddit instance of r/memes.
meme = subreddit.random() fetches a random post submitted in r/memes.
return template returns a html template and therefore since we want to view the image i.e meme, i have passsed a img tag and since meme.url contains the url of the uploaded meme, we are passing that to the src attribute.

  • Serve the webpages in localhost environment
run(host='localhost', port=8080, debug=True)
Enter fullscreen mode Exit fullscreen mode

The overall app.py should look like this:

from bottle import route, template, run
import praw

reddit = praw.Reddit(client_id='your_app_id',
                     client_secret='your_app_secret', 
                     password="your_reddit_password",
                     user_agent='your_app_name',
                     username='your_redditusername')

@route('/')
def hello_world():
    subreddit = reddit.subreddit("memes")
    meme = subreddit.random()
    return template("<img src={{submission}}>",submission=meme.url)

run(host='localhost', port=8080, debug=True)
Enter fullscreen mode Exit fullscreen mode

Now lets run this program. Open your terminal in the directory that contains app.py and type

python app.py
Enter fullscreen mode Exit fullscreen mode

Alt Text

Your website is now ready and is available at http://localhost:8080
You should now see a new meme every time you reload it.

Alt Text

Alt Text

Thats all folks ! This was a very simple usage of PRAW. Dive deep into PRAW and you will be able to make many interesting apps, or to make a full fledged website and moreeeeeeeeeeee !

Top comments (3)

Collapse
nirupanbhandari profile image
Nirupan Bhandari

It says Only scripts may use password auth. Please Help

Collapse
thomassahil profile image
ThomasSahil

If I wanted to style the website how exactly would I do it?

Collapse
thereal_madhu profile image
Madhusudhan Author

If u want to style that website, you will need to learn CSS

🌚 Browsing with dark mode makes you a better developer by a factor of exactly 40.

It's a scientific fact.