【问题标题】:Google Apps Script to download pdfs from UN ODS用于从 UN ODS 下载 pdf 的 Google Apps 脚本
【发布时间】:2017-09-01 19:35:55
【问题描述】:

背景

联合国秘书长和其他机构每年向联合国大会发布数百份报告,这些报告并没有像其他文件那样的统一清单。但是,有一个简化的 URL 用于阅读这些报告,使用它们的文档代码 http://undocs.org/[document code] 和格式为 A/[Session]/[Document Number] 的文档代码。示例文档代码为“A/71/1”,访问它的 url 为“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 访问联合国官方文档系统,但我不知道如何获得授权请求。

【问题讨论】:

    标签: google-apps-script urlfetch


    【解决方案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)编写脚本。

    • 像真人一样使用蜘蛛/爬虫工具浏览联合国网站。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 2021-10-15
      • 2013-06-26
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      相关资源
      最近更新 更多