首页 > 解决方案 > 使用 rss2json “无法处理的实体”读取 Ionic 3 RSS

问题描述

我在使用带有 Ionic 3 的 rrs2json API 将 RSS 转换为 JSON 时遇到问题。如果我执行代码,它会给我错误 --> 响应 {_body: "{" status ":" error "," message ":"rss_url参数是必需的。“}”,状态:422,ok:false,statusText:“无法处理的实体”}

代码:

通知.ts

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { RssProvider } from '../../providers/rss/rss';

@IonicPage()
@Component({
  selector: 'page-noticies',
  templateUrl: 'noticies.html',
})
export class NoticiesPage {
rssDataArray: any = [];

  constructor(public navCtrl: NavController, public navParams: NavParams, public rssProvider: RssProvider) {
  }

  ionViewDidLoad() {
    console.log('ionViewDidLoad NoticiesPage');
    this.Get_RSS_Data()
  }

  Get_RSS_Data(){
    this.rssProvider.GetRSS().subscribe(
      data => {
        this.rssDataArray = data;
        console.log(data);
      }

    );
  }
}

提供者 --> rss --> rss.ts

  import { Injectable } from '@angular/core';
    import {Http} from '@angular/http';
    import 'rxjs/add/operator/map';

    @Injectable()
    export class RssProvider {

      constructor(public http: Http) {
        console.log('Hello RssProvider Provider');
      }

      GetRSS(){
        const RSS_URL: any='http://rss.cnn.com/rss/edition.rss';
        const API: any='XXXXXXXXXXXXXX';
        const count: any =20;
        const API_URL: any ='https://api.rss2json.com/v1/api.json';
        const response = this.http.post(API_URL, {'rss_url': RSS_URL,'api_key': API, 'count': count}).map(res => res.json());

        return response;
      }

    }

错误 -->

错误

标签: jsonapiionic-frameworkionic3rss

解决方案


好的。我使用 rss2json 服务注册了自己,并确保该解决方案确实有效(您可以在控制台中看到数据)。

您遇到的问题是您没有使用正确的方法来使用 HttpParams 形成 http 请求。

这是使用我的密钥的工作 stackblitz:https ://stackblitz.com/edit/ionic-jdwqjg

现在一些细节:

  • 当您使用 rss2json 配置 URL 时,它基本上会将参数添加到原始 URL,例如:

https://api.rss2json.com/v1/api.json?rss_url=https%3A%2F%2Ftechcrunch.com%2Ffeed%2F&api_key=q5ijkolkdjk3urzrcfaehxeoimxr3tdu5ieiqcrq&order_by=pubDate&order_dir=asc&count=20

  • 因此,在 Angular/Ionic 中,您需要利用Angular 的 HttpParams来正确地形成请求,这是您使用 HttpParams 的提供程序代码:

提供者代码:

import { Injectable } from '@angular/core';
import { HttpClient, HttpParams } from '@angular/common/http';

@Injectable()
export class RssProvider {

  private API_URL: string;

  constructor(public http: HttpClient) {
    this.API_URL = "https://api.rss2json.com/v1/api.json";
  }

  GetRSS() {
    const params = { params: new HttpParams().set('rss_url', 'http://rss.cnn.com/rss/edition.rss').set('api_key','q5ijkolkdjk3urzrcfaehxeoimxr3tdu5ieiqcrq').set('order_by', 'pubDate').set('order_dir', 'asc')
    }
    return this.http.get(this.API_URL, params);
  }

}

推荐阅读