Ionic 3 RSS читать с rss2json "Unprocessable Entity" - PullRequest
0 голосов
/ 17 октября 2018

У меня проблемы с преобразованием RSS в JSON с использованием API rrs2json с Ionic 3. Если я выполняю код, он выдает ошибку -> Response {_body: "{" status ":" error "," message ": "rss_url параметр обязателен."} ", Статус: 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;
      }

    }

Ошибка ->

Ошибка

1 Ответ

0 голосов
/ 18 октября 2018

Хорошо.Я зарегистрировался в службе rss2json и убедился, что это решение действительно работает (вы можете увидеть данные в консоли).

Проблема, с которой вы столкнулись, заключается в том, что вы не используете правильный способ для формирования http-запроса с помощью HttpParams.

Вот рабочий стек, который использует мой ключ: https://stackblitz.com/edit/ionic-jdwqjg

Теперь некоторые детали:

  • когда вы конфигурируете URL с помощью rss2json, он в основном добавляет параметры кИсходный 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 вам нужно использовать HttpParams Angular дляправильно сформируйте запрос, вот код вашего провайдера с 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);
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...