Coder Social home page Coder Social logo

snoo's Introduction

Snoo

Snoo is a simple wrapper for the reddit.com api. Its designed to provide an interface as close to the official api as possible, while freeing you from the problems of dealing with json, webserver requests, and session/cookie management.

Unlike other API wrappers, this one doesn't make use of complicated objects or classes, once you instantiate it once, you are good to go.

Since it's designed to be simple, it leaves things like rate limiting up to you. Please follow the reddit api rules and only send one request every 2 seconds (you can use sleep 2 between requests).

Also, if you build programs with it, please change the user agent to your specific use case.

Installation

Add this line to your application's Gemfile:

gem 'snoo'

And then execute:

$ bundle

Or install it yourself as:

$ gem install snoo

Usage

Here's a simple script that sends a private message:

require 'snoo'

# Create a new instance of the client
reddit = Snoo::Client.new

# Log into reddit
reddit.log_in 'Username', 'Password'

# Send a private message to me (Paradox!)
reddit.send_pm 'Paradox', 'Snoo rubygem rocks!', "Hey Paradox, I'm trying your Snoo rubygem out and it rocks. Thanks for providing such an awesome thing!"

# Log back out of reddit
reddit.log_out

See the docs for more info.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Test your changes (via rspec)
  5. Push to the branch (git push origin my-new-feature)
  6. Create new Pull Request

Feed me!

Any and all donations are graciously accepted:

I also would love it if you could endorse this on Coderwall: endorse

Thanks!

License

Copyright (c) 2012 Jeff Sandberg

MIT License

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

snoo's People

Contributors

paradox460 avatar gleamicus avatar yubrew avatar tacho avatar fustrate avatar

Stargazers

 avatar  avatar Thom Veldhuis avatar Siddarth Challa avatar  avatar Natalie Rose avatar Eugenia Grieff avatar J. Brandt Buckley avatar Rahul Roy avatar Max Pleaner avatar  avatar Hongbo Zhen avatar Patrick Schmitz avatar  avatar Liu Lantao avatar Jin avatar Glenn Harris avatar Brandon Lackey avatar Leonard Bogdonoff avatar Sean Clayton avatar Antonio Farinetti avatar Sam avatar vodzord avatar Nicky Marino avatar Thawatchai Piyawat avatar Mark avatar Stephen Woo avatar Mike Ciocca avatar Sean Freiburg avatar Jeff Klein avatar Victor Kmita avatar Kevin Colten avatar JT5D avatar  avatar Jeremie Clos avatar Bob Gardner avatar Jesal Gadhia avatar Dee Evans avatar Stephen Wright avatar Rakesh nagilla avatar James Ruston avatar Brad Huber avatar Aaron Cruz avatar Mark Weiss avatar Blake Jakopovic avatar  avatar Christopher Su avatar  avatar Kristof Vannotten avatar OpenCoderX avatar Ryan Scott Lewis avatar Stephen Coogan avatar Michel Billard avatar Matt Harzewski avatar Peter Boling avatar Brendan G. Lim avatar TJ (Thomas J.) Biddle avatar Christophe Naud-Dulude avatar gr0g avatar Jeffrey Horn avatar Jędrek Kostecki avatar Justin Jensen avatar  avatar Zach Bloomquist avatar Rubén 'Ru' S. Trashorras avatar Stefaney Roberts avatar Bryan Paronto avatar Simon Chatteleyn avatar Maxwell Elliott avatar Cristian Mircea Messel avatar  avatar Seth Vincent avatar Robb Shecter avatar Dan Nguyen avatar David Poindexter avatar Chris avatar John Norman avatar Allyn Bauer avatar Mike Danko avatar

Watchers

Nihad Abbasov avatar Chris Kairalla avatar James Cloos avatar Ed avatar Henry Colomb avatar Victor Maslov avatar Glenn Harris avatar  avatar  avatar

snoo's Issues

set_stylesheet throws a 500

The function should read:

