【问题标题】:Download a tab of a google sheet as a CSV file将谷歌表格的标签下载为 CSV 文件
【发布时间】:2022-01-21 22:13:43
【问题描述】:

这曾经有效:

curl 'https://docs.google.com/spreadsheets/d/1xaGu5Cd0kRPKy0v-EaVxgfnUxaxWlgDhfhfgRQy6hrc/gviz/tq?tqx=out:csv&sheet=Inv_Summary&range=A:G'

段 tqx=out:csv 指定格式,工作表指定选项卡名称,以及要输出的列范围。

现在如果我这样做,我会得到:

<HTML>
<HEAD>
<TITLE>Moved Temporarily</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Moved Temporarily</H1>
The document has moved <A HREF="https://accounts.google.com/ServiceLogin? service=wise&amp;passive=1209600&amp;continue=https://docs.google.com/spreadsheets/d/1_fZoLgNGB3fXZqgzCr1gtDnJ2Gowi4dFgovmjsSPHy8/gviz/tq?tqx%3Dout:csv%26sheet%3DInv_Summary%26range%3DA:G&amp;followup=https://docs.google.com/spreadsheets/d/1_fZoLgNGB3fXZqgzCr1gtDnJ2Gowi4dFgovmjsSPHy8/gviz/tq?tqx%3Dout:csv%26sheet%3DInv_Summary%26range%3DA:G&amp;ltmpl=sheets">here</A>.
</BODY>
</HTML>

那长长的回应,为了让人们更容易理解而被打断

<A HREF="https://accounts.google.com/ServiceLogin? 
service=wise&amp;passive=1209600&amp;

continue= 
https://docs.google.com/spreadsheets/d/1_fZoLgNGB3fXZqgzCr1gtDnJ2Gowi4dFgovmjsSPHy8/
gviz/tqtqx%3Dout:csv%26sheet%3DInv_Summary%26range%3DA:G&amp;

followup=
https://docs.google.com/spreadsheets/d/1_fZoLgNGB3fXZqgzCr1gtDnJ2Gowi4dFgovmjsSPHy8/
gviz/tq?tqx%3Dout:csv%26sheet%3DInv_Summary%26range%3DA:G&amp;
ltmpl=sheets">here</A>

您会注意到后续 URL 与临时移动的 URL 相同。

现在,如果我将 curl 语句后的原始链接粘贴到 chrome 中的地址行中,我会立即打开一个文件进行下载,它会做正确的事情。

为什么 curl 不能做到这一点?

如何恢复旧行为?

背景:我保留了一个跟踪我的林场库存的谷歌表格。库存在数据透视表上进行汇总。脚本会抓取数据透视表数据,并使用它为我的网站生成 HTML 页面。

【问题讨论】:

    标签: curl web-scraping google-sheets google-sheets-api


    【解决方案1】:

    一定要喜欢信息丰富的信息。

    • 相关电子表格无法公开阅读。
    • 当 google 检查文件时,curl 没有传递 OAuth 令牌。与其说“这个应用程序没有提供有效的令牌”之类的巧妙的话,而是将我引向网页版本。
    • 由于我已经在浏览器中获得授权,所以 这里 链接有效。

    要解决这个问题,您可以做以下两件事之一:

    答:使文件公开可读——知道链接的任何人都可以阅读它。由于这基本上只是在库存控制中记账,所以我不在乎谁读它。

    B:跳过障碍,让 OAuth 与 Curl 一起工作。这是一个很好的起点:

    https://www.daimto.com/how-to-get-a-google-access-token-with-curl/

    之前在SO上已经回答过

    get google Oauth2 access token using ONLY curl

    【讨论】:

    • 与使用 wget 相比,这样做更合适。 +1
    • 冒着在 cmets 中开始对话的风险,为什么 curl 比 wget “更合适”?
    • 更适合您的情况,因为您仍然需要保留和修改现有代码的一点点。这就是我所相信的,因此我称它为比使用 wget 更合适,这基本上会改变你所拥有的。这是个人的事情。 :D
    【解决方案2】:

    我记得一个与输出 csv 相关的问题,该问题具有对 curl 命令的重定向,您可以尝试使用相同 url 的 wget 吗?问题来来去去,所以如果可以接受,我会推荐wget。

    示例:

    wget -O test.csv --no-check-certificate "https://docs.google.com/spreadsheets/d/1xaGu5Cd0kRPKy0v-EaVxgfnUxaxWlgDhfhfgRQy6hrc/gviz/tq?tqx=out:csv&sheet=Inv_Summary&range=A:G"
    

    输出:

    【讨论】:

    • 没有什么不同。你是在命令行上用 curl 做的吗?
    • @SherwoodBotsford,我正在在线 curl 模拟器上尝试它,就像我现在在手机上一样,并要求朋友提供屏幕截图差异。如果它不起作用,我记得输出 csv 过去在 curl 中存在重定向问题,解决该问题的方法是改用 wget。你可以试试wget吗?
    • 包含wget 命令@SherwoodBotsford 的实际命令和输出
    • 问题原来是权限。请看下面我的回答。授予“任何有链接的人都可以查看”权限会返回之前的行为。
    • 嗯。还没有遇到过这个,但它似乎是正确的做法。很高兴你能找到它@SherwoodBotsford
    猜你喜欢
    • 2021-02-03
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多