dcard
Version:
👫 Unofficial Dcard API wrapper for Node.js developers.
282 lines (241 loc) • 8.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.setReadPercentage = exports.listTrendingPost = exports.searchPost = exports.reportPost = exports.unsubscribePost = exports.subscribePost = exports.uncollectPost = exports.collectPost = exports.unlikePost = exports.likePost = exports.destroyPost = exports.updatePost = exports.createPost = exports.getPost = exports.listMySubscription = exports.listMyPost = exports.listPost = undefined;
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var getCollection = function () {
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() {
var collections;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return (0, _collections.listCollection)();
case 2:
collections = _context.sent;
return _context.abrupt('return', collections[0]);
case 4:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
return function getCollection() {
return _ref.apply(this, arguments);
};
}();
var collectPost = exports.collectPost = function () {
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(id) {
var collection;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return getCollection();
case 2:
collection = _context2.sent;
return _context2.abrupt('return', (0, _request.api)('collections/' + collection.get('id') + '/posts', {
method: 'post',
body: {
postId: +id
}
}).then(_request.filterError));
case 4:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
return function collectPost(_x) {
return _ref2.apply(this, arguments);
};
}();
var uncollectPost = exports.uncollectPost = function () {
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(id) {
var collection;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
collection = getCollection();
return _context3.abrupt('return', (0, _request.api)('collections/' + collection.get('id') + '/posts/' + id, {
method: 'delete'
}).then(_request.filterError));
case 2:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
}));
return function uncollectPost(_x2) {
return _ref3.apply(this, arguments);
};
}();
var _lodash = require('lodash');
var _qs = require('qs');
var _qs2 = _interopRequireDefault(_qs);
var _request = require('../request');
var _collections = require('./collections');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* List Posts of a forum
* @param {object} options
* @param {String} options.forum vehicle for instance, please refer to docs/forumList.json to get forum name.
* @param {String} options.before List posts before a post id
* @param {String} options.after List posts after a post id
* @param {Boolean} options.popular true | false
* @example
* const options = {
* forum: 'vehicle',
* popular: false,
* before: 225687456,
* };
* listPost(options).then((res) => {
* console.log(res);
* });
*/
var listPost = exports.listPost = function listPost(options) {
var url = options.forum ? 'forums/' + options.forum + '/posts' : 'posts';
return (0, _request.api)(url + '?' + _qs2.default.stringify((0, _lodash.omit)(options, 'forum'))).then(_request.filterError).then(_request.parseJSON).then(function (res) {
// event article
if (!options.popular || options.after || options.before) {
return res;
}
var angels = [];
return res.reduce(function (posts, post, idx) {
var p = posts.slice();
if (idx === 9 && angels.length) {
p = p.concat(angels);
angels = [];
} else if (post.pinned && post.department === 'dcardadangel') {
angels.push(post);
} else {
p.push(post);
}
return p;
}, []).concat(angels);
});
};
/**
* List your posts. login required.
* @param {object} options
* @param {String} options.before List posts before a post id
* @example
* const options = {
* before: 225687456,
* };
* listMyPost(options).then((res) => {
* console.log(res);
* });
*/
var listMyPost = exports.listMyPost = function listMyPost(options) {
return (0, _request.api)('me/posts?' + _qs2.default.stringify(options)).then(_request.filterError).then(_request.parseJSON);
};
/**
* List your subscriptions. login required.
* @param {object} options
* @param {Boolean} options.popular true | false
* @example
* const options = {
* popular: true,
* };
* listMySubscription(options).then((res) => {
* console.log(res);
* });
*/
var listMySubscription = exports.listMySubscription = function listMySubscription(options) {
return (0, _request.api)('me/subscriptions?' + _qs2.default.stringify(options)).then(_request.filterError).then(_request.parseJSON);
};
/**
* Get content of a specified post id.
* @param {object} options {} is allowed
* @param {Number} id post id
* @example
* const postId = 225688036;
* const options = {};
* getPost(postId, options).then((res) => {
* console.log(res);
* });
*/
var getPost = exports.getPost = function getPost(id, options) {
return (0, _request.api)('posts/' + id + '?' + _qs2.default.stringify(options)).then(_request.filterError).then(_request.parseJSON);
};
var createPost = exports.createPost = function createPost(data) {
return (0, _request.api)(data.replyId ? 'posts/' + data.replyId + '/replies' : 'forums/' + data.forum + '/posts', {
method: 'post',
body: (0, _lodash.pick)(data, ['title', 'content', 'anonymous', 'withNickname'])
}).then(_request.filterError).then(_request.parseJSON);
};
var updatePost = exports.updatePost = function updatePost(id, data) {
return (0, _request.api)('posts/' + id, {
method: 'put',
body: (0, _lodash.pick)(data, ['title', 'content'])
}).then(_request.filterError).then(_request.parseJSON);
};
var destroyPost = exports.destroyPost = function destroyPost(id) {
return (0, _request.api)('posts/' + id, {
method: 'delete'
}).then(_request.filterError).then(function () {
return { id: +id };
});
};
var likePost = exports.likePost = function likePost(id) {
return (0, _request.api)('posts/' + id + '/like', {
method: 'post'
}).then(_request.filterError);
};
var unlikePost = exports.unlikePost = function unlikePost(id) {
return (0, _request.api)('posts/' + id + '/like', {
method: 'delete'
}).then(_request.filterError);
};
var subscribePost = exports.subscribePost = function subscribePost(id) {
return (0, _request.api)('posts/' + id + '/subscribe', {
method: 'post'
}).then(_request.filterError);
};
var unsubscribePost = exports.unsubscribePost = function unsubscribePost(id) {
return (0, _request.api)('posts/' + id + '/subscribe', {
method: 'delete'
}).then(_request.filterError);
};
var reportPost = exports.reportPost = function reportPost(id, data) {
return (0, _request.api)('posts/' + id + '/reports', {
method: 'post',
body: data
}).then(_request.filterError).then(_request.parseJSON).catch(function (res) {
return res.response.status === 403;
});
};
/**
* Search posts by specified keyword.
* @param {object} options
* @param {string} options.query search keyword
* @example
* const options = {
* query: '愛情',
* };
* searchPost(options).then((res) => {
* console.log(res);
* });
*/
var searchPost = exports.searchPost = function searchPost(options) {
return (0, _request.api)('search/posts?' + _qs2.default.stringify(options)).then(_request.filterError).then(_request.parseJSON);
};
var listTrendingPost = exports.listTrendingPost = function listTrendingPost(options) {
return (0, _request.api)('topix/' + options.tags + '/posts?' + _qs2.default.stringify((0, _lodash.omit)(options, 'tags'))).then(_request.filterError).then(_request.parseJSON);
};
var setReadPercentage = exports.setReadPercentage = function setReadPercentage(id) {
return (0, _request.api)('posts/' + id + '/readPercentage/100', {
method: 'post'
}).then(_request.filterError);
};