Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TÉLÉCHARGEMENT D'IMAGES (POCHETTES CD, DVD, LIVRES...) SUR INTERNET


Description

Cliquez pour voir la capture en taille normale
Petite fonction permettant de télécharger des images de cds, bd, livres, dvd, films, affiches
par rapport à un certain critère. Cette fonction utilise le redimensionnement d'images de javaallmanac.com, un vecteur pour la navigation entre les différents résultats, et un socket pour effectuer une requete POST,  elle permet également la sauvegarde du résultat (de l'image) sous format jpg. Pour savoir quelle requête effectuer, servez vous d'un sniffeur tel que Iris.
 

Source

  • /*Fonction réalisée par dufour137, elle permet de télécharger des images de cds, bd, livres, dvd, films, affiches
  • * par rapport à un certain critère, il suffit d'entrer dans la zone de texte les critères
  • *exemple : "Renaud boucan d'enfer" le résultat est le même que si vous recherchez qqch sur le site www.amazon.fr.
  • *Le bouton rechercher envoie une requête POST sur le serveur amazon.fr.
  • *Par la suite je lis le résultat (la page html) et je fais le teste par
  • *rapport à "<td class="small" align="left"> là je remplace le nom de l'image
  • *THUMBZZZ.jpg par LZZZZZZZ.jpg (t comme thumbs et L comme Large. c'est une fonction que je comptais
  • *ajouter à xPort, mais amazon.fr ne m'en a pas donné l'autorisation.
  • *
  • *Sources: scale() et toBufferedImage() Je les avais prises sur Javaallmanac pour une fonction d'xPort et je les ai
  • *adaptée pour les besoins du programme.
  • */
  • import java.net.* ;
  • import java.awt.* ;
  • import java.awt.event.* ;
  • import javax.swing.* ;
  • import javax.swing.border.* ;
  • import java.io.* ;
  • import java.util.Vector;
  • import javax.imageio.ImageIO;
  • import java.awt.image.BufferedImage;
  • import javax.swing.border.BevelBorder;
  • import java.awt.geom.AffineTransform;
  • import java.awt.image.AffineTransformOp;
  • public class PictureDownload extends JFrame implements ActionListener
  • {
  • URL page ;
  • JLabel label;
  • JButton next, precedant, search, save;
  • JTextArea crit, urls;
  • Image monImage=null;
  • Vector adresses= new Vector();
  • Image image = null;
  • int index=0;
  • public PictureDownload()
  • {
  • getContentPane().setLayout(null) ;
  • label = new JLabel("Tappez le critère de recherche");
  • setBounds(1,1,400, 440) ;
  • getContentPane().setBackground(new Color(221, 214, 235));
  • label.setBounds(50,50, 300,300);
  • label.setBackground(Color.white);
  • getContentPane().add(label);
  • search= new JButton("Rechercher");
  • search.addActionListener(this);
  • search.setBounds(50,10,120,20);
  • getContentPane().add(search);
  • crit= new JTextArea();
  • crit.setBounds(190,10,150,20);
  • getContentPane().add(crit);
  • save= new JButton("Enregistrer");
  • save.setBounds(50,360,120,20);
  • save.addActionListener(this);
  • getContentPane().add(save);
  • next= new JButton(">>");
  • next.setBounds(290,40,50,10);
  • next.addActionListener(this);
  • next.setEnabled(false);
  • getContentPane().add(next);
  • precedant = new JButton("<<");
  • precedant.setBounds(50,40,50,10);
  • precedant.addActionListener(this);
  • precedant.setEnabled(false);
  • getContentPane().add(precedant);
  • setTitle("Images sur amazon.fr");
  • urls = new JTextArea();
  • urls.setBounds(50,340,300,80);
  • setTitle("Recherche d'images sur amazon.fr");
  • setVisible(true);
  • }
  • /****************************/
  • public void actionPerformed(ActionEvent evt)
  • {
  • if(evt.getSource()==search)
  • {
  • index=0;
  • label.setIcon(null);
  • next.setEnabled(false);
  • precedant.setEnabled(false);
  • adresses.clear();
  • label.setText("recherche de l'image en cours");
  • new Thread(new Runnable()
  • {
  • public void run()
  • {
  • try
  • {
  • Thread.sleep(0) ;
  • Connect(crit.getText());
  • }
  • catch(InterruptedException ex)
  • {
  • ex.printStackTrace() ;
  • }
  • }
  • }).start();
  • }
  • if(evt.getSource()==next)
  • {
  • index++;
  • if(index+1==adresses.size())
  • next.setEnabled(false);
  • precedant.setEnabled(true);
  • URL url = null;
  • try { url = new URL(adresses.elementAt(index).toString()); image = ImageIO.read(url);} catch(MalformedURLException e) {} catch(IOException e){}
  • label.setText("");
  • label.setIcon(new ImageIcon(reduit(image)));
  • }
  • if(evt.getSource()==precedant)
  • {
  • index--;
  • next.setEnabled(true);
  • URL url = null;
  • try { url = new URL(adresses.elementAt(index).toString()); image = ImageIO.read(url);} catch(MalformedURLException e) {} catch(IOException e){}
  • label.setText("");
  • label.setIcon(new ImageIcon(reduit(image)));
  • if(index==0)
  • precedant.setEnabled(false);
  • }
  • if(evt.getSource()==save)
  • {
  • Save(image, crit.getText());
  • }
  • }
  • /****************************/
  • public void Save(Image img, String crit)
  • {
  • BufferedImage rendImage = toBufferedImage(img);
  • try
  • {
  • File file = new File(crit+".jpg");
  • ImageIO.write(rendImage, "jpg", file);
  • }
  • catch (IOException e)
  • {
  • }
  • }
  • /****************************/
  • public Image reduit(Image img)
  • {
  • BufferedImage bg = toBufferedImage(img);
  • if(bg==null)
  • return null;
  • double cooeficientH= (bg.getHeight() *0.00333333333333333);
  • double cooeficientL = cooeficientH;
  • if(cooeficientH>1)
  • cooeficientH=1/cooeficientH;
  • else if(cooeficientH<1)
  • cooeficientH=(1-cooeficientH)+1;
  • if(cooeficientL>1)
  • cooeficientL=1/cooeficientL;
  • else if(cooeficientL<1)
  • cooeficientL=(1-cooeficientL)+1;
  • bg=scale(bg,cooeficientH,cooeficientL);
  • monImage = Toolkit.getDefaultToolkit().createImage(bg.getSource());
  • return monImage;
  • }
  • /****************Java allmanac*******************/
  • public static BufferedImage scale(BufferedImage bi, double cooeficientH, double cooeficientL)
  • {
  • AffineTransform tx = new AffineTransform();
  • tx.scale(cooeficientL, cooeficientH);
  • AffineTransformOp op = new AffineTransformOp(tx,AffineTransformOp.TYPE_BILINEAR);
  • BufferedImage biNew = new BufferedImage((int)(bi.getWidth() * cooeficientL), (int) (bi.getHeight() * cooeficientH), bi.getType());
  • return op.filter(bi, biNew);
  • }
  • /****************Java allmanac*******************/
  • public static BufferedImage toBufferedImage(Image image)
  • {
  • /** On test si l'image n'est pas déja une instance de BufferedImage */
  • if( image instanceof BufferedImage )
  • return((BufferedImage)image );
  • else
  • {
  • /** On s'assure que l'image est complètement chargée */
  • image = new ImageIcon(image).getImage();
  • /** On crée la nouvelle image */
  • if(image.getHeight(null)<=0||image.getWidth(null)<=0)
  • return null;
  • BufferedImage bufferedImage = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB );
  • Graphics g = bufferedImage.createGraphics();
  • g.drawImage(image,0,0,null);
  • g.dispose();
  • return(bufferedImage);
  • }
  • }
  • /****************************/
  • public void Connect(String critere)
  • {
  • try {
  • Socket digit = new Socket("www.amazon.fr", 80);
  • digit.setSoTimeout(20000);
  • OutputStream out=digit.getOutputStream();
  • String ligne=null;
  • out = digit.getOutputStream();
  • int imagetrouvee=0;
  • String req ="field-keywords=" + Nettoye(critere) + "&url=index%3Dblended%26rank%3D%252Bamzrank&search-type=quick-search&Go.x=0&Go.y=0&Go=Go"; //HTTP/1.1";
  • String header="POST http://www.amazon.fr/exec/obidos/search-handle-form/171-3920384-6113039 HTTP/1.1\n";
  • header+="Connection: close\n";
  • header+="Host: www.amazon.fr\n";
  • header+="Content-Type: application/x-www-form-urlencoded\n";
  • header+="Content-Length: " + req.length() + "\n\n";
  • header+= req + "HTTP/1.1 200 OK\n";
  • header+="Server: Apache\n";
  • out.write(header.getBytes());
  • out.flush();
  • BufferedReader in = new BufferedReader(new InputStreamReader(digit.getInputStream()));
  • boolean eof = false;
  • while(!eof)
  • {
  • String line=in.readLine();
  • if(line!=null)
  • {
  • int a=line.indexOf("http://images-eu.amazon.com/images/P/");
  • if(a>0)
  • {
  • String url= line.substring(a, line.indexOf('"', a)).replaceAll("THUMBZZZ.jpg", "LZZZZZZZ.jpg");
  • for(int i=0; i<15; i++)
  • {
  • line=in.readLine();
  • if(line.equals("<td class=" + '"' + "small" + '"' + " align=" + '"' + "left" + '"' +">"))
  • {
  • if(imagetrouvee==0)
  • {
  • URL url2 = new URL(url);
  • image = ImageIO.read(url2);
  • label.setText("");
  • label.setIcon(new ImageIcon(reduit(image)));
  • next.setEnabled(true);
  • }
  • adresses.add(new String(url));
  • urls.append(url +"\n");
  • imagetrouvee++;
  • }
  • }
  • }
  • }
  • else
  • eof=true;
  • }
  • digit.close();
  • }
  • catch (IOException ex)
  • {
  • System.out.println("Erreur ES:"+ ex.getMessage());
  • }
  • }
  • /*********************************************************/
  • public String Nettoye(String str)
  • {
  • str=str.replace('?','@');
  • str=str.replaceAll("@", "%3f");
  • str=str.replaceAll(",", "");
  • str=str.replace(' ', '+');
  • str=str.toLowerCase();
  • str=str.replaceAll("'", "%27");
  • return str;
  • }
  • /*********************************************************/
  • public static void main (String[] args)
  • {
  • PictureDownload wc = new PictureDownload() ;
  • }
  • }
