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