2017-09-01 35 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)編寫腳本。

  • 使用蜘蛛/爬行工具來瀏覽聯合國網站,就好像它是一個真人一樣。