¿Cómo copyr las carpetas de otra persona de public.me.com con una herramienta tipo wget?

¿Cómo puedo copyr una carpeta de http://public.me.com/ (un service relacionado con iDisk o MobileMe ) a mi sistema de files local con una herramienta Unix (como wget , una herramienta no interactiva de command-line )?

El problema es que la interfaz web es en realidad una cosa compleja basada en Javascript en lugar de simplemente exponer los files. (Incluso w3m no puede navegar, por ejemplo, https://public.me.com/rudchenko ).

Mi objective es actualizar la copy local de vez en cuando de forma no interactiva, y poner el command para download los files a un script, para que otras personas puedan ejecutar el script y download los files.

Una herramienta similar a wget ( rsync -like, git pull -like) me conviene, o una combinación de assembly de un sistema de files de networking a través de FUSE y luego el uso de commands estándar de Unix para copyr los directorys.

He leído en los artículos de Wikipedia (a los que me refiero más arriba) que Apple brinda acceso a WebDAV a estos services, y también he leído acerca de cadaver , un cliente WebDAV tipo wget , pero no puedo entender qué dirección debería usarse para acceder a las carpetas en http://public.me.com/ read-only (de forma anónima).

Quizás el comentario de Gilles (que WebDAV no se use actualmente) es cierto, pero aún parece haber algo de WebDAV detrás de escena: la URL pasó al browser para download un file con un directory (después de presionar "download files seleccionados"). "button en la parte superior de la interfaz web) se ve así:

https://public.me.com/ix/rudchenko/SEM%20Sep21%201%20TO%20PRINT.zip?webdav-method=ZIPGET&token=1g3s18hn-363p-13fryl0a20-17ial2zeu00&disposition=download 

– tenga en count que menciona "WebDAV". (Si tiene curiosidad, intenté volver a utilizar esta URL como argumento para wget , pero falló:

 $ LC_ALL=C wget 'https://public.me.com/ix/rudchenko/SEM%20Sep21%201%20TO%20PRINT.zip?webdav-method=ZIPGET&token=1g3s18hn-363p-13fryl0a20-17ial2zeu00&disposition=download' --2011-11-21 01:21:48-- https://public.me.com/ix/rudchenko/SEM%20Sep21%201%20TO%20PRINT.zip?webdav-method=ZIPGET&token=1g3s18hn-363p-13fryl0a20-17ial2zeu00&disposition=download Resolving public.me.com... 23.32.106.105 Connecting to public.me.com|23.32.106.105|:443... connected. HTTP request sent, awaiting response... 404 Not Found 2011-11-21 01:21:48 ERROR 404: Not Found. $ 

)

(Estoy usando un sistema GNU / Linux)

Ese server está ejecutando claramente una implementación parcial o incompleta de WebDAV. Tenga en count que debe conectarse a una URL como https://public.me.com/ix/rudchenko , no a la URL normal https://public.me.com/rudchenko . Intenté varios clientes:

  • Con un descargador HTTP normal como wget o curl, podría download un file sabiendo su nombre (por ejemplo, wget https://public.me.com/ix/rudchenko/directory/filename ), pero no pude get una list de directorys .
  • FuseDAV , que hubiera sido mi primera opción, no puede hacer frente a algunos commands que faltan. Aparentemente se las arregla para listr el directory raíz (visible en el resultado de fusedav -D ) pero finalmente ejecuta alguna request que devuelve "PROPFIND failed: 404 Not Found" y se bloquea.
  • Nd no tiene un command de list.
  • Cadáver funciona bien, pero carece de un command recursivo de recuperación. Puede usarlo para get listdos y luego recuperar files individuales como se indica arriba.

    No es perfecto, y hay un problema específico en este caso: el mget cadáver no trata los arguments con comodines que se expanden a nombres de files con espacios .

  • Davfs2 funciona muy bien. Podría montar ese recurso y copyr files de él. El único inconveniente es que no se trata de un sistema de files FUSE, sino que se necesita un administrador para montarlo o una input en /etc/fstab .
  • El wdfs basado en FUSE -1.4.2- alt0.M51.1 funcionó muy bien en este caso, no requiriendo root (solo permissions para /dev/fuse ).

     mkdir viewRemote wdfs https://public.me.com/ix/rudchenko/ viewRemote rsync -a viewRemote/SEM*TO\ PRINT* ./ fusermount -u viewRemote rmdir viewRemote 

(Por supuesto, un simple cp lugar de rsync funcionaría bien en este ejemplo; rsync fue elegido simplemente para diagnósticos adicionales sobre la diferencia cuando actualizaremos la copy).

(Aparte de wdfs, probé estos commands en un sistema de compression Debian. Su kilometraje puede variar).

También hay algunos scripts especiales y una herramienta ( wget-warc ) para download el contenido de https://public.me.com/ carpetas del usuario – https://github.com/ArchiveTeam/mobileme-grab/blob/master /dld-me-com.sh (y vea el contenedor que contiene). (Se encuentra a través de http://archiveteam.org/index.php?title=MobileMe#How_to_help_archiving ).

Internamente, el script parece componer las requestes de WebDAV y usar las respuestas, por ejemplo:

 # step 1: download the list of files if [[ "$domain" =~ "public.me.com" ]] then # public.me.com has real WebDAV # PROPFIND with Depth: infinity lists all files echo -n " - Discovering urls (XML)..." curl "https://public.me.com/ix/${username}/" \ --silent \ --request PROPFIND \ --header "Content-Type: text/xml; charset=\"utf-8\"" \ --header "Depth: infinity" \ --data '<?xml version="1.0" encoding="utf-8"?><DAV:propfind xmlns:DAV="DAV:"><DAV:allprop/></DAV:propfind>' \ --user-agent "${USER_AGENT}" \ > "$userdir/webdav-feed.xml" result=$? if [ $result -ne 0 ] then echo " ERROR ($result)." exit 1 fi echo " done." # grep for href, strip <D:href> and prepend https://public.me.com grep -o -E "<D:href>[^<]+" "$userdir/webdav-feed.xml" | cut -c 9- | awk '/[^\/]$/ { print "https://public.me.com" $1 }' > "$userdir/urls.txt" count=$( cat "$userdir/urls.txt" | wc -l ) elif 

Sí, también usan " https://public.me.com/ix/ $ {username} /", tenga en count el infijo " / ix / " en la URL. No es la URL normal, lo mismo que Gilles descubrió en su respuesta .