Search code examples
reactjsapirssfeed

How to fetch Multiple news data using RSS Feed in React JS


I already done RSS Feed implementation. Now I'm able to fetch 1 News using this code. I want to fetch multiple news using this code. How can I do that.

Thank in advances.

class FetchDataFromRSSFeed extends Component {
  constructor() {
    super();
    this.state = {
      recentBlogPost: {
        name: '',
        url: ''
      }
    }
  }

  FetchDataFromRssFeed() {
    var request = new XMLHttpRequest();
    request.onreadystatechange = () => {
      if (request.readyState == 4 && request.status == 200) {
        var myObj = JSON.parse(request.responseText);
        for (var i = 0; i < 1; i ++) {
          this.setState({
            recentBlogPost: {
              name: myObj.items[i].title,
              url: myObj.items[i].link
            }
          });
        }
      }
    }
    request.open("GET", "https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Fblog.codecarrot.net%2Ffeed.xml&order_dir=desc&count=30", true);
    request.send();
  }

  componentDidMount() {
    {this.FetchDataFromRssFeed()}
  }

  render() {
    return (
      <div>
        Check out our blog: <a target="_blank" href={this.state.recentBlogPost.url}>{this.state.recentBlogPost.name}</a>
      </div>
    );
  }
}

Solution

  • I already done RSS Feed implementation. Now i'm able to fetch 1 News using this code. I want to fetch multiple news using this code.

    Instead of defining object like this,

    recentBlogPost: {
       name: '',
       url: ''
    }
    

    you need to define an array,

    recentBlogPost: []
    

    Now instead of setting first record only,

    var myObj = JSON.parse(request.responseText);
    for (var i = 0; i < 1; i ++) {
       this.setState({
          recentBlogPost: {
             name: myObj.items[i].title,
             url: myObj.items[i].link
          }
       });
    }
    

    You need to set complete array,

    var myObj = JSON.parse(request.responseText);
    this.setState({
        recentBlogPost: myObj.item
    });
    

    And finally displaying only 1 record as,

    <div>
       Check out our blog: <a target="_blank" href={this.state.recentBlogPost.url}>{this.state.recentBlogPost.name}</a>
    </div>
    

    You need to iterate over the state array,

    {this.state.recentBlogPost.map(post=>{
        return <div key={post.title}>Check out our blog: <a target="_blank" href={post.link}>{post.title}</a></div>
    })}