curl 从命令行下载/导出公开的Google电子表格作为TSV?

ztigrdn8  于 2022-11-13  发布在  Go
关注(0)|答案(5)|浏览(77)

我有一个公开的(发布的)谷歌电子表格,我试图下载程序在TSV的形式。
在我的浏览器中,使用Google登录,对于一些实际的关键字$keyhttps://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=$key&exportFormat=tsv工作并生成一个TSV文件。
然而在我的壳里:

  • curl -L "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=$key&exportFormat=tsv"会产生一堆javascript。
  • curl -L "https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key=$key&exportFormat=csv"也会产生一堆javascript。
  • curl -L "https://docs.google.com/spreadsheet/pub?key=$key&single=true&gid=0&output=csv"工作并生成CSV文件。
  • curl -L "https://docs.google.com/spreadsheet/pub?key=$key&single=true&gid=0&output=tsv"会产生错误消息。

(尝试使用wget产生了类似的结果。)
我该如何解决这个问题呢?到目前为止,我能找到的所有Google文档都是针对复杂得多的问题,而不是简单的下载和格式更改,如果我的问题的解决方案就在那里的某个地方,我还没有找到它。

dwbf0jvd

dwbf0jvd1#

我发现这是令人沮丧的无证记录。我肯定它的文件某处...但我从来没有找到它。
前提是你的谷歌工作表是公开发布的。这对很多人来说并不直观。(选择文件-〉发布到Web...)
当您发布图纸时,系统会提供类似以下的URL供您复制:https://docs.google.com/spreadsheets/d/1XsfK2TN418FuEstNGG2eI9FmEV-4eY-FnndigHWIhk4/pubhtml
这个网址很好浏览......但它不是我想要的可下载的CSV。通过长时间的搜索和反复试验,我得到了这个:
curl -L "https://docs.google.com/spreadsheets/d/1XsfK2TN418FuEstNGG2eI9FmEV-4eY-FnndigHWIhk4/export?gid=0&format=csv" > ./my_local.csv
请注意,gid=0 * 通常 * 是正确的,因为它似乎是初始选项卡的默认ID。但它 * 不一定 * 正确。有关gid的更多详细信息,请参见下面的答案。
我发现这个例子非常有帮助。我希望有人评论并提供官方文档的链接,更详细地解释这一点。

cgh8pdjw

cgh8pdjw2#

我可以通过shell以这种方式下载:
1.文件=〉发布到Web
1.选择要下载的工作表和格式。
1.点击发布
1.复制链接
1.然后使用它:

wget -O ./filename.csv "LINK"

curl -L "LINK" > ./filename.csv

在我的情况下,它和预期的一样工作。
另外,我认为它发布了所有的格式,这样你就可以选择下载什么,改变URL的最后一部分,而不必取消发布和重新发布:

output=tsv
output=csv
xvw2m8pv

xvw2m8pv3#

要添加到answer written by @mdahlman,请执行以下操作:有一个gid=<value>参数可以让你选择要查看的工作表(因为CSV和TSV只支持查看一个工作表)。这是一个工作表ID,你可以从每个工作表的URL中选择它。
因此,要获得CSV/TSV发布链接,请执行以下操作:
1.发布文档以获取类似https://docs.google.com/spreadsheets/d/e/{key}/pub?output=tsv的URL。
1.然后,针对每个电子表格:
1.点击它。
1.在浏览器的地址栏中查看它的URL。它将以edit#gid={gid}结尾。这就是你想要的。
1.根据步骤1中的URL和2.2中的gid创建您的URL:https://docs.google.com/spreadsheets/d/e/{key}/pub?output=tsv&gid={gid} .
GID不是按顺序排列的(0,1,2,......)。它们是很长的数字(我认为是9位数),看起来没有直接的顺序或任何东西,所以它们实际上更像是表键,而不是人们所期望的“id”。
在我的文档中,有一个GID是零。我假设它是某种默认的或第一次创建的工作表。这就解释了为什么gid=0对上面的一些人有效,但对其他人却产生了错误(那些没有这样GID的工作表的人...他们可能已经删除了它或其他什么)。

9rnv2umw

9rnv2umw4#

我的回答是关于如何找到答案。
在Chrome浏览器中,导航到您的Google文档。
在浏览器的右上角,转到三个点-〉更多工具-〉开发者工具
这将打开html...调试器。
在调试器窗口的顶部,选择“网络”。
现在,在您的文档中,启动下载,因为您正在尝试自动化。
在调试器中,它会向你显示所有的web请求,第一个新的请求可能就是你想要的。
您应该能够右键单击-〉复制-〉复制链接地址
网址包含一个ID。我不知道它是干什么用的,但curl可以在没有ID的情况下下载文档。
希望对你有帮助。

wswtfjt7

wswtfjt75#

这是我沿着创建的参数列表:

&format=pdf                   //export format
&size=a4                      //A3/A4/A5/B4/B5/letter/tabloid/legal/statement/executive/folio
&portrait=false               //true= Potrait / false= Landscape
&scale=1                      //1= Normal 100% / 2= Fit to width / 3= Fit to height / 4= Fit to Page
&top_margin=0.00              //All four margins must be set!
&bottom_margin=0.00           //All four margins must be set!
&left_margin=0.00             //All four margins must be set!
&right_margin=0.00            //All four margins must be set!
&gridlines=false              //true/false
&printnotes=false             //true/false
&pageorder=2                  //1= Down, then over / 2= Over, then down
&horizontal_alignment=CENTER  //LEFT/CENTER/RIGHT
&vertical_alignment=TOP       //TOP/MIDDLE/BOTTOM
&printtitle=false             //true/false
&sheetnames=false             //true/false
&fzr=false                    //true/false
&fzc=false                    //true/false
&attachment=false             //true/false

//FORMATS WITH NO ADDITIONAL OPTIONS
  //format=xlsx       //excel
  //format=ods        //Open Document Spreadsheet
  //format=zip        //html zipped          

  //CSV,TSV OPTIONS***********
  //format=csv        // comma seperated values
  //             tsv        // tab seperated values
  //gid=sheetId             // the sheetID you want to export, The first sheet will be 0. others will have a uniqe ID

  // PDF OPTIONS****************
  //format=pdf     
  //size=0,1,2..10             paper size. 0=letter, 1=tabloid, 2=Legal, 3=statement, 4=executive, 5=folio, 6=A3, 7=A4, 8=A5, 9=B4, 10=B5  
  //fzr=true/false             repeat row headers
  //portrait=true/false        false =  landscape
  //fitw=true/false            fit window or actual size
  //gridlines=true/false
  //printtitle=true/false
  //pagenum=CENTER/UNDEFINED      CENTER = show page numbers / UNDEFINED = do not show
  //attachment = true/false      dunno? Leave this as true
  //gid=sheetId                 Sheet Id if you want a specific sheet. The first sheet will be 0. others will have a uniqe ID. 
                               // Leave this off for all sheets. 
  // EXPORT RANGE OPTIONS FOR PDF
  //need all the below to export a range
  //gid=sheetId                must be included. The first sheet will be 0. others will have a uniqe ID
  //ir=false                   seems to be always false
  //ic=false                   same as ir
  //r1=Start Row number - 1        row 1 would be 0 , row 15 wold be 14
  //c1=Start Column number - 1     column 1 would be 0, column 8 would be 7   
  //r2=End Row number
  //c2=End Column number

相关问题