Использование RCurl или любого другого RPackage - PullRequest
0 голосов
/ 18 октября 2018

Кто-нибудь хочет кратко объяснить, как использовать пакет RCurl (или любой другой RPackage) для загрузки файлов со следующего ftp-сервера ...?

http://hermes.acri.fr/index.php?class=ftp_access

I 'Я совершенно новичок в этой области, и определенно необходим некоторый импульс ...

Большое спасибо ...

1 Ответ

0 голосов
/ 18 октября 2018

Что ж, ты не исследовал и хочешь, чтобы люди оказали тебе специальное лечение, что хорошо, но не слишком сильно поможет тебе в SO.Есть множество вопросов по SO для RCurl и множеству веб-сайтов, которые конкретно говорят о том, как использовать его в контексте загрузок FTP.

Но следующее может помочь кому-то, кто провел какое-то исследование идействительно застрял, плюс также покажет, как использовать более современные curl и httr пакеты.

В дополнение к некоторому обучению RCurl вы также ожидаете, что люди зарегистрируются на этом сайте (так как можноПредполагается, что на FTP-сервере этого сайта были идиосинкразии, которые вызывали проблемы с RCurl ... Я имею в виду, у нас нет контекста, поэтому это предположение, как и любое другое).

Поместите их в ~/.Renviron и перезапустите сеанс R:

ACRI_FTP_USERNAME=your-username
ACRI_FTP_PASSWORD=your-password

Проведите некоторое базовое исследование (оно есть в руководствах на сайте R-Project) по получению переменных среды в R, если вы этого раньше не делали.

Если вы нене делайте, по крайней мере, что вы вводите голые учетные данные в сценарии, что ужасно для безопасности.Есть и другие способы управления «секретами» более формально, но я подозреваю, что эти учетные данные FTP не являются «сверхсекретными» битами информации.Это также может сделать любые сценарии более общими (т. Е. Другие могут использовать их, если они следуют той же схеме и используют свои собственные кредиты).

Мы будем использовать curl и httr:

library(curl)
library(httr)

Возможно, вы не захотите использовать свой браузер для просмотра списков каталогов, и браузеры могут перестать поддерживать FTP в ближайшее время (Mozilla отказывается от поддержки чтения RSS-каналов, и ни Chrome, ни Firefox не могут читать сайты Gopher, так что вы никогда не узнаете).Браузеры также по какой-то причине слишком медленно работают с FTP.

Мы сделаем функцию, упрощающую создание списков каталогов:

get_dir_listing <- function(path = "/") {
  curl_fetch_memory(
    paste0("ftp://ftp.hermes.acri.fr", path),
    new_handle(
      username = Sys.getenv("ACRI_FTP_USERNAME"),
      password = Sys.getenv("ACRI_FTP_PASSWORD"),
      dirlistonly=TRUE
    )
  ) -> res

  strsplit(readBin(res$content, "character"), "\n")[[1]]

}

Теперь мы можем сделать (мыСпустимся по одному дереву и порежем материю):

get_dir_listing()
## [1] "GLOB"      "animation" "OSS2015"   "EURO"     

get_dir_listing("/GLOB/")
## [1] "meris"   "viirsn"  "merged"  "olcia"   "modis"   "seawifs"

get_dir_listing("/GLOB/meris/")
## [1] "month" "8-day" "day"  

get_dir_listing("/GLOB/meris/month/")
## [1] "2011" "2002" "2006" "2012" "2005" "2009" "2004" "2008" "2007" "2010" "2003"

get_dir_listing("/GLOB/meris/month/2011/")
## [1] "09" "05" "01" "12" "06" "02" "11" "03" "10" "07" "08" "04"

get_dir_listing("/GLOB/meris/month/2011/09/")
## [[1]] "01"

Джекпот!

get_dir_listing("/GLOB/meris/month/2011/09/01/")
##  [1] "L3b_20110901-20110930__GLOB_4_AV-MER_KD490-LEE_MO_00.nc"       
##  [2] "L3m_20110901-20110930__GLOB_25_AV-MER_ZHL_MO_00.nc"            
##  [3] "L3b_20110901-20110930__GLOB_4_AV-MER_ZSD_MO_00.nc"             
##  [4] "L3m_20110901-20110930__GLOB_100_AV-MER_ZSD_MO_00.nc"           
##  [5] "L3b_20110901-20110930__GLOB_4_AV-MER_A865_MO_00.nc"            
##  [6] "L3m_20110901-20110930__GLOB_100_AV-MER_A865_MO_00.nc"          
##  [7] "L3m_20110901-20110930__GLOB_25_AV-MER_CHL1_MO_00.png"          
##  [8] "L3m_20110901-20110930__GLOB_25_AV-MER_CF_MO_00.png"            
##  [9] "L3m_20110901-20110930__GLOB_25_AV-MER_NRRS443_MO_00.png"       
## [10] "L3m_20110901-20110930__GLOB_4_AV-MER_CHL-OC5_MO_00.nc"         
## [11] "L3m_20110901-20110930__GLOB_100_AV-MER_KDPAR_MO_00.nc"         
## [12] "L3b_20110901-20110930__GLOB_4_AV-MER_NRRS670_MO_00.nc"         
## [13] "L3m_20110901-20110930__GLOB_25_AV-MER_NRRS490_MO_00.png"       
## [14] "L3b_20110901-20110930__GLOB_4_AV-MER_NRRS412_MO_00.nc"         
## [15] "L3m_20110901-20110930__GLOB_4_AV-MER_A865_MO_00.nc"            
## [16] "L3m_20110901-20110930__GLOB_4_AV-MER_NRRS490_MO_00.nc"         
## [17] "L3m_20110901-20110930__GLOB_25_AV-MER_KD490_MO_00.png"         
## [18] "L3m_20110901-20110930__GLOB_4_GSM-MER_CHL1_MO_00.nc"           
## [19] "L3b_20110901-20110930__GLOB_4_AV-MER_T550_MO_00.nc"            
## [20] "L3m_20110901-20110930__GLOB_25_AV-MER_CHL-OC5_MO_00.png"       
## [21] "L3m_20110901-20110930__GLOB_25_AV-MER_ZSD-DORON_MO_00.nc"  
## .. there are alot of them

Теперь вы, вероятно, хотите скачать один из них.Я знаю, что .nc файлы, как правило, огромные, хотя мне никогда не приходилось их использовать, потому что я прочитал и ответил на множество SO вопросов о них.

Мы будем использовать httr для загрузки какон заботится о многих вещах для нас:

httr::GET(
  url = "ftp://ftp.hermes.acri.fr/GLOB/meris/month/2011/09/01/L3m_20110901-20110930__GLOB_4_GSM-MER_CHL1_MO_00.nc",
  httr::authenticate(Sys.getenv("ACRI_FTP_USERNAME"), Sys.getenv("ACRI_FTP_PASSWORD")),
  httr::write_disk("~/Data/L3m_20110901-20110930__GLOB_4_GSM-MER_CHL1_MO_00.nc"),
  httr::progress()
) -> res

httr::stop_for_status(res)

Вы можете спокойно игнорировать предупреждения и диагностику:

## Warning messages:
## 1: In parse_http_status(lines[[1]]) :
##   NAs introduced by coercion to integer range
## 2: Failed to parse headers:
## 229 Entering Extended Passive Mode (|||28926|)
## 200 Type set to I
## 213 92373747
## 150 Opening BINARY mode data connection for L3m_20110901-20110930__GLOB_4_GSM-MER_CHL1_MO_00.nc (92373747 bytes)
## 226 Transfer complete

, поскольку он имеет правильные магические заголовки для fileкоманда:

$ file L3m_20110901-20110930__GLOB_4_GSM-MER_CHL1_MO_00.nc
L3m_20110901-20110930__GLOB_4_GSM-MER_CHL1_MO_00.nc: Hierarchical Data Format (version 5) data

Надеемся, что это действительно помогло кому-то действительно застрять, поскольку есть (как указано) множество контента на SO и в других местах о том, как проходить аутентификацию на FTP-серверах, выполнять обходы каталогов и загружать контент.Теперь это еще один добавленный к этому корпусу.

...