40 lines
		
	
	
		
			948 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			948 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | import Parser from 'rss-parser'; | ||
|  | import _ from 'lodash'; | ||
|  | 
 | ||
|  | const parser = new Parser(); | ||
|  | 
 | ||
|  | const mediumFeed = 'https://medium.freecodecamp.org/feed'; | ||
|  | 
 | ||
|  | function getExtract(str) { | ||
|  |   return str.slice(0, str.indexOf('</p>') + 4); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | function addResponsiveClass(str) { | ||
|  |   return str.replace(/\<img/g, '<img class="img-responsive"'); | ||
|  | } | ||
|  | 
 | ||
|  | export function getMediumFeed() { | ||
|  |   return new Promise((resolve, reject) => { | ||
|  |     parser.parseURL(mediumFeed, (err, feed) => { | ||
|  |       if (err) { | ||
|  |         reject(err); | ||
|  |       } | ||
|  | 
 | ||
|  |       const items = feed.items | ||
|  |         .map( | ||
|  |           item => _.pick(item, ['title', 'link', 'isoDate', 'content:encoded']) | ||
|  |         ) | ||
|  |         .map( | ||
|  |           (item) => ({ | ||
|  |             ...item, | ||
|  |             extract: getExtract(item['content:encoded']) | ||
|  |           }) | ||
|  |         ) | ||
|  |         .map(item => _.omit(item, ['content:encoded'])) | ||
|  |         .map(item => ({ ...item, extract: addResponsiveClass(item.extract)})); | ||
|  |       resolve(items); | ||
|  |     }); | ||
|  |   }); | ||
|  | } |