Suivez et participez au développement du nouvel OpenCellar : PLOC.co
> Open Cellar for Windows
> Help Center
> FAQ
> Download Center
> Enter the Forum
> Version history
> Developers resources
> Open Cellar for Mobile
> Help Center
> FAQ
> Download Center
> Enter the Forum
> Version history
> Open Cellar for Mac/Linux
> Help Center
> FAQ
> Download Center
> Enter the Forum
> Version history
> Developers resources
> My Account
> My Live services
> My pages
> My library
> My published wines
> My labels
> My posted messages
> Write a page
> Open Cellar Forum Index
> Windows Forum
> Mac/Linux Forum
> Mobile Forum
> Search for and import wines
> Search for labels
> Compare prices (Sniffer)
Search:
> Search with all engines
> Search in forums
> Search in personal pages
> Search on open-cellar.com
> Search in wine cards
> Search in labels
> Search in price comparison tool (Sniffer)
Welcome (
connect
-
create an account
)
Home
»
The forum
»
Open Cellar Home Edition (Windows)
Nuage de tags
Open Cellar
Scripts
Etiquette
PPP
Cellar book
Mac
Vista
Synchronisation
Excel export
vinoXml
usb
sniffer
backup
import
printing
chardonnet
palm
statistics
Linux
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
Administrateur
3099 posts
Bonjour,
Voici le script :
// Janvier 2008 if(App.ActiveCellar == null) { MessageBox.Show("Aucune cave ouverte"); return; } App.Animate(AnimationType.Work, true); App.SetCursor(true); // Récupération des fiches vins ouvertes ObjectCollection wines = App.ActiveCellar.GetCollection((ushort)ObjectType.Wine); for (int i = 0; i < wines.Count; i++) { Wine wine = (Wine)wines[i]; if(!wine.HasImage()) { continue; } // Enregistrement de l'image try { System.Drawing.Image img = wine.Image.GetImage(); img.Save(@"c:\vins\" + Utility.GetValidFileName(wine.Name.Trim() + ".jpg")); img.Dispose(); } catch { // ZzzZz } } App.SetCursor(false); App.StopAnimate(); MessageBox.Show("Toutes les taches terminées");
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
Administrateur
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
Administrateur
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
- All rights reserved - Last update: january 2014 |
|
Support Open Cellar
|
Contact
|
About