Récupérer le contenu d'une page web statique

Aller en bas

Récupérer le contenu d'une page web statique Empty Récupérer le contenu d'une page web statique

Message  Gus le Ven 25 Mar - 22:41

Voici une petite entité de transformation pour récupérer le contenu texte d'une page Web statique à partir de son URL :
Rien de bien compliqué ici. Ça se complique en revanche quand il s'agit d'accéder aux page Web dynamiques (cas qu'on traitera plus tard)


Code:
package gus05.entity.gus.web.download.webpage;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import gus05.framework.core.Entity;
import gus05.framework.features.Transform;

public class DownloadWebPage implements Entity, Transform {

    public String getName()            {return "gus.web.download.webpage";}
    public String getCreationDate()      {return "2007.09.18";}

    public Object transform(Object obj) throws Exception
    {
       URL url = toURL(obj);
        return pageContent(url);
    }

    private URL toURL(Object obj) throws Exception
    {
       if(obj instanceof URL) return(URL)obj;
        if(obj instanceof String) return new URL((String)obj);
        if(obj instanceof File) return ((File)obj).toURI().toURL();
        throw new Exception("Invalid data type: "+obj.getClass().getName());
    }

    private String pageContent(URL url) throws IOException
    {
        HttpURLConnection con = (HttpURLConnection)url.openConnection();
        con.connect();
       
        InputStreamReader isr = getInputStreamReader(con);
        BufferedReader rd = new BufferedReader(isr);
       
        String line;
        StringBuffer buffer = new StringBuffer();
        while((line = rd.readLine())!=null) buffer.append(line+"\n");
        isr.close();
       
        con.disconnect();
        return buffer.toString().trim();
    }
   
    private InputStreamReader getInputStreamReader(HttpURLConnection con) throws IOException
    {
       String charset = findCharset(con);
       InputStream is = con.getInputStream(); 
        if(charset!=null) return new InputStreamReader(is,charset);
        return new InputStreamReader(is);
    }
   
    private String findCharset(HttpURLConnection con)
    {
       String contentType = con.getContentType().replaceAll(" ","");
       if(!contentType.contains("charset=")) return null;
       return contentType.split("charset=")[1];
    }
}
Gus
Gus
Admin

Messages : 249
Date d'inscription : 01/09/2009

Voir le profil de l'utilisateur http://www.gus05.com

Revenir en haut Aller en bas

Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum