Ionic 3 RSS 使用 rss2json 读取 "Unprocessable Entity"
Ionic 3 RSS read with rss2json "Unprocessable Entity"
我在使用 rrs2json API 和 Ionic 3 将 RSS 转换为 JSON 时遇到问题。如果我执行代码,它会给出错误 --> Response {_body: "{" status ":"error","message":"rss_url
参数是必需的。"}", Status: 422, ok: false, statusText:"Unprocessable Entity"}
代码:
noticies.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;
}
}
错误 -->
Error
好的。我自己注册了 rss2json 服务并确保这个解决方案确实有效(你可以在控制台中看到数据)。
您遇到的问题是您没有使用正确的方式通过 HttpParams 形成 http 请求。
这是使用我的密钥的工作 stackblitz:https://stackblitz.com/edit/ionic-jdwqjg
现在一些细节:
- 当您使用 rss2json 配置 URL 时,它基本上会向原始 URL 添加参数,示例:
- 所以在 Angular/Ionic 中你需要利用 Angular's 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);
}
}
我在使用 rrs2json API 和 Ionic 3 将 RSS 转换为 JSON 时遇到问题。如果我执行代码,它会给出错误 --> Response {_body: "{" status ":"error","message":"rss_url
参数是必需的。"}", Status: 422, ok: false, statusText:"Unprocessable Entity"}
代码:
noticies.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;
}
}
错误 -->
Error
好的。我自己注册了 rss2json 服务并确保这个解决方案确实有效(你可以在控制台中看到数据)。
您遇到的问题是您没有使用正确的方式通过 HttpParams 形成 http 请求。
这是使用我的密钥的工作 stackblitz:https://stackblitz.com/edit/ionic-jdwqjg
现在一些细节:
- 当您使用 rss2json 配置 URL 时,它基本上会向原始 URL 添加参数,示例:
- 所以在 Angular/Ionic 中你需要利用 Angular's 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);
}
}