/*Fonction réalisée par dufour137, elle permet de télécharger des images de cds, bd, livres, dvd, films, affiches
 * par rapport à un certain critère, il suffit d'entrer dans la zone de texte les critères
 *exemple : "Renaud boucan d'enfer"  le résultat est le même que si vous recherchez qqch sur le site www.amazon.fr. 
 *Le bouton rechercher envoie une requête POST sur le serveur amazon.fr. 
 *Par la suite je lis le résultat (la page html) et je fais le teste par 
 *rapport à "<td class="small" align="left"> là je remplace le nom de l'image
 *THUMBZZZ.jpg par LZZZZZZZ.jpg (t comme thumbs et L comme Large. c'est une fonction que je comptais
 *ajouter à xPort, mais amazon.fr ne m'en a pas donné l'autorisation.
 *
 *Sources: scale() et toBufferedImage() Je les avais prises sur Javaallmanac pour une fonction d'xPort et je les ai
 *adaptée pour les besoins du programme.
 */
 
import java.net.* ;
import java.awt.* ;
import java.awt.event.* ;
import javax.swing.* ;
import javax.swing.border.* ;
import java.io.* ;
import java.util.Vector;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import javax.swing.border.BevelBorder;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;

public class PictureDownload extends JFrame implements ActionListener
	{
	URL page ;
	JLabel label;
	JButton next, precedant, search, save;
	JTextArea crit, urls;
	Image monImage=null;
	Vector adresses= new Vector();
	Image image = null;
	int index=0;
	public PictureDownload()
		{	
		getContentPane().setLayout(null) ;	
		label = new JLabel("Tappez le critère de recherche");
		setBounds(1,1,400, 440) ;
		getContentPane().setBackground(new Color(221, 214, 235));

		label.setBounds(50,50, 300,300);
		label.setBackground(Color.white);
		getContentPane().add(label);
		
		search= new JButton("Rechercher");
		search.addActionListener(this);
		search.setBounds(50,10,120,20);
		getContentPane().add(search);
		
		crit= new JTextArea();
		crit.setBounds(190,10,150,20);
		getContentPane().add(crit);
		
		save= new JButton("Enregistrer");
		save.setBounds(50,360,120,20);
		save.addActionListener(this);
		getContentPane().add(save);
		
		next= new JButton(">>");
		next.setBounds(290,40,50,10);
		next.addActionListener(this);
		next.setEnabled(false);
		getContentPane().add(next);
		
		precedant = new JButton("<<");
		precedant.setBounds(50,40,50,10);
		precedant.addActionListener(this);
		precedant.setEnabled(false);
		getContentPane().add(precedant);
		setTitle("Images sur amazon.fr");
		urls = new JTextArea();
		urls.setBounds(50,340,300,80);
		setTitle("Recherche d'images sur amazon.fr");
		setVisible(true);
		}	
	/****************************/
	public void actionPerformed(ActionEvent evt)
		{
		if(evt.getSource()==search)
			{
			index=0;
			label.setIcon(null);
			next.setEnabled(false);
			precedant.setEnabled(false);
			adresses.clear();
			label.setText("recherche de l'image en cours");	
			new Thread(new Runnable()
				{
				public void run()
					{
					try 
						{
						Thread.sleep(0) ;	
						Connect(crit.getText());
						}
					catch(InterruptedException ex) 
						{
						ex.printStackTrace() ;
						}
					}
				}).start(); 
			}
		if(evt.getSource()==next)
			{
			index++;
			if(index+1==adresses.size())
				next.setEnabled(false);
			precedant.setEnabled(true);
			URL url = null;
			try { url = new URL(adresses.elementAt(index).toString()); image = ImageIO.read(url);} catch(MalformedURLException e) {} catch(IOException e){}
        	label.setText("");	
			label.setIcon(new ImageIcon(reduit(image)));
			}
		if(evt.getSource()==precedant)
			{
			index--;
			next.setEnabled(true);
			URL url = null;
			try { url = new URL(adresses.elementAt(index).toString()); image = ImageIO.read(url);} catch(MalformedURLException e) {} catch(IOException e){}
        	label.setText("");	
			label.setIcon(new ImageIcon(reduit(image)));
			if(index==0)
				precedant.setEnabled(false);
			}
		if(evt.getSource()==save)
			{
			Save(image, crit.getText());	
			}
			
		}
	/****************************/
	public void Save(Image img, String crit)
		{
    	BufferedImage rendImage = toBufferedImage(img);
        try 
        	{
        	File file = new File(crit+".jpg");
        	ImageIO.write(rendImage, "jpg", file);
    		} 
    	catch (IOException e) 
    		{
    		}
    	}
    /****************************/
    public Image reduit(Image img)
    	{
		BufferedImage bg = toBufferedImage(img);
		if(bg==null)
			return null;
       	double cooeficientH= (bg.getHeight() *0.00333333333333333);
       	double cooeficientL = cooeficientH;
       	if(cooeficientH>1)
       		cooeficientH=1/cooeficientH;
       	else if(cooeficientH<1)
       		cooeficientH=(1-cooeficientH)+1;
       	
       	 if(cooeficientL>1)
       		cooeficientL=1/cooeficientL;
       	else if(cooeficientL<1)
       		cooeficientL=(1-cooeficientL)+1;
       			
       	bg=scale(bg,cooeficientH,cooeficientL);
       	monImage = Toolkit.getDefaultToolkit().createImage(bg.getSource());
       	return monImage;
    	}
      /****************Java allmanac*******************/	
      public static BufferedImage scale(BufferedImage bi, double cooeficientH, double cooeficientL) 
      	{
        AffineTransform tx = new AffineTransform();
        tx.scale(cooeficientL, cooeficientH);
        AffineTransformOp op = new AffineTransformOp(tx,AffineTransformOp.TYPE_BILINEAR);
        BufferedImage biNew = new BufferedImage((int)(bi.getWidth() * cooeficientL), (int) (bi.getHeight() * cooeficientH), bi.getType());
        return op.filter(bi, biNew);       
		}
	/****************Java allmanac*******************/	
	public static BufferedImage toBufferedImage(Image image) 
      	{
        /** On test si l'image n'est pas déja une instance de BufferedImage */
        if( image instanceof BufferedImage )
        	return((BufferedImage)image ); 
        else 
        	{
            /** On s'assure que l'image est complètement chargée */
            image = new ImageIcon(image).getImage();            
            /** On crée la nouvelle image */
            if(image.getHeight(null)<=0||image.getWidth(null)<=0)
				return null;
            BufferedImage bufferedImage = new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB );
            Graphics g = bufferedImage.createGraphics();
            g.drawImage(image,0,0,null);
            g.dispose();
            return(bufferedImage);
        	} 
		}
	/****************************/		
	public void Connect(String critere)
	    {
    	try {
        	Socket digit = new Socket("www.amazon.fr", 80);

        	digit.setSoTimeout(20000);
        	OutputStream out=digit.getOutputStream();
        	String ligne=null;
    		out = digit.getOutputStream();
			int imagetrouvee=0;
			String req ="field-keywords=" + Nettoye(critere) + "&url=index%3Dblended%26rank%3D%252Bamzrank&search-type=quick-search&Go.x=0&Go.y=0&Go=Go"; //HTTP/1.1";
           	String header="POST http://www.amazon.fr/exec/obidos/search-handle-form/171-3920384-6113039 HTTP/1.1\n";
			header+="Connection: close\n";
			header+="Host: www.amazon.fr\n";
			header+="Content-Type: application/x-www-form-urlencoded\n";
			header+="Content-Length: " + req.length() + "\n\n";
			header+= req + "HTTP/1.1 200 OK\n";
			header+="Server: Apache\n";

			out.write(header.getBytes());
            out.flush();
        	BufferedReader in = new BufferedReader(new InputStreamReader(digit.getInputStream()));
        	boolean eof = false;
        	while(!eof)
        		{
        		String line=in.readLine();	
        		if(line!=null)
        			{
		     		int a=line.indexOf("http://images-eu.amazon.com/images/P/");
		     		if(a>0)
	     				{
	     				String url= line.substring(a, line.indexOf('"', a)).replaceAll("THUMBZZZ.jpg", "LZZZZZZZ.jpg");
	     				for(int i=0; i<15; i++)
	     					{
	     					line=in.readLine();
	     					if(line.equals("<td class=" + '"' + "small" + '"' + " align=" + '"' + "left" + '"' +">"))
	     						{	
	     						if(imagetrouvee==0)	
	     							{
	     							URL url2 = new URL(url);
        							image = ImageIO.read(url2);
        							label.setText("");	
									label.setIcon(new ImageIcon(reduit(image)));
    								next.setEnabled(true);
	     							}
	     						adresses.add(new String(url));
	     						urls.append(url +"\n");	
	     						imagetrouvee++;
	     						}		
	     					}		
	     				}
		     		}
		     	else
		     		eof=true;		
        		}
        digit.close();
    	}
    catch (IOException ex) 
    	{
        System.out.println("Erreur ES:"+ ex.getMessage());
    	}
	}
    /*********************************************************/
    public String Nettoye(String str)
		{
		str=str.replace('?','@');
		str=str.replaceAll("@", "%3f");
		str=str.replaceAll(",", "");
		str=str.replace(' ', '+');
		str=str.toLowerCase();
		str=str.replaceAll("'", "%27");			
		return str;
		}
	/*********************************************************/	
	public static void main (String[] args)
		{	
		PictureDownload wc = new PictureDownload() ;
		}
	}
	