post('/api/subreddit_stylesheet', body: {op: 'save', r: subreddit, stylesheet_contents: stylesheet, uh: @modhash})

instead of

post('/api/subreddit_stylesheet', body: {op: "save", stylesheet_contents: stylesheet, uh: @modhash})

Currently, it gives 500 errors.

require unique user-agents?

In the Reddit API wiki, Many default User-Agents (like "Python/urllib" or "Java") are drastically limited to encourage unique and descriptive user-agent strings. - https://github.com/reddit/reddit/wiki/API

I was having some request problems with logging into my reddit account through snoo, doing something like 1 request every 3-5 minutes, and I am wondering if it's because of the generic snoo user agent.

https://github.com/paradox460/snoo/blob/development/lib/snoo.rb#L36

It might make sense to require a user defined user-agent, and update the docs; e.g. Snoo::Client.new(user-agent: 'my_cool_application')

I'll make a pull request later tonight, if this idea seems ok.

Switch to ruby 2.0

This is designed to be a discussion post regarding making the gem 2.0 only.

By switching we get a few advantages, and a few disadvantages:

Advantages

  • Sexy new ruby
  • lazy enumerators
  • Clean up hashspam in method definitions (yay keyword attributes)

Disadvantages

  • Bye 1.9 😢
  • Would need a new major version, as it breaks almost everything about the api

Thoughts?

get_user_listing of type "comments" doesn't work

The get_user_listing method in user.rb has a typo, which prevents listings of type comments to be retrieved. It's an easy fix, only changing commented to comments in the first line of the method definition.

log_in failures

I regularly see this error:

BASE_PATH/vendor/cache/ruby/1.9.1/gems/snoo-0.1.2/lib/snoo/account.rb:19:in `log_in': undefined method `[]' for nil:NilClass (NoMethodError)

here is some sample code, that roughly follows all the published examples:

[1] pry(main)> require 'snoo'
=> true
[2] pry(main)> x = Snoo::Client.new(:useragent => 'snoo bug test1 user-agent')
=> #<Snoo::Client:0x00000001327d40 @baseurl="http://www.reddit.com", @cookies=nil, @headers={"User-Agent"=>"snoo bug test1 user-agent"}, @modhash=nil>
[3] pry(main)> x.log_in 'user', 'pass'
NoMethodError: undefined method `[]' for nil:NilClass
from BASE_PATH/vendor/cache/ruby/1.9.1/gems/snoo-0.1.2/lib/snoo/account.rb:19:in `log_in'
[4] pry(main)> x.log_in  'user', 'pass'
=> {"json"=>{"errors"=>[], "data"=>{"need_https"=>false, "modhash"=>"redacted", "cookie"=>"redacted"}}}

performing log_in twice works. it's like some hash element doesn't get populated in time for the check on account.rb:19. I even changed my User-Agent to avoid throttling.

I'm currently using this as a terrible workaround.

# Zoidberg: this code is bad and it should feel bad!
begin
  reddit.log_in
rescue
  reddit.log_in
end

subreddit_settings uses incorrect parameter

It wants a subreddit name, i.e. "baseball", as the first parameter and assigns it to 'r'. The API wants 'sr' instead, which is a Thing ID such as 't3_12345'.

I've been doing this to get around it:

settings = reddit.get_subreddit_settings("baseball")

sidebar = 'Stuff'

# Notice the empty string as the first parameter, because it doesn't matter
reddit.subreddit_settings("",
    :sr => settings["data"]["subreddit_id"], # This is the actual one it uses
    :name => settings["data"]["name"],
    :title => settings["data"]["title"],
    :wikimode => settings["data"]["wikimode"],
    :wiki_edit_karma => settings["data"]["wiki_edit_karma"],
    :exclude_banned_modqueue => settings["data"]["exclude_banned_modqueue"],
    :show_media => settings["data"]["show_media"],
    :public_description => settings["data"]["public_description"],
    :"header-title" => settings["data"]["header_hover_text"],
    :description => sidebar
)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.