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); | ||
|  |       }); | ||
|  | 
 | ||
|  |     }); | ||
|  | 
 | ||
|  |   }); | ||
|  | } |