Conclusion

C'est une fonction que je comptais ajouter au shareware dont je ne vais pas vous en faire la pub ici car c'est un site Opensource, elle aurait servi à écrire l'image dans le tag PIC d'un mp3.
J'espère qu'elle serivra à qqun. Postez vos commentaires.
 

Commentaires et avis

signaler à un administrateur
Commentaire de neodante le 27/04/2005 09:05:04 administrateur CS

Salut,
pourrais-tu mettre ton code dans un ZIP ne laisser que la partie intéressante dans la partie source

Merci

signaler à un administrateur
Commentaire de sami ktari le 15/03/2007 12:18:39

j'ai pas trouvé le moyen d'utiliser cette interface

signaler à un administrateur
Commentaire de ribos le 27/09/2007 20:41:13

Bonjour, je cherche a faire un programme qui a fait à peu près la même chose et je voulais savoir comment utiliser le site d'amazon ??
Quel est la requète à faire ?
Si vous avez des infos là dessus, merci de me prévenir !

signaler à un administrateur
Commentaire de Mysystm le 10/09/2008 01:04:15

please
met le dans un Zip
ca serait plus pratique !!!!
merci

signaler à un administrateur
Commentaire de ereclasse le 28/10/2008 16:35:41

Please j'arrive pas a utiliser ton programme, par koi devrais je remplacer "PictureDownload"

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

