2017-09-01 41 views
0

背景

联合国秘书长和其他器官发出数百每年向大会提交的报告,并没有统一的这些报告列表,像有用于其他文件。然而,使用其文档代码http://undocs.org/[document code]和文档代码格式为A/[Session]/[Document Number]来阅读这些报告有一个简化的URL。示例文档代码将是“A/71/1”,并且用于访问它的URL将是“https://undocs.org/A/71/1”。谷歌Apps脚本从联合国正式下载的PDF

我试图在过去的15年中下载所有这些文档,但不是在这些文档中手动输入,而是想为我设置Google Apps脚本。

问题

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

现在,我不打算入侵联合国,而只是下载一些PDF文件供公众查阅。我需要弄清楚我需要通过.fetch()方法通过什么样的参数来请求被页面授权。

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

TL;博士

试图访问使用谷歌从Apps脚本的UrlFetchApp联合国正式文件系统,但我无法弄清楚如何让被授权的请求。

回答

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)编写脚本。

  • 使用蜘蛛/爬行工具来浏览联合国网站,就好像它是一个真人一样。