如何解决401 未经授权的雅虎财经
我最近制作了一个应用程序,它从雅虎财经获取一些数据,并使用 chart.js 将其作为图表返回。我的问题是,在我的电脑(Windows 10)上一切正常,但只要我在 ubuntu 上运行它,当我请求历史数据时,我就会收到 401 未经授权的错误。
import * as Discord from "discord.js";
import yahooFinance from 'yahoo-finance2';
const client = new Discord.Client();
import { ChartJSNodeCanvas } from "chartjs-node-canvas";
const width = 1920; //px
const height = 1080; //px
const chartJSNodeCanvas = new ChartJSNodeCanvas({ width,height });
client.on("ready",() => {
console.log("ready");
})
client.on("message",async (message: Discord.Message) => {
const prefix = "-";
const command = message.content.replace(prefix,"").split(" ")[0];
const args = message.content.replace(prefix,"").split(" ");
args.splice(0,1);
if (command == "details" && args[0]) {
let period = new Date();
let interval = "1d";
if (args[1].includes("m")) {
let ago = parseInt(args[1].replace("m",""));
if (isNaN(ago)) return message.reply("There was an error whilst trying to calculate the period,check the second argument and try again. (ex. -details AAPL 3m)");
period.setMonth(period.getMonth() - ago);
} else if (args[1].includes("y")) {
let ago = parseInt(args[1].replace("m",check the second argument and try again. (ex. -details AAPL 3y)");
period.setFullYear(period.getFullYear() - ago);
interval = "1mo";
} else if (args[1] == "l") {
period.setFullYear(period.getFullYear() - 100);
interval = "1mo";
}
const [stockDetails,stockHistory] = await Promise.all([
yahooFinance.quote(args[0].toUpperCase()),yahooFinance.historical(args[0].toUpperCase(),{
period1: period,//@ts-ignore
interval: interval,})
]);
const dates = [];
const prices = [];
for (let index = 0; index < stockHistory.length; index++) {
const data = new Date(stockHistory[index].date);
const year = data.getFullYear();
let month: any = data.getMonth() + 1;
let day: any = data.getDate();
if (month < 10) month = `0${month}`;
if (day < 10) day = `0${day}`;
dates.push(`${year}-${month}-${day}`);
prices.push(stockHistory[index].close);
}
const config = {
type: 'line',data: {
labels: dates,datasets: [{
label: 'Price',data: prices,fill: false,backgroundColor: stockDetails.regularMarketChangePercent >= 0 ? "#00FF2A" : "#FF0000",borderColor: stockDetails.regularMarketChangePercent >= 0 ? "#00FF2A" : "#FF0000",borderWidth: 5,}]
},options: {
scales: {
y: {
beginAtZero: true
}
},elements: {
point: {
radius: 0
}
}
}
};
console.log(config.data.datasets[0].data);
const attachment = new Discord.MessageAttachment(await chartJSNodeCanvas.renderToBuffer(config,"image/png"),"chart.png");
//Sheesh that's a long embed
const embed = new Discord.MessageEmbed()
.addFields([{
name: "Price",value: `${stockDetails.regularMarketPrice} (${stockDetails.regularMarketChangePercent.toFixed(2)}%)`,inline: true
},{
name: "High",value: stockDetails.regularMarketDayHigh,{
name: "Low",value: stockDetails.regularMarketDayLow,{
name: "Previous close",value: stockDetails.regularMarketPreviousClose,{
name: "Market cap",value: stockDetails.marketCap,{
name: "Volume",value: stockDetails.regularMarketVolume,inline: true
}])
.attachFiles([attachment])
.setImage("attachment://chart.png")
.setColor(stockDetails.regularMarketChangePercent >= 0 ? "#00FF2A" : "#FF0000")
await message.reply(embed);
}else if(command == "help"){
const embed = new Discord.MessageEmbed()
.setColor("#00FF2A")
.addField("-details","**Get the details of your chosen stock (ex. -details AAPL 1m)**\n``Arguments: -details [stock] [(number)m/(number)y/l(lifetime))``");
message.reply(embed);
}
})
client.login("token");
以及 ubuntu 上的错误
https://query1.finance.yahoo.com/v7/finance/download/AAPL?interval=1mo&events=history&includeAdjustedClose=true&period1=-1530787586&period2=1624972414
(node:2689296) UnhandledPromiseRejectionWarning: HTTPError: Unauthorized
我真的不知道这是什么原因,node和npm版本是一样的
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。