lien avec INTERNET EXPLORER et image sur bouton (URGENT) [ par othland ] slt tlm1)je avoir la fonction suivate (si elle existe!!!!):quand je clique sur un bouton, une fentre de INTERNET EXPLORER s'affiche!2)peut on mettre u Upload d'image [ par moonflower ] Bonjour ! Je programme un forum enti&#232;rement en Java en utilisant le framework Struts (jsp et servlets). Je voudrais que lors de l'inscription, l comment convertir sequence image JPEG(30fps) en MJPEG [ par sicakmustafa ] Bonjour,Actuellement, dans le cadre de mes etudes, j ai besoin de convertir en temps reel des images JPEG (30 images par secondes) en Motion JPEG.&nbs Impression d'image [ par terminagroo ] Bonjour,C'est peut-&#234;tre une question stupide mais je me gal&#232;re avec &#231;a. Alors j'aimerais imprimer une photo &#224; partir d'une applica Bouton sur une image [ par p0232 ] Bonjour, je dois r&#233;aliser, en java, une barre de menu qui a une forme un peu sp&#233;ciale elle doit etre &#233;galement color&#233;e. Je voudrai pb avec image de fond et positions des boutons!!! [ par othland ] slt tlmje suis vraiment dans la merde!je veux avoir une fentre ayant comme fond une image plus des &#233;tiquettes, des boutons et des bouton radio: a Image HTML et JEditorPane [ par Yenapa ] Bonjour a toutes et a tousJe cherche un moyen d'inserer une image dans une page html affich&#233;e dans un JEditorPane, sans inserer une balise &lt;IM Urgent!!!! Connexion Internet [ par sellami_k ] Bonjout tt le mondeje suis impeu dans la merdeIl faut j'arrive a tracer une courbe du mon debit sur le net en fonction de tempspour cela il fo ke j'en Adresse IP de sa connexion Internet [ par Foub12 ] Bonjour, j'ai trouv&#233; le code JAVA suivant : &#171;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InetAddress Ip = InetAddress.getLocalHost();&nbsp;&nbsp;&nb son&image_questions [ par sydailly ] Salut &#224; tous. J'ai un projet &#224; d&#233;veloppe


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,343 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.