【发布时间】:2017-05-20 03:51:24
【问题描述】:
由于以前的 Yahoo Finance 下载 URL 不再有效,我现在只剩下如下内容:
有人知道 period1(和 period2)如何转换为日期(反之亦然)
任何帮助表示赞赏!
谢谢!
【问题讨论】:
-
无缘无故地投反对票,而不是试图回答问题...人们的路!
标签: yahoo-finance
由于以前的 Yahoo Finance 下载 URL 不再有效,我现在只剩下如下内容:
有人知道 period1(和 period2)如何转换为日期(反之亦然)
任何帮助表示赞赏!
谢谢!
【问题讨论】:
标签: yahoo-finance
看起来它们只是 unix 时间戳,或者从 Epoch 开始的秒数。这里是一个可以为你隐藏信息的网站:http://www.unixtimestamp.com
【讨论】:
这旨在重新创建(有点)旧功能。我正在使用 Chrome 运行 Fedora。
(1) 为您的网络浏览器找出您的用户代理字符串(我在 Google 上搜索了“我的用户代理字符串是什么”之类的内容,并很快找到了一个可以为您正在使用的浏览器打印出来的页面)。它将类似于“Mozilla/5.0 (X11; Linux x86_64) ...”
(2) 安装一个包,它将为 Chrome 导出一个“cookies.txt”文件(也搜索了类似“Chrome export cookies.txt”之类的东西,并很快找到了一个可以为页面导出 cookies.txt 的 chrome 扩展程序您正在查看)。
(3) 转到历史下载页面以获取对雅虎财经感兴趣的符号。保存下载链接中的“crumb”(就像你上面所说的那样)和该页面的 cookies.txt。
(4) 现在你可以使用 wget 来获取数据了。该命令将类似于:
wget --load-cookies [您保存的 COOKIES 文件] -U "[您找到的用户代理字符串]" -O [期望的输出 CSV] https://query1.finance.yahoo.com/v7/finance/download/[THE 符号您想要的历史数据]?period1=[UNIX开始时间]\&period2=[UNIX 结束时间]\&interval=1d\&events=history\&crumb=[你保存的碎屑]
period1=... 是开始日期的 UNIX 时间戳(自 1970 年 1 月 1 日 00:00:00 GMT 以来的秒数), period2=... 是结束日期的 UNIX 时间戳。
我能够以这种方式以编程方式下载许多符号。生成的 CSV 文件的列顺序已从旧的 ichart API 更改,并且我在历史数据中发现的错误数量明显高于数据中已经相当高的错误率。
无法猜测它会工作多长时间,或者它是否会在很长一段时间内保持稳定。 YMMV。
【讨论】:
它们是 unix 时间戳,或自 Epoch 以来的秒数。
引用自http://www.unixtimestamp.com/
什么是 unix 时间戳?
unix时间戳是一种跟踪方式 运行总秒数。这个计数从 Unix 开始 1970 年 1 月 1 日 UTC 的纪元。因此,unix 时间戳为 仅仅是特定日期和 Unix 之间的秒数 时代。还应该指出(感谢来自的 cmets 本网站的访问者)该时间点在技术上不 无论您在地球上的哪个位置,都可以改变。这是非常 对计算机系统有用,用于跟踪和分类过时的信息 在在线和客户端的动态和分布式应用程序中
以下 C# 代码有助于将 DateTime 转换为 Unix Timestamp
//credits to ScottCher
//reference http://stackoverflow.com/questions/249760/how-to-convert-a-unix-timestamp-to-datetime-and-vice-versa
private static DateTime UnixTimestampToDateTime(double unixTimeStamp)
{
//Unix timestamp Is seconds past epoch
return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).AddSeconds(unixTimeStamp).ToLocalTime();
}
//credits to Dmitry Fedorkov
//reference http://stackoverflow.com/questions/249760/how-to-convert-a-unix-timestamp-to-datetime-and-vice-versa
private static double DateTimeToUnixTimestamp(DateTime dateTime)
{
//Unix timestamp Is seconds past epoch
return (dateTime.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
}
注意:确保在代入 period1 和 period2 之前将其四舍五入到小数点零
【讨论】:
period1 和 period2 只是时间戳(POSIX 时间戳)。我认为您可以使用您想要使用的日期中的任何时间。例如,对于 2014-05-20,您可以使用 00:00:00 到 23:59:59 之间的任何时间。 (更新:Yahoo 刚刚在此处做了更改。您必须使用收市后的时间,否则数据会错过最后一天。我认为 18:00:00 工作正常。)
我已经整理了一些快速的 Python3 代码来使用新的 API。请查看 GitHub 获取源代码yahoo_quote_download。
【讨论】: