package es.upm.dit.prog.l9;
import java.net.*;
import java.io.*;
import java.util.regex.*;
/**
* Programacion - PROG
*
* Sesion de laboratorio 9.
*
* Entrada-Salida Ficheros URL
*
* @author Mi_Nombre
*
*/
public class DescargaFotos {
/**
* Patron usado para obtener el valor del atributo SRC de una equiqueta IMG.
* Este atributo lo usa el metodo extraeFotoUrlDeImg, pero se ha creado aqui
* para aumentar la eficiencia del programa. NO TOCARLO.
*/
private static Pattern pat = Pattern.compile(
"<\\s*img.*\\s.*src=\"([^\"]+)\"", Pattern.CASE_INSENSITIVE);
/**
* ACTIVIDAD 1
*
* Muestra por pantalla el codigo HTML usado para crear una pagina web.
*
* Se supone que el fichero referenciado por el URL pasado como argumento
* debe apuntar a una pagina escrita en HTML, y por tanto su contenido es
* textual.
*
* @param url
* URL de la pagina web de la que queremos mostrar su codigo
* HTML.
* @throws Exception
* Si falla cualquier cosa.
*/
private static void leeHTML(URL url) throws Exception {
// TODO: METODO A COMPLETAR POR EL ALUMNO
}
/**
* ACTIVIDAD 2
*
* Copia el contenido HTML de una pagina web en un fichero.
*
* Se supone que el fichero referenciado por el URL pasado como argumento
* debe apuntar a una pagina escrita en HTML, y por tanto su contenido es
* textual.
*
* @param url
* URL de la pagina web a copiar..
* @param destino
* El path y el nombre del fichero donde se copiara el contenido
* de la pagina indicada en el parametro url.
*
* @throws Exception
* Si falla cualquier cosa.
*/
private static void copiaHTML(URL url, String destino) throws Exception {
// TODO: METODO A COMPLETAR POR EL ALUMNO
}
/**
* Imprime las rutas de las fotos usadas en una pagina web.
*
* Se supone que el fichero referenciado por el URL pasado como argumento
* debe apuntar a una pagina escrita en HTML, y por tanto su contenido es
* textual.
*
* Este metodo leera linea a linea el contenido del fichero apuntado por
* URL. Consultara el contenido de cada linea leida en busca del texto:
*
*
*
* url_a_una_imagen es el path a la imagen usada en la pagina web.
*
* @param url
* Direccion de la pagina web a explorar en busca de fotos.
*
* @throws Exception
* Si falla cualquier cosa.
*/
private static void buscaFotos(URL url) throws Exception {
// TODO: METODO A COMPLETAR POR EL ALUMNO
}
/**
* Copia todas las fotos usadas en una pagina web en un directorio.
*
* Se supone que el fichero referenciado por el URL pasado como argumento
* debe apuntar a una pagina escrita en HTML, y por tanto su contenido es
* textual.
*
* Este metodo leera linea a linea el contenido del fichero apuntado por
* URL. Consultara el contenido de cada linea leida en busca del texto:
*
*
*
* url_a_una_imagen es el path a la imagen usada en la pagina web.
*
* Una vez localizada una url_a_una_imagen, descargara el fichero al que
* hace referencia..
*
* @param url
* Direccion de la pagina web a explorar en busca de fotos.
* @param directorio
* Directorio donde se crearan los ficheros con las fotos
* referenciadas en la pagina web indicada en url.
*
* @throws Exception
* Si falla cualquier cosa.
*/
private static void copiaFotos(URL url, String directorio) throws Exception {
// TODO: METODO A COMPLETAR POR EL ALUMNO
}
/**
* Explora un substring HTML en busca de una etiqueta IMG, devolviendo el
* URL a la imagen apuntada.
*
* Si el substring contiene varias etiquetas IMG, solo se considera la
* primera de ellas, ignorandose el resto.
*
* @param url_base
* Es el url del que se saco el substring html. Es necesario para
* poder construir los URLs cuando se usan path relativos en la
* etiqueta IMG.
*
* @param html
* Un string con un trozo de HTML.
*
* @return Devuelve el url de la foto apuntada en la etiqueta IMG. Si no
* encuentra la etiqueta devuelve null.
*
* @throws Exception
* Si falla cualquier cosa.
*/
private static URL extraeFotoUrlDeImg(URL url_base, String html)
throws Exception {
Matcher m = pat.matcher(html);
if (m.find())
return new URL(url_base, m.group(1));
else
return null;
}
/**
* Pruebas de los metodos.
*/
public static void main(String[] args) throws Exception {
// Cojo el primer argumento, y si no existe uso el home del DIT.
URL url = new URL(args.length == 0 ? "http://www.dit.upm.es" : args[0]);
leeHTML(url);
// copiaHTML(url, "/tmp/lab8/pagina.html");
// buscaFotos(url);
// copiaFotos(url, "/tmp/kkkk");
}
}