问题描述
我正在尝试在我的 Flutter 应用程序中连接到 Yahoo Finance API,但无法连接。 我已经看到了以不同语言连接到 API 的指南,但没有针对 Dart 语言的官方指南。
Future<double> getStockPrice(String symbol) async {
//var client = http.Client();
var url = 'https://apidojo-yahoo-finance-v1.p.rapidapi.com';
var apiStr = "/stock/v2/get-summary";
var headers = {'x-rapidapi-key': "809135c7c7mshf35d1107bf50919p15c9fajsn37166d6b1bfc",'x-rapidapi-host': "apidojo-yahoo-finance-v1.p.rapidapi.com"};
var params = {'symbol': 'AMRN','region': 'US'};
var response = await http.get(Uri.https(url,apiStr,params),headers: headers);
//https://apidojo-yahoo-finance-v1.p.rapidapi.com/stock/v2/get-summary?symbol=AMRN®ion=US
//var response = await http.get(Uri.https(url,params));
print('RESPONSE STATUS code: ${response.statusCode}');
if (response.statusCode == 200) {
print('RESPONSE STATUS code: ${response.statusCode}');
var json = jsonDecode(response.body);
String value = json['price']['regularMarketopen']['raw'];
return double.parse(value);
} else {
return 0.0;
}
}
我从这个方法中得到了空值。我想这可能是获取值变量的问题,也许我没有正确遍历 JSON 树。但我不明白为什么。
然后我在以下屏幕中从 API 检索数据:
import 'package:Flutter/material.dart';
import 'package:stock_analyzer/api_method/webService.dart';
class TestScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
Future<String> test = YahooFinanceService().getWebSite('symbol');
return Scaffold(
appBar: AppBar(
title: Text('test'),),body: Column(
mainAxisAlignment: MainAxisAlignment.center,children: [
FutureBuilder<String>(
future: test,builder: (context,AsyncSnapshot<String> snapshot){
return Text('Result: ${snapshot.data}');
})
],);
}
}
在这个屏幕中,我得到了空值。所以,snapshot.data = null
谢谢
解决方法
401 错误表明您无权进行 post 请求,我认为错误是您正在执行 post 而不是 get。
尝试改变:
var response = await client.post(url,body: headers);
致:
var response = await client.get(url,headers: headers);