Suivez et participez au développement du nouvel OpenCellar : PLOC.co
Home Page
 
Français  English  
Open Cellar Home Edition - 1.2 - Windows 98, Me, 2000, XP and Vista. The free Windows wine cellar management software. Open Cellar Mobile Edition - Beta 2 (French version) - Pocket PC. The free Pocket PC wine cellar management software. Open Cellar Cross Platform - Beta 1 (French version) - Mac OSX and Linux. The free MacOS/Linux wine cellar management software. My Open Cellar Open Cellar Forums Place des vins
Search: Welcome (connect - create an account )
Nuage de tags
Récupérer l'illustration du vin
12/01/2010
Reply
Récupérer l'illustration du vin
Phil35
3 posts
Bonjour,
J'aimerais récupérer par un script les images d'illustration des vins (soit les images elles-mêmes, soit plus simplement leur chemin si elles sont accessibles) : je ne trouve pas mon bonheur dans http://www.open-cellar.com/Shared/Common/2/oc2010-10-12.PNG (je ne sais pas si c'est à jour, et surtout il n'y a que l'héritage et pas les relations entre objets). Pourriez-vous m'aider ?
Merci !
 

16/01/2010
Reply
Re : Récupérer l'illustration du vin
AdministrateurView your blog
3099 posts
Bonjour,

Voici le script :



Le schéma sur mon blog est celui de la future version.

Matthieu
 

17/01/2010
Reply
Re : Récupérer l'illustration du vin
Phil35
3 posts
Bonjour et merci pour le script : ça marche bien (j'ai juste changé les noms des images car tous les vins n'ont pas de nom). Pour info, je réalise une extraction des infos de Open Cellar pour afficher les producteurs (avec les vins et leurs images) dans une page HTML à base de l'API GoogleMaps.
Cordialement,
Phil 35
 

18/01/2010
Reply
Re : Récupérer l'illustration du vin
AdministrateurView your blog
3099 posts
Voila une idée trés intéressante !
Pensez vous qu'il soit possible de l'automatiser via un script et d'en faire profiter les autres utilisateurs ?

Matthieu
 

18/01/2010
Reply
Re : Récupérer l'illustration du vin
Phil35
3 posts
Bonjour, je n'en suis qu'au début mais vous trouverez sur http://philhome4.ifrance.com/ une idée de ce que ça peut donner.

Limitations :
1) la fenêtre popup pour zoomer sur une étiquette de vin fonctionne sur Firefox mais pas sur IE (je suis preneur d'une popup javascript plus sympa, avis aux amateurs)
2) j'ai viré tous les accents car je ne m'en sortais pas avec google API (je prends les idées de ceux qui en ont !)

Voici le fonctionnement :
1) j'ai détourné les champs "tel" et "fax" de la fiche producteurs : j'y mets respectivement la latitude et la longitude, en attendant qu'Open Cellar propose ces champs ! :-D
2) le script ci-dessous génère un fichier "producteurs.xml" contenant les infos intéressantes des producteurs (nom, web, latitude, longitude...) et des vins de ce producteur (dont l'image, merci pour le bout de code que vous m'avez filé).
3) la page index.htm que vous voyez exploite ce fichier XML pour alimenter une carte Google.

C'est encore très perfectible bien sûr. J'imagine plus tard également générer automatiquement des "POI" de GPS pour exploiter ces coordonnées.

Cdlt.


SCRIPT :
============================
if(App.ActiveCellar == null)
{
MessageBox.Show("Aucune cave n'est ouverte");
return;
}

App.Animate(AnimationType.Work, true);
App.SetCursor(true);

ObjectCollection owners = App.ActiveCellar.GetCollection((ushort)ObjectType.Owner);


System.Text.StringBuilder sb = new System.Text.StringBuilder();

sb.Append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
sb.Append(Environment.NewLine);
sb.Append( "<markers>");
sb.Append(Environment.NewLine);

int num_image = 0;

for (int i = 0; i < owners.Count; i++)
{
Owner owner = (Owner)owners[i];
ObjectCollection wines = App.ActiveCellar.GetCollection((ushort)ObjectType.Wine);
sb.Append( "<marker ");
sb.Append( "lat=\"" + owner.Phone.Trim() + "\" ");
sb.Append( "lng=\"" + owner.Fax.Trim() + "\" ");
sb.Append( "name=\"" + System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(owner.Name)).Trim() + "\" ");
sb.Append( "address=\"" + System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(owner.Address1)).Trim() + " " + System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(owner.Address2)).Trim() + "\" ");
sb.Append( "zipcode=\"" + owner.ZipCode.Trim() + "\" ");
sb.Append( "city=\"" + System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(owner.City)).Trim() + "\" ");
sb.Append( "web=\"" + owner.Web.Trim() + "\" ");
sb.Append(">" );
sb.Append(Environment.NewLine);

for (int w = 0;w < wines.Count; w++)
{
Wine wine = (Wine)wines[w];
if (wine.Owner == owner) {
sb.Append("<wine ");
int nb;
if(wine.ManualManagement)
{
nb = wine.Bottles;
}
else
{
nb = wine.RackItems.Count;
}
sb.Append("bottles = \""+nb+"\" ");

sb.Append("name = \""+System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(wine.Name.Replace("\"",""))).Trim() +"\" ");

sb.Append("classification = \""+System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(wine.Classification.ToString().Replace("\"",""))).Trim() +"\" ");

sb.Append("appellation = \""+System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(wine.Appellation.ToString().Replace("\"",""))).Trim() +"\" ");


string color = "Champagne";
if(wine.WineColor == ColorType.Red)
{
color = "Rouge";
}
else if(wine.WineColor == ColorType.White)
{
color = "Blanc";
}
else if(wine.WineColor == ColorType.Rosy)
{
color = "Rosé";
}
else if(wine.WineColor == ColorType.Yellow)
{
color = "Champagne";
}
else if(wine.WineColor == ColorType.LiqueurLike)
{
color = "Liquoreux";
}
else if(wine.WineColor == ColorType.Misc)
{
color = "Autre";
}
sb.Append("color = \""+System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(color)) +"\" ");


if(wine.Year != 0)
{
sb.Append("year = \""+ wine.Year.ToString() +"\" ");
}



if(wine.HasImage())
{
System.Drawing.Image img = wine.Image.GetImage();
String debutChemin = "c:\\Nous\\Vin";
String finChemin= "picsHtml\\" + Utility.GetValidFileName(num_image + ".jpg");
finChemin = System.Text.Encoding.ASCII.GetString(System.Text.Encoding.GetEncoding(1251).GetBytes(finChemin));
num_image +=1;
try
{
img.Save(debutChemin+"\\"+finChemin);
img.Dispose();
sb.Append("image = \""+finChemin+"\" ");
}
catch
{
MessageBox.Show("Errer génération image "+debutChemin+"\\"+finChemin);
}
}

sb.Append("/>" );
sb.Append(Environment.NewLine);
}
}
sb.Append("</marker>" );
sb.Append(Environment.NewLine);

}

sb.Append("</markers>");
sb.Append(Environment.NewLine);


string destFileName = "c:\\Nous\\Vin\\producteurs.xml";

if(System.IO.File.Exists(destFileName))
{
System.IO.File.Delete(destFileName);
}

// Envoi vers le fichier de sortie.
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(destFileName, false, System.Text.Encoding.Default))
{
sw.Write(sb.ToString());
}

//
// Affichage du report
//

IShellWindow shellWindow = (IShellWindow)App.GetWindow(WindowType.Shell, null);
if(shellWindow != null)
{
shellWindow.Start(destFileName);
}

App.SetCursor(false);
App.StopAnimate();
 

19/01/2010
Reply
Re : Récupérer l'illustration du vin
AdministrateurView your blog
3099 posts
Bonsoir,

Le résultat est chouette, bravo !
Pour le détournement de champ il vous sera possible d'en ajouter autant que besoin dans la prochaine version.

Matthieu
 

© 2006-2014 Matthieu DUCROCQ  Open Cellar official blog - All rights reserved - Last update: january 2014 | twitter