getUser(), and the method to upvote something is just
These features ensure that you can write less boilerplate code and focus more on actually doing what you want to do.
snoowrap's methods are designed to be as simple and consistent as possible. So the following expression:
...will return a Promise. So will this one:
rauthorname// --> returns a Promise for the string 'DO_U_EVN_SPAGHETTI'// (this submission's author's name)
The above will return a Promise for the author's name, without having to deal with callback hell or
.then statements. You can chain multiple API calls together:
rsubreddit0name// --> returns a Promise for the string 'krispykrackers'// (this submission's subreddit's first mod's name)
...or chain actions together with fluent syntax:
snoowrap works on Node.js 4+, as well as most common browsers.
'use strict';const snoowrap = ;// NOTE: The following examples illustrate how to use snoowrap. However, hardcoding// credentials directly into your source code is generally a bad idea in practice (especially// if you're also making your source code public). Instead, it's better to either (a) use a separate// config file that isn't committed into version control, or (b) use environment variables.// Create a new snoowrap requester with OAuth credentials.// For more information on getting credentials, see here:const r =userAgent: 'put your user-agent string here'clientId: 'put your client id here'clientSecret: 'put your client secret here'refreshToken: 'put your refresh token here';// Alternatively, just pass in a username and password for script-type apps.const otherRequester =userAgent: 'put your user-agent string here'clientId: 'put your client id here'clientSecret: 'put your client secret here'username: 'put your username here'password: 'put your password here';// That's the entire setup process, now you can just make requests.// Submitting a link to a subredditr;// Printing a list of the titles on the front pager;// Extracting every comment on a threadr// Automating moderation tasksr;// Automatically creating a stickied thread for a moderated subredditr;// etc. etc.// Printing the content of a wiki pagercontent_md;
For more examples of what can be done with snoowrap, take a look at the documentation.
Reddit's live threads are different from most other content, in that messages are distributed through websockets instead of a RESTful API. snoowrap supports this protocol under the hood by representing the content stream as an EventEmitter. For example, the following script will stream all livethread updates to the console as they appear:
For more information, see the LiveThread documentation page.
snoowrap uses the
Proxy object introduced in ES6.
If your target environment does not support Proxies, snoowrap will still function. However, method chaining as described above won't work, so your syntax will need to be a bit heavier.
--harmony_proxiesruntime flag to be enabled. e.g.
node --harmony_proxies yourFile.js)
Example of how Proxy support affects behavior:
// This works in environments that support Proxies.// However, it throws a TypeError if Proxies are not available.rcomments0;// ----------// This is equivalent and works on all platforms, but the syntax isn't as nice.r;
You can explicitly disable method chaining with
npm install snoowrap --save
var snoowrap = ;
snoowrap is usable with module bundlers such as browserify.
Alternatively, prebuilt versions are available:
These files will occasionally be updated as new versions of snoowrap 1 are released. Since snoowrap follows semantic versioning, the changes should not break your code. However, if you would prefer to pin the version, you can specify a version number in the URL (e.g. snoowrap-v1.11.3.min.js). For a list of all available prebuilt versions, see the gh-pages branch of this repository.
When run in a browser, snoowrap will be assigned to the global variable
window.snoowrap. If you want to avoid global state (or you're using two versions of snoowrap on the same page for some reason), use
snoowrap.noConflict() to restore
window.snoowrap to its previous value.
This software is freely distributable under the MIT License.