从Google ODS下载pdf的Google Apps脚本

时间:2017-09-01 19:35:56

标签: google-apps-script urlfetch

背景

联合国秘书长和其他机构每年向大会发布数百份报告,这些报告没有统一的清单,就像其他文件一样。但是,有一个简化的网址,用于使用文档代码http://undocs.org/[document code]阅读这些报告,文档代码的格式为A/[Session]/[Document Number]。一个示例文档代码将是" A / 71/1"并且访问它的网址将是" https://undocs.org/A/71/1"。

我尝试在过去15年中下载所有这些文档,但我不想手动输入其中的每一个,而是想设置一个Google Apps脚本来为我完成。

问题

当我尝试使用简单方法UrlFetchApp.fetch("http://undocs.org/A/71/1");时,它会获取一个错误页面,说明我正在使用未经授权的方法访问该页面。如果您阻止Cookie,或者有时当您尝试在隐身窗口中访问该页面时显示相同的页面。

现在,我不打算入侵联合国,只是下载一些可供公众访问的PDF。我需要弄清楚我需要通过.fetch()方法传递哪种参数才能获得页面授权的请求。

注意:我搜索了undocs.org网站寻找任何指导,但我找不到。

TL;博士

尝试使用Google Apps脚本中的UrlFetchApp访问联合国正式文件系统,但我无法弄清楚如何获得授权请求。

1 个答案:

答案 0 :(得分:1)

简短回答 - 我认为你不能用单行fetch获得它。

如果您查看提取https://undocs.org/A/71/1时返回的HTML,您会看到它嵌入了一个从https://daccess-ods.un.org/access.nsf/Get?OpenAgent&DS=A/71/1&Lang=E获取其内容的框架。然后,如果您查看该框架返回的HTML,您将看到两件事:

  • 加载https://documents-dds-ny.un.org/prod/ods_mother.nsf?Login&Username=freeods2&Password=1234
  • 的框架
  • 重定向到https://documents-dds-ny.un.org/doc/UNDOC/GEN/N16/206/02/PDF/N1620602.pdf?OpenElement
  • 的实际PDF

我假设第一个链接设置了一个cookie,表明登录已经发生,然后第二个链接在返回内容之前进行验证。

你可以尝试的事情:

  • 多步骤fetch,您首先从undocs.org获取内容,解析它以获取实际PDF的链接,然后登录并获取PDF。但Google Apps脚本必须在提取之间保留Cookie。

  • 将您的脚本编写在不同的工具(例如Python)中。

  • 使用蜘蛛/抓取工具导航UN网站,就好像它是真人一样。