praw
PRAW, an acronym for "Python Reddit API Wrapper", is a python package that allows for simple access to Reddit's API.
Top Related Projects
historical code from reddit.com
Pushshift API
A multi-function Discord bot
An API wrapper for Discord written in Python.
Quick Overview
PRAW (Python Reddit API Wrapper) is a Python package that provides a simple, efficient interface for interacting with the Reddit API. It allows developers to easily access and manipulate data from the Reddit platform, such as posts, comments, and user information.
Pros
- Simplifies Reddit API Interaction: PRAW abstracts away the complexities of the Reddit API, allowing developers to focus on building their applications rather than dealing with the intricacies of the API.
- Extensive Documentation: The PRAW project has comprehensive documentation, making it easy for developers to get started and understand the library's features and capabilities.
- Active Development and Community: PRAW is actively maintained by a team of developers, and the project has a vibrant community of contributors and users, ensuring ongoing support and improvements.
- Supports Modern Python Versions: PRAW is compatible with the latest versions of Python, allowing developers to take advantage of the latest language features and best practices.
Cons
- Limited Functionality: While PRAW provides a wide range of functionality, it may not cover all the use cases or features available in the Reddit API. Developers may need to resort to using the Reddit API directly for more advanced or specialized use cases.
- Dependency on Reddit API Changes: PRAW's functionality is dependent on the Reddit API, and changes to the API may require updates to the library, which could potentially break existing code.
- Steep Learning Curve for Beginners: The library's extensive functionality and the complexity of the Reddit API can make it challenging for beginners to get started, especially if they are new to both Python and the Reddit platform.
- Performance Limitations: PRAW may not be the most efficient choice for high-volume or real-time applications, as it may not be able to handle large amounts of data or high-frequency requests as efficiently as a more low-level API implementation.
Code Examples
Here are a few examples of how to use PRAW:
- Retrieving the top posts from a subreddit:
import praw
reddit = praw.Reddit(client_id="your_client_id",
client_secret="your_client_secret",
user_agent="your_user_agent")
subreddit = reddit.subreddit("python")
top_posts = subreddit.top(limit=10)
for post in top_posts:
print(post.title)
- Commenting on a post:
import praw
reddit = praw.Reddit(client_id="your_client_id",
client_secret="your_client_secret",
user_agent="your_user_agent")
submission = reddit.submission(url="https://www.reddit.com/r/python/comments/123456789/example_post/")
submission.comment("This is a comment on the post.")
- Retrieving a user's recent comments:
import praw
reddit = praw.Reddit(client_id="your_client_id",
client_secret="your_client_secret",
user_agent="your_user_agent")
user = reddit.redditor("username")
for comment in user.comments.new(limit=10):
print(comment.body)
- Submitting a new post to a subreddit:
import praw
reddit = praw.Reddit(client_id="your_client_id",
client_secret="your_client_secret",
user_agent="your_user_agent")
subreddit = reddit.subreddit("python")
submission = subreddit.submit("Example Post Title", url="https://example.com")
Getting Started
To get started with PRAW, follow these steps:
- Install the PRAW library using pip:
pip install praw
-
Create a Reddit app on the Reddit website and obtain the necessary credentials (client ID, client secret, and user agent).
-
Initialize the PRAW client with your credentials:
import praw
reddit = praw.Reddit(client_id="your_client_id",
client_secret="your_client_secret",
user_agent="your_user_agent")
- Start
Competitor Comparisons
historical code from reddit.com
Pros of reddit-archive/reddit
- Provides a more comprehensive set of features and functionality compared to PRAW, including support for various Reddit API endpoints and advanced features.
- Offers a more robust and mature codebase, with a longer history of development and a larger community of contributors.
- Includes built-in support for handling complex Reddit data structures and interactions, reducing the need for additional libraries or custom code.
Cons of reddit-archive/reddit
- Has a steeper learning curve and may require more time to understand and integrate into a project compared to PRAW.
- May have a larger codebase and dependencies, which could lead to increased complexity and potential performance issues in certain use cases.
- May have a less active development community compared to PRAW, which could result in slower response times for issues or feature requests.
Code Comparison
PRAW (praw-dev/praw):
import praw
reddit = praw.Reddit(
client_id="your_client_id",
client_secret="your_client_secret",
user_agent="your_user_agent"
)
subreddit = reddit.subreddit("python")
for submission in subreddit.hot(limit=10):
print(submission.title)
reddit-archive/reddit:
from reddit import Reddit
reddit = Reddit(
client_id="your_client_id",
client_secret="your_client_secret",
user_agent="your_user_agent"
)
subreddit = reddit.subreddit("python")
for submission in subreddit.hot(limit=10):
print(submission.title)
As you can see, the code structure and usage are quite similar between the two libraries, with the main difference being the import statement and the class name (praw.Reddit
vs. Reddit
).
Pushshift API
Pros of pushshift/api
- Provides a comprehensive API for accessing Reddit data, including comments, submissions, and user information.
- Offers a wide range of filtering and sorting options, allowing for more targeted data retrieval.
- Supports batch processing and pagination, enabling efficient handling of large datasets.
Cons of pushshift/api
- Requires more manual setup and configuration compared to PRAW, as it does not provide a high-level abstraction layer.
- May have a steeper learning curve for developers unfamiliar with building API clients.
- Potential for rate limiting or access restrictions, depending on the API usage.
Code Comparison
PRAW (praw-dev/praw):
import praw
reddit = praw.Reddit(client_id='your_client_id',
client_secret='your_client_secret',
user_agent='your_user_agent')
subreddit = reddit.subreddit('AskReddit')
for submission in subreddit.hot(limit=10):
print(submission.title)
pushshift/api:
import requests
url = 'https://api.pushshift.io/reddit/submission/search/'
params = {
'subreddit': 'AskReddit',
'limit': 10,
'sort': 'desc',
'sort_type': 'created_utc'
}
response = requests.get(url, params=params)
data = response.json()['data']
for submission in data:
print(submission['title'])
A multi-function Discord bot
Pros of Red-DiscordBot
- Red-DiscordBot is a feature-rich Discord bot that offers a wide range of functionality, including moderation tools, music playback, and custom commands.
- The project has a large and active community, with many contributors and a well-documented codebase.
- Red-DiscordBot is highly customizable, allowing users to create their own cogs (plugins) to extend the bot's capabilities.
Cons of Red-DiscordBot
- The codebase of Red-DiscordBot is more complex than PRAW, which may make it more challenging for new contributors to get started.
- The project has a steeper learning curve compared to PRAW, as it requires users to understand the bot's architecture and how to create and manage cogs.
- Red-DiscordBot may have a higher resource footprint than PRAW, as it is a more feature-rich and complex application.
Code Comparison
PRAW (Python Reddit API Wrapper):
import praw
reddit = praw.Reddit(
client_id="your_client_id",
client_secret="your_client_secret",
user_agent="your_user_agent"
)
subreddit = reddit.subreddit("python")
for submission in subreddit.hot(limit=10):
print(submission.title)
Red-DiscordBot (Cog example):
from redbot.core import commands
class MyCustomCog(commands.Cog):
"""My custom cog"""
def __init__(self, bot):
self.bot = bot
@commands.command()
async def hello(self, ctx):
"""Say hello"""
await ctx.send("Hello!")
An API wrapper for Discord written in Python.
Pros of discord.py
- Extensive documentation and community support
- Comprehensive set of features for building Discord bots
- Actively maintained and regularly updated
Cons of discord.py
- Steeper learning curve compared to PRAW
- Larger codebase and dependencies, which may impact performance
Code Comparison
PRAW (Reddit API):
import praw
reddit = praw.Reddit(
client_id="your_client_id",
client_secret="your_client_secret",
user_agent="your_user_agent"
)
subreddit = reddit.subreddit("python")
for submission in subreddit.hot(limit=10):
print(submission.title)
discord.py:
import discord
intents = discord.Intents.default()
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print(f'{client.user.name} has connected to Discord!')
client.run('your_bot_token')
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
PRAW: The Python Reddit API Wrapper
.. image:: https://img.shields.io/pypi/v/praw.svg :alt: Latest PRAW Version :target: https://pypi.python.org/pypi/praw
.. image:: https://img.shields.io/pypi/pyversions/praw :alt: Supported Python Versions :target: https://pypi.python.org/pypi/praw
.. image:: https://img.shields.io/pypi/dm/praw :alt: PyPI - Downloads - Monthly :target: https://pypi.python.org/pypi/praw
.. image:: https://github.com/praw-dev/praw/actions/workflows/ci.yml/badge.svg?event=push :alt: GitHub Actions Status :target: https://github.com/praw-dev/praw/actions/workflows/ci.yml
.. image:: https://coveralls.io/repos/github/praw-dev/praw/badge.svg :alt: Coveralls Coverage :target: https://coveralls.io/github/praw-dev/praw?branch=master
.. image:: https://api.securityscorecards.dev/projects/github.com/praw-dev/praw/badge :alt: OpenSSF Scorecard :target: https://api.securityscorecards.dev/projects/github.com/praw-dev/praw
.. image:: https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg :alt: Contributor Covenant :target: https://github.com/praw-dev/.github/blob/main/CODE_OF_CONDUCT.md
.. image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white :alt: pre-commit :target: https://github.com/pre-commit/pre-commit
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg :alt: Black code style :target: https://github.com/psf/black
PRAW, an acronym for "Python Reddit API Wrapper", is a Python package that allows for
simple access to Reddit's API. PRAW aims to be easy to use and internally follows all of
Reddit's API rules <https://github.com/reddit/reddit/wiki/API>
_. With PRAW there's no
need to introduce sleep
calls in your code. Give your client an appropriate user
agent and you're set.
.. _installation:
Installation
PRAW is supported on Python 3.8+. The recommended way to install PRAW is via pip <https://pypi.python.org/pypi/pip>
_.
.. code-block:: bash
pip install praw
To install the latest development version of PRAW run the following instead:
.. code-block:: bash
pip install --upgrade https://github.com/praw-dev/praw/archive/master.zip
For instructions on installing Python and pip see "The Hitchhiker's Guide to Python"
Installation Guides <https://docs.python-guide.org/en/latest/starting/installation/>
_.
Quickstart
Assuming you already have a credentials for a script-type OAuth application you can instantiate an instance of PRAW like so:
.. code-block:: python
import praw
reddit = praw.Reddit(
client_id="CLIENT_ID",
client_secret="CLIENT_SECRET",
password="PASSWORD",
user_agent="USERAGENT",
username="USERNAME",
)
With the reddit
instance you can then interact with Reddit:
.. code-block:: python
# Create a submission to r/test
reddit.subreddit("test").submit("Test Submission", url="https://reddit.com")
# Comment on a known submission
submission = reddit.submission(url="https://www.reddit.com/comments/5e1az9")
submission.reply("Super rad!")
# Reply to the first comment of a weekly top thread of a moderated community
submission = next(reddit.subreddit("mod").top(time_filter="week"))
submission.comments[0].reply("An automated reply")
# Output score for the first 256 items on the frontpage
for submission in reddit.front.hot(limit=256):
print(submission.score)
# Obtain the moderator listing for r/test
for moderator in reddit.subreddit("test").moderator():
print(moderator)
Please see PRAW's documentation <https://praw.readthedocs.io/>
_ for more examples of
what you can do with PRAW.
Discord Bots and Asynchronous Environments
If you plan on using PRAW in an asynchronous environment, (e.g., discord.py, asyncio) it
is strongly recommended to use Async PRAW <https://asyncpraw.readthedocs.io/>
_. It is
the official asynchronous version of PRAW and its usage is similar and has the same
features as PRAW.
PRAW Discussion and Support
For those new to Python, or would otherwise consider themselves a Python beginner,
please consider asking questions on the r/learnpython <https://www.reddit.com/r/learnpython>
_ subreddit. There are wonderful people there who
can help with general Python and simple PRAW related questions.
Otherwise, there are a few official places to ask questions about PRAW:
r/redditdev <https://www.reddit.com/r/redditdev>
_ is the best place on Reddit to ask
PRAW related questions. This subreddit is for all Reddit API related discussion so
please tag submissions with [PRAW]. Please perform a search on the subreddit first to
see if anyone has similar questions.
Real-time chat can be conducted via the PRAW Slack Organization <https://join.slack.com/t/praw/shared_invite/enQtOTUwMDcxOTQ0NzY5LWVkMGQ3ZDk5YmQ5MDEwYTZmMmJkMTJkNjBkNTY3OTU0Y2E2NGRlY2ZhZTAzMWZmMWRiMTMwYjdjODkxOGYyZjY>
_
(please create an issue if that invite link has expired).
Please do not directly message any of the contributors via Reddit, email, or Slack unless they have indicated otherwise. We strongly encourage everyone to help others with their questions.
Please file bugs and feature requests as issues on GitHub <https://github.com/praw-dev/praw/issues>
_ after first searching to ensure a similar
issue was not already filed. If such an issue already exists please give it a thumbs up
reaction. Comments to issues containing additional information are certainly welcome.
.. note::
This project is released with a `Contributor Code of Conduct
<https://github.com/praw-dev/.github/blob/main/CODE_OF_CONDUCT.md>`_. By
participating in this project you agree to abide by its terms.
Documentation
PRAW's documentation is located at https://praw.readthedocs.io/.
History
August 2010 <https://github.com/praw-dev/praw/commit/efef08a4a713fcfd7dfddf992097cf89426586ae>
_:
Timothy Mellor created a github project called reddit_api
.
March 2011 <https://github.com/praw-dev/praw/commit/ebfc9caba5b58b9e68c77af9c8e53f5562a2ee64>
_:
The Python package reddit
was registered and uploaded to pypi.
December 2011 <https://github.com/praw-dev/praw/commit/74bb962b3eefe04ce6acad88e6f53f43d10c8803>
_:
Bryce Boe took over as maintainer of the reddit
package.
June 2012 <https://github.com/praw-dev/praw/commit/adaf89fe8631f41ab9913b379de104c9ef6a1e73>
_:
Bryce renamed the project PRAW
and the repository was relocated to the newly created
praw-dev organization on GitHub.
February 2016 <https://github.com/praw-dev/praw/commit/252083ef1dbfe6ea53c2dc99ac235b4ba330b658>
_:
Bryce began work on PRAW4, a complete rewrite of PRAW.
License
PRAW's source (v4.0.0+) is provided under the Simplified BSD License <https://github.com/praw-dev/praw/blob/0860c11a9309c80621c267af7caeb6a993933744/LICENSE.txt>
_.
- Copyright ©, 2016, Bryce Boe
Earlier versions of PRAW were released under GPLv3 <https://github.com/praw-dev/praw/blob/0c88697fdc26e75f87b68e2feb11e101e90ce215/COPYING>
_.
Top Related Projects
historical code from reddit.com
Pushshift API
A multi-function Discord bot
An API wrapper for Discord written in Python.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot