Suivez et participez au développement du nouvel OpenCellar : PLOC.co
Page d'accueil
 
Français  English  
Open Cellar Home Edition - 1.2 - Le logiciel gratuit pour gérér efficacement votre cave à vins sous Windows. Open Cellar Mobile Edition - Beta 2 - La gestion de cave à vins a enfin sa solution Mobile sur Pocket PC. Open Cellar Cross Platform - Beta 1 - La gestion gratuite de vins disponible sous Mac OSX et Linux. Mon Open Cellar Les forums d'Open Cellar Place des vins
Rechercher : Bienvenue (se connecter - créer un compte)
Facebook


Nuage de tags
Récupérer l'illustration du vin
12/01/2010
Répondre
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
Répondre
Re : Récupérer l'illustration du vin
AdministrateurVoir son blog
3099 posts
Bonjour,

Voici le script :



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

Matthieu
 

17/01/2010
Répondre
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
Répondre
Re : Récupérer l'illustration du vin
AdministrateurVoir son 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
Répondre
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
Répondre
Re : Récupérer l'illustration du vin
AdministrateurVoir son 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 Blog officiel d'Open Cellar - Tous droits réservés - Dernière mise à jour : janvier 2014 | twitter | facebook