Added multi-user support.
This commit is contained in:
parent
e6425b3e3c
commit
67d573952b
|
@ -9,9 +9,14 @@ reddit-post-dump requires a arbitrarily recent version of Node.js. Before use, d
|
||||||
`node app.js --user={username}`
|
`node app.js --user={username}`
|
||||||
|
|
||||||
### Optional parameters
|
### Optional parameters
|
||||||
* `--limit={number}`: Maximum amount posts to fetch content from
|
* `--users={user1,user2}`: You may fetch posts from multiple users by either supplying a comma-separated list of usernames (no spaces) with `--users`, or using multiple individual `--user` arguments
|
||||||
|
* `--limit={number}`: Maximum amount posts per user to fetch content from
|
||||||
* `--sort={method}`: How posts should be sorted while fetched. This affects the `$postIndex` variable, and in combination with a `--limit` decides what posts will be included
|
* `--sort={method}`: How posts should be sorted while fetched. This affects the `$postIndex` variable, and in combination with a `--limit` decides what posts will be included
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
* `node app.js --user=ThePendulum`
|
||||||
|
* `node app.js --user=ThePendulum --limit=10 --sort=top`
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
The default configuration aims to be sensible, and the application may be used without any further tweaking. However, a multitude of options make this utility particularly powerful.
|
The default configuration aims to be sensible, and the application may be used without any further tweaking. However, a multitude of options make this utility particularly powerful.
|
||||||
|
|
||||||
|
|
49
app.js
49
app.js
|
@ -5,31 +5,34 @@ const util = require('util');
|
||||||
const yargs = require('yargs').argv;
|
const yargs = require('yargs').argv;
|
||||||
const snoowrap = require('snoowrap');
|
const snoowrap = require('snoowrap');
|
||||||
const methods = require('./methods/methods.js');
|
const methods = require('./methods/methods.js');
|
||||||
const dissectLink = require('./dissectLink.js');
|
const curate = require('./curate.js');
|
||||||
const fetchContent = require('./fetchContent.js');
|
const fetchContent = require('./fetchContent.js');
|
||||||
|
|
||||||
const reddit = new snoowrap(config.reddit.api);
|
const reddit = new snoowrap(config.reddit.api);
|
||||||
|
|
||||||
reddit.getUser(yargs.user).getSubmissions({
|
function getSubmissions(users) {
|
||||||
sort: yargs.sort || config.reddit.sort,
|
return users.reduce((chain, user) => {
|
||||||
limit: yargs.limit || config.reddit.limit
|
return chain.then(acc => {
|
||||||
}).then(submissions => {
|
return reddit.getUser(user).getSubmissions({
|
||||||
const curatedPosts = submissions.map((submission, index) => {
|
sort: yargs.sort || config.reddit.sort,
|
||||||
return {
|
limit: yargs.limit || config.reddit.limit
|
||||||
id: submission.id,
|
}).then(submissions => {
|
||||||
index: index,
|
return acc.concat(submissions);
|
||||||
title: submission.title,
|
});
|
||||||
text: submission.selftext,
|
});
|
||||||
user: submission.author.name,
|
}, Promise.resolve([]));
|
||||||
permalink: submission.permalink,
|
};
|
||||||
url: submission.url,
|
|
||||||
datetime: submission.created_utc * 1000,
|
|
||||||
subreddit: submission.subreddit.display_name,
|
|
||||||
host: dissectLink(submission.url)
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
return Promise.all(curatedPosts.reduce((acc, post) => {
|
Promise.resolve().then(() => {
|
||||||
|
if(yargs.user || yargs.users) {
|
||||||
|
const users = yargs.users ? yargs.users.split(',') : [].concat(yargs.user);
|
||||||
|
|
||||||
|
return getSubmissions(users);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Promise.reject('Please supply at least one user with one or multiple --user, or --users!');
|
||||||
|
}).then(submissions => {
|
||||||
|
return Promise.all(curate(submissions).reduce((acc, post) => {
|
||||||
if(post.host && methods[post.host.method]) {
|
if(post.host && methods[post.host.method]) {
|
||||||
acc = acc.concat(methods[post.host.method](post).then(content => {
|
acc = acc.concat(methods[post.host.method](post).then(content => {
|
||||||
post.content = content;
|
post.content = content;
|
||||||
|
@ -42,6 +45,8 @@ reddit.getUser(yargs.user).getSubmissions({
|
||||||
|
|
||||||
return acc;
|
return acc;
|
||||||
}, []));
|
}, []));
|
||||||
}).then(posts => fetchContent(posts)).catch(error => {
|
}).then(posts => {
|
||||||
console.error(error);
|
return fetchContent(posts);
|
||||||
|
}).catch(error => {
|
||||||
|
return console.log('\x1b[33m%s\x1b[0m', error);
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const dissectLink = require('./dissectLink.js');
|
||||||
|
|
||||||
|
function curate(submissions) {
|
||||||
|
return submissions.map((submission, index) => {
|
||||||
|
return {
|
||||||
|
id: submission.id,
|
||||||
|
index: index,
|
||||||
|
title: submission.title,
|
||||||
|
text: submission.selftext,
|
||||||
|
user: submission.author.name,
|
||||||
|
permalink: submission.permalink,
|
||||||
|
url: submission.url,
|
||||||
|
datetime: submission.created_utc * 1000,
|
||||||
|
subreddit: submission.subreddit.display_name,
|
||||||
|
host: dissectLink(submission.url)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = curate;
|
Loading…
Reference in New Issue