簡體   English   中英

我在嘗試使用 RSS 訪問數據時遇到問題

[英]i am having issue while trying to access data using rss

錯誤消息:未處理的異常:類型“_InternalLinkedHashMap<String, dynamic>”不是“FutureOr<List>”類型的子類型

import 'dart:convert';

import 'package:xml2json/xml2json.dart';
import 'package:http/http.dart' as http;

Future<List> rssToJson(String category,
    {String baseUrl="https://www.hindustantimes.com/feeds/rss/"}) async {
  var client = http.Client();
  final myTransformer = Xml2Json();
  return await client.get(baseUrl + category + '/rssfeed.xml').then((response) {
    return response.body;
  }).then((bodyString) {
    myTransformer.parse(bodyString);
    var json = myTransformer.toGData();
    return jsonDecode(json)['rss']['channel']['item'];
  });
}

這是我嘗試使用從 rss 收到的數據的地方:

Map<String, List> newsData = Map<String, List>();
bool isLoading = true;
getData() async{
    Future.wait([
      rssToJson('topnews'),
      rssToJson('india'),
      rssToJson('world-news'),
      rssToJson('business'),
      rssToJson('sports'),
      rssToJson('cricket'),
      rssToJson('education'),
      rssToJson('entertainment'),
      rssToJson('lifestyle'),
      rssToJson('health'),
      rssToJson('books'),
      rssToJson('trending'),
    ]).then((value) {
      value[0] = [];
      value.forEach((element) {
        value[0].addAll([...element ?? []]);
      });
      value[0].shuffle();
      newsData['topnews'] = value[0].sublist(0, 10);
      newsData['india'] = value[1];
      newsData['world'] = value[2];
      newsData['business'] = value[3];
      newsData['sports'] = value[4];
      newsData['cricket'] = value[5];
      newsData['education'] = value[6];
      newsData['entertainment'] = value[7];
      newsData['lifestyle'] = value[8];
      newsData['health-fitness'] = value[9];
      newsData['books'] = value[10];
      newsData['its-viral'] = value[11];
      setState(() {
        isLoading = false;
      });
    });
  }

我也嘗試Future<dynamic> rssToJson()但仍然無法正常工作......任何幫助將不勝感激。 提前致謝。

網絡服務

import 'package:http/http.dart' as http;
import 'package:xml/xml.dart' as xml;

class NetService {
  static Future<xml.XmlDocument?> getXml(String url, {int okCode = 200}) {
    return http.get(Uri.parse(url))
      .then((response) {
        if (response.statusCode == okCode) {
          return xml.XmlDocument.parse(response.body);
        }
        PrintService.showDataNotOK(response);
        return null;
      })
      .catchError((err) => PrintService.showError(err));
  }
}

主要的

import 'dart:async';
import 'dart:math';

import 'package:_samples2/networking.dart';
import 'package:xml/xml.dart' as xml;


class HindustanTimes {
  var newsFeeds = <MapEntry<String, String>>[];

  FutureOr<void> fetchRssAvailable() async {
    final url = 'https://www.hindustantimes.com/rss';
    var regExp = RegExp(r'<a title="(.+)" href="(.+)">');
    var rawPage = await NetService.getRaw(url).whenComplete(() => print('Feeds Page received.'));
    var matches = regExp.allMatches(rawPage ?? '');

    newsFeeds = matches.map((e) => MapEntry(e.group(1)!, e.group(2)!)).toList();
    print('${newsFeeds.length} feed(s) found.\n');
  }

  FutureOr<void> fetchNewsFeed({int? index}) async {
    var idx = index != null && index < newsFeeds.length 
      ? index
      : Random().nextInt(newsFeeds.length);

    await NetService.getXml(newsFeeds[idx].value)
      .then((xml.XmlDocument? document) {
        if (document != null) {
          var items = document.findAllElements('item');
          var titles = items.map((e) => e.getElement('title')!.text).toList();

          for (var i = 0; i < titles.length; i++) {
            print('[${i+1}] ${titles[i]}');
          }
        }
      })
      .whenComplete(() => print('\nNews Feed "${newsFeeds[idx].key}" received'));
  }
}

void main(List<String> args) async {
  var rss = HindustanTimes();
  await rss.fetchRssAvailable();
  await rss.fetchNewsFeed(index: 70);
  print('Done!');
}

結果:

Feeds Page received.
145 feed(s) found.

[1] Horoscope Today: Astrological prediction for March 10
[2] Horoscope Today: Astrological prediction for March 9

News Feed "Horoscope" received
Done!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM