Guardando il codice per la funzione DocDownload, essi sono principalmente solo facendo un post per /AJDownload.jsp con params post delle ulthost: WVS, CndWAVE: 4, SAID: 0, DOID: (l'id doc qui), AJArchive: Archivio dati WVS. Non sono sicuro se alcuni di questi sono richiesti, ma probabilmente è meglio includerli comunque.
farlo in R utilizzando HTTR, sarebbe simile a questa
r <- POST("http://www.worldvaluessurvey.org/AJDownload.jsp", body = list("ulthost" = "WVS", "CndWAVE" = 4, "SAID" = 0, "DOID" = 1316, "AJArchive" = "WVS Data Archive"))
L'AJDownload.asp endpoint restituirà una 302 (reindirizzamento all'URL REAL), e la biblioteca HTTR dovrebbe seguire automaticamente il reindirizzamento per tu. Attraverso prove ed errori, ho determinato che il server richiede sia intestazioni Content-Type che Cookie, altrimenti restituirà una risposta vuota 400 (OK). Dovrai ottenere un cookie valido, che puoi trovare ispezionando qualsiasi pagina caricata su quel server, e cercare l'intestazione con Cookie: JSESSIONID = ....., vorrai copiare l'intera intestazione
quindi, con quelli, sembra che
r <- POST("http://www.worldvaluessurvey.org/AJDownload.jsp", body = list("ulthost" = "WVS", "CndWAVE" = 4, "SAID" = 0, "DOID" = 1316, "AJArchive" = "WVS Data Archive"), add_headers("Content-Type" = "application/x-www-form-urlencoded", "Cookie" = "[PASTE COOKIE VALUE HERE]"))
La risposta sta per essere dati in formato PDF binari, quindi sarà necessario per salvarlo in un file per essere in grado di fare qualsiasi cosa con esso.
bin <- content(r, "raw")
writeBin(bin, "myfile.txt")
EDIT:
Va bene, ha ottenuto un po 'di tempo per eseguire in realtà il codice. Ho anche scoperto i parametri minimi richiesti per le chiamate POST, che è solo il docid, il cookie JSESSIONID e l'intestazione Referer.
library(httr)
download_url <- "http://www.worldvaluessurvey.org/AJDownload.jsp"
frame_url <- "http://www.worldvaluessurvey.org/AJDocumentationSmpl.jsp"
body <- list("DOID" = "1316")
file_r <- POST(download_url, body = body, encode = "form",
set_cookies("JSESSIONID" = "0E657C37FF030B41C33B7D2B1DCAB3D8"),
add_headers("Referer" = frame_url),
verbose())
Questo ha funzionato sulla mia macchina e restituisce correttamente i dati binari PDF.
Questo è ciò che accade se imposto manualmente il cookie dal mio browser. Sto solo usando la parte JSESSIONID del cookie e nient'altro. Come ho detto prima, il JSESSIONID scadrà, probabilmente per età o inattività.
wow, abbastanza impressionante per sacrificare quasi tutta la tua reputazione in una sola domanda! ;-) – agenis
Heck; Sarei felice di supportare una risposta utile a questa domanda. Se non trovi una soluzione e la assegni nel tempo richiesto, fammelo sapere e inserirò altri 500 rappresentanti per assicurarti che rimangano in primo piano. Grazie per tutto il tuo lavoro nel rendere accessibili i set di dati pubblici, Anthony. –
@ 42- grazie mille David, lo apprezzo. la risposta di headless browsing è buona, ma il poster ha ragione che sarebbe meglio solo all'interno di -R. sono preoccupato che qualcuno darà una buona risposta a 'RCurl' e poi il sondaggio sui valori del mondo la gente cambierà di nuovo il sito .. rischio professionale;) –