48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
|
import http from 'http';
|
||
|
import _ from 'lodash';
|
||
|
|
||
|
const lybsynFeed = 'http://freecodecamp.libsyn.com/render-type/json';
|
||
|
|
||
|
export function getLybsynFeed() {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
http.get(lybsynFeed, res => {
|
||
|
let raw = '';
|
||
|
|
||
|
res.on('data', chunk => {
|
||
|
raw += chunk;
|
||
|
});
|
||
|
|
||
|
res.on('error', err => reject(err));
|
||
|
|
||
|
res.on('end', () => {
|
||
|
let feed = [];
|
||
|
|
||
|
try {
|
||
|
feed = JSON.parse(raw);
|
||
|
} catch (err) {
|
||
|
return reject(err);
|
||
|
}
|
||
|
const items = feed.map(
|
||
|
item => _.pick(item, [
|
||
|
'full_item_url',
|
||
|
'item_title',
|
||
|
'release_date',
|
||
|
'item_body_short'
|
||
|
])
|
||
|
)
|
||
|
/* eslint-disable camelcase */
|
||
|
.map(({ full_item_url, item_title, release_date, item_body_short}) => ({
|
||
|
title: item_title,
|
||
|
extract: item_body_short,
|
||
|
isoDate: new Date(release_date).toISOString(),
|
||
|
link: full_item_url
|
||
|
}));
|
||
|
/* eslint-enable camelcase */
|
||
|
return resolve(items);
|
||
|
});
|
||
|
|
||
|
});
|
||
|
|
||
|
});
|
||
|
}
|