【问题标题】:New Yahoo Finance URL新的雅虎财经网址
【发布时间】:2017-05-20 03:51:24
【问题描述】:

由于以前的 Yahoo Finance 下载 URL 不再有效,我现在只剩下如下内容:

https://query1.finance.yahoo.com/v7/finance/download/AAPL?period1=1492524105&period2=1495116105&interval=1d&events=history&crumb=tO1hNZoUQeQ

有人知道 period1(和 period2)如何转换为日期(反之亦然)

任何帮助表示赞赏!

谢谢!

【问题讨论】:

标签: yahoo-finance


【解决方案1】:

看起来它们只是 unix 时间戳,或者从 Epoch 开始的秒数。这里是一个可以为你隐藏信息的网站:http://www.unixtimestamp.com

【讨论】:

    【解决方案2】:

    这旨在重新创建(有点)旧功能。我正在使用 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。

    【讨论】:

      【解决方案3】:

      它们是 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 之前将其四舍五入到小数点零

      【讨论】:

        【解决方案4】:

        period1 和 period2 只是时间戳(POSIX 时间戳)。我认为您可以使用您想要使用的日期中的任何时间。例如,对于 2014-05-20,您可以使用 00:00:00 到 23:59:59 之间的任何时间。 (更新:Yahoo 刚刚在此处做了更改。您必须使用收市后的时间,否则数据会错过最后一天。我认为 18:00:00 工作正常。)

        我已经整理了一些快速的 Python3 代码来使用新的 API。请查看 GitHub 获取源代码yahoo_quote_download

        【讨论】:

        • 我正在查看 yahoo_quote_download 。不幸的是,我对 Python 完全陌生。 CSV 下载的语法是什么?有没有使用示例?
        • CSV 代表“逗号分隔值”。 en.wikipedia.org/wiki/Comma-separated_values
        • 例如,转到雅虎财经,选择任何股票,转到其历史数据选项卡,然后单击“下载数据”。将下载一个 CSV 文件。
        • 抱歉,如果您指的是 URL 语法,yahoo_quote_download 自述文件详细描述了我所知道的所有内容。或者您可以使用上述“下载数据”链接,右键单击并选择“复制链接地址”。
        • 我的意思是使用 yahoo_quote_download Python 脚本的语法。我设法运行测试,但我只得到一个屏幕输出。我对 Python 完全陌生,但找不到与保存 CSV 文件相对应的代码。任何有关如何使用 yahoo_quote_download 的示例都会很有用。谢谢
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-27
        相关资源
        最近更新 更多