@sugarcube/plugin-guardian
Version:
Fetch content from the Guardian.
80 lines (64 loc) • 2.06 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _fp = require("lodash/fp");
var _dashp = require("dashp");
var _request = _interopRequireDefault(require("request"));
var _pify = _interopRequireDefault(require("pify"));
var _moment = _interopRequireDefault(require("moment"));
var _core = require("@sugarcube/core");
var _utils = require("./utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const getAsync = (0, _pify.default)(_request.default.get);
const searchGuardian = (0, _fp.curry)((key, term) => {
const opts = {
uri: "https://content.guardianapis.com/search",
qs: {
"api-key": key,
q: term
},
json: true
};
return getAsync(opts).then((0, _fp.property)("body.response.results"));
});
const content = (envelope, {
log,
cfg
}) => {
const {
key
} = cfg.guardian;
const queries = _core.envelope.queriesByType("guardian_search", envelope);
const search = term => (0, _dashp.flowP)([searchGuardian(key), (0, _dashp.tapP)(rs => log.info(`Fetched ${(0, _fp.size)(rs)} pieces of content for ${term}.`))], term);
return (0, _dashp.flowP)([(0, _dashp.flatmapP)(search), (0, _dashp.collectP)(r => {
const unit = {
_sc_source: "guardian_content",
_sc_id_fields: ["id"],
_sc_content_fields: ["webTitle", "webUrl"],
_sc_pubdates: {
source: _moment.default.utc(r.webPublicationDate).toDate()
},
_sc_relations: [{
type: "url",
term: r.webUrl
}, {
type: "url",
term: r.apiUrl
}],
_sc_media: [{
type: "url",
term: r.webUrl
}, {
type: "json",
term: r.apiUrl
}]
};
return (0, _fp.merge)(r, unit);
}), rs => _core.envelope.concatData(rs, envelope)], queries);
};
const plugin = _core.plugin.liftManyA2([_utils.assertKey, content]);
plugin.desc = "Search for content of The Guardian.";
var _default = plugin;
exports.default = _default;