Reddit::Client - A perl wrapper for Reddit
use Reddit::Client; my $session_file = '~/.reddit'; my $reddit = Reddit::Client->new( session_file => $session_file, user_agent => 'MyApp/1.0', ); unless ($reddit->is_logged_in) { $reddit->login('someone', 'secret'); $reddit->save_session(); } $reddit->submit_link( subreddit => 'perl', title => 'Perl is still alive!', url => 'http://www.perl.org' ); my $links = $reddit->fetch_links(subreddit => '/r/perl', limit => 10); foreach (@{$links->{items}}) { ... }
Reddit::Client provides methods and simple object wrappers for objects exposed by the Reddit API. This module handles HTTP communication, basic session management (e.g. storing an active login session), and communication with Reddit's external API.
For more information about the Reddit API, see https://github.com/reddit/reddit/wiki/API.
Note that none of these constants are exported by Reddit::Client.
Reddit::Client
VIEW_HOT "Hot" links feed VIEW_NEW "New" links feed VIEW_CONTROVERSIAL "Controversial" links feed VIEW_TOP "Top" links feed VIEW_DEFAULT Default feed if not specified (VIEW_HOT) DEFAULT_LIMIT The default number of links to be retried (25) VOTE_UP Up vote VOTE_DOWN Down vote VOTE_NONE "Un" vote SUBREDDITS_HOME List reddits on the homepage SUBREDDITS_POPULAR List popular reddits SUBREDDITS_NEW List new reddits SUBREDDITS_MINE List reddits for which the logged in user is subscribed SUBREDDITS_CONTRIB List reddits for which the logged in user is a contributor SUBREDDITS_MOD List reddits for which the logged in user is a moderator
This is the user agent string, and defaults to Reddit::Client/$VERSION. NOTE: This is now deprecated in favor of the user_agent argument to new().
Reddit::Client/$VERSION
When set to true, outputs a small amount of debugging information.
Begins a new or loads an existing reddit session. The user_agent argument will be required in a future release. Omitting it will generate a warning. If session_file is provided, it will be read and parsed as JSON. If session data is found, it is restored. Otherwise, a new session is started. Session data does not restore the user_agent string of the original session.
user_agent
session_file
Returns true(ish) if there is an active login session. No attempt is made to validate the current session against the server.
Saves the current session to $path. Throws an error if the user is not logged in. $path is only required if the Reddit::Client instance was created without the session_file parameter.
$path
Attempts to load the session from $path. When successful, returns true and stores the session file path for future use.
Attempts to log the user in. Throws an error on failure.
Returns a Reddit::Client::Account object.
Returns a list of Reddit::Client::SubReddit objects for $type, where $type is a SUBREDDITS_* constant.
$type
SUBREDDITS_*
Syntactic sugar for list_subreddits(SUBREDDITS_MINE). Throws an error if the user is not logged in.
list_subreddits(SUBREDDITS_MINE)
Syntactic sugar for list_subreddits(SUBREDDITS_HOME). Throws an error if the user is not logged in.
list_subreddits(SUBREDDITS_HOME)
Syntactic sugar for list_subreddits(SUBREDDITS_MOD). Throws an error if the user is not logged in.
list_subreddits(SUBREDDITS_MOD)
Syntactic sugar for list_subreddits(SUBREDDITS_CONTRIB).
list_subreddits(SUBREDDITS_CONTRIB)
Syntactic sugar for list_subreddits(SUBREDDITS_POPULAR).
list_subreddits(SUBREDDITS_POPULAR)
Syntactic sugar for list_subreddits(SUBREDDITS_NEW).
list_subreddits(SUBREDDITS_NEW)
Returns a has of information about $item_id, which must be a complete name (e.g., t3_xxxxx).
$item_id
Returns a list of SubReddit objects matching $query.
$query
Returns a list of links from a reddit page. If subreddit is specified, the list of links is returned from the desired subreddit. Otherwise, the links will be from the front page. view specifieds the feed (e.g. VIEW_NEW or VIEW_HOT). limit may be used to limit the number of objects returned, and before and after denote the placeholders for slicing the feed up, just as the reddit urls themselves do. Data is returned as a hash with three keys, before, after, and items.
subreddit
view
VIEW_NEW
VIEW_HOT
limit
before
after
Deletes a post or comment. The object's full name is required.
Submits a link to a reddit. Returns the id of the new link.
Submits a self-post to a reddit. Returns the id of the new post.
Returns a list ref of Reddit::Client::Comment objects underneath the the specified URL $permalink. Unfortunately, this is the only method available via the API. Comments may be more easily accessed via the Link object, which implicitly provides the $permalink parameter.
$permalink
my $links = $reddit->fetch_links(...); foreach (@{$links->{items}}) { my $comments = $_->comments(); }
Submits a new comment underneath parent_id.
parent_id
Votes for item_id. direction is one of VOTE_UP, VOTE_DOWN, or VOTE_NONE.
item_id
direction
VOTE_UP
VOTE_DOWN
VOTE_NONE
Saves $item_id under the user's account.
Unsaves $item_id under the user's account.
Hides $<item_id>. Throws an error if the user does not have permission to hide the item in question.
Unhides $<item_id>. Throws an error if the user does not have permission to unhide the item in question.
When $Reddit::Client::DEBUG is true, acts as syntactic sugar for warn(sprintf(@_)). Used to provided logging.
$Reddit::Client::DEBUG
Throws an error if the user is not logged in.
Strips slashes and leading /r from a subreddit to ensure that only the "display name" of the subreddit is returned.
Performs a request to reddit's servers using LWP. If the user is logged in, adds the "uh" and "modhash" parameters to POST queries as well as adding the reddit-specified cookie value for reddit_session.
Wraps request, configuring the parameters to perform the request with an api_type of "json". After the request is complete, parses the JSON result and throws and error if one is specified in the result contents. Otherwise, returns the json data portion of the result.
request
Wraps json_request, getting method and path from an API_CONSTANT.
json_request
Jeff Ober mailto:jeffober@gmail.com
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
To install Reddit::Client, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Reddit::Client
CPAN shell
perl -MCPAN -e shell install Reddit::Client
For more information on module installation, please visit the detailed CPAN module installation guide.