Téléchargement d'images (pochettes cd, dvd, livres...) sur internet

Contenu du snippet

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 / Exemple :


/*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.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.