PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WEBDEV 2024 → DALL-E3
DALL-E3
Started by BENOIT MIRAMBEAU, Nov., 09 2024 3:22 PM - 5 replies
Registered member
11 messages
Posted on November, 09 2024 - 3:22 PM
Bonjour,
Est ce que l'un d'entre vous a codé l'utilisation de l'API Dall-E3 ?
Le code ci-dessous ne fonctionne pas, je vous remercie pour votre aide :
// Déclaration des variables
API_KEY est une chaîne = "xxxx"
URL_API est une chaîne = "https://api.dalle3.com/v1/images/generate"
prompt est une chaîne = "une image de chaton jouant avec une pelote de laine"

// Création de la requête JSON
requêteJSON est une chaîne = [
"{",
" 'prompt': '" + prompt + "',",
" 'n': 1,", // Nombre d'images à générer
" 'size': '1024x1024'", // Taille de l'image
"}"
]//.Concat(RetourChariot)

// Création de la requête HTTP
maRequête est un httpRequête
maRequête..URL = URL_API
maRequête..Méthode = httpPost
maRequête..ContentType = "application/json"
maRequête..Entête["Authorization"] = "Bearer " + API_KEY
maRequête..Contenu = requêteJSON

// Envoi de la requête et réception de la réponse
maRéponse est un httpRéponse = HTTPEnvoie(maRequête)


SI maRéponse..CodeEtat = 200 ALORS
// Traitement de la réponse en cas de succès
réponseJSON est une chaîne = maRéponse..Contenu
résultat est un tableau de chaîne = Désérialise(réponseJSON, "data",psdJSON)
ZTR_SansNom1=résultat
POUR TOUTE image DE résultat
imageID est une chaîne = image..URL
imageContenu est une chaîne = HTTPEntete(imageID)
dSauveImagePNG("image_" + Numéro(image) + ".png", imageContenu)
Info("Image " + Numéro(image) + " sauvegardée.")
FIN
SINON
// En cas d'erreur
Info("Erreur: " + maRéponse..CodeEtat + " - " + maRéponse..Contenu)
FIN

--
Merci pour votre aide
Benoît
Registered member
860 messages
Posted on November, 09 2024 - 8:58 PM
Bonjour, le domaine dalle3.com que vous utilisez dans votre code ne peut pas être le bon car ce domaine n'est pas actif et est en vente.

D'autre part, l'API permettant de générer les images est désormais intégrée à OpenAI (ChatGPT).

Rubén

--
Rubén Sánchez Peña

https://play.google.com/store/apps/details…
https://www.linkedin.com/in/rub%C3%A9n-s%C3%A1nchez-pe%C3%B1a-7a868212/
Registered member
135 messages
Posted on November, 11 2024 - 7:22 AM
Bonjour

Je vois votre problème, j'ai deux solutions pour vous

1. Soit vous récupérer le code source de la page ensuite vous sauvegardez dans un dossier texte .txt enfin vous extrairez les balises dont vous voudrez avoir, c'est plus lent mais le résultat est garanti
2. Soit vous essayiez de vérifier votre code httpPost | httpRequête dont ce ne serait pas garantie parce que certain site sont cryptés par beaucoup de lettre

Code exemple d'extraction :
sString = "<div class=" + Caract(34) + "w-full" + Caract(34) + "><div class=" + Caract(34) + "mb-0" + Caract(34) + "><h3 class=" + Caract(34) + "mb-0 inline-block" + Caract(34) + " style=" + Caract(34) + "font-size: 19px;" + Caract(34) + ">"
TableauAjouteLigne(tbString, "") // EDD (11/24) Extraire EOT
TableauAjouteLigne(tbString, "") // EDD (11/24) Extraire Technologie
tbString[1] = ExtraitChaîne(SAI_Texte_Html, rangPremier, sString)
TANTQUE tbString[1] <> EOT
// EDD (11/24) : Information
tbString[1] = ExtraitChaîne(SAI_Texte_Html, rangSuivant, sString)
FIN

NB : Je vous conseil la solution numéro 1, vous perdrez un peu de temps de programmation mais le résultat est garanti

Merci

Cordialement
M.RATSIMANDRESY
Niry Aina Eddy
Registered member
11 messages
Posted on November, 12 2024 - 4:29 PM
Merci !
J'ai finalement rectifié l'ensemble du code, le voici :
// Déclaration des variables
API_KEY est une chaîne = OpenAI.CléSecrèteDalle3
URL_API est une chaîne = "https://api.openai.com/v1/images/generations"
//prompt est une chaîne = "une image de chaton jouant avec une pelote de laine"
prompt est une chaîne = SAI_Prompt_resume

// Définition des structures pour stocker la réponse
stImage est une Structure
url est une chaîne
FIN

stRéponse est une Structure
data est un tableau de stImage
FIN

// Création d'une variable JSON en WinDev
oRequete est un objet JSON
oRequete["prompt"] = "Avec le style" + StyleImage + ", propose moi une image qui illustre le prompt suivant : " + prompt
oRequete["n"] = 4
oRequete["size"] = "1024x1024"

// Conversion de l'objet JSON en texte JSON
sRequeteJSON est une chaîne = JSONVersChaîne(oRequete)

// Création de la requête HTTP
maRequête est un httpRequête
maRequête..URL = URL_API
maRequête..Méthode = httpPost
maRequête..ContentType = "application/json"
maRequête..Entête["Authorization"] = "Bearer " + API_KEY
maRequête..Contenu = sRequeteJSON
maRequête..Timeout = 20000 // Ajout d'un délai de timeout de 20 secondes

Trace("Envoi de la requête à l'API OpenAI DALL-E 3")

// Envoi de la requête et réception de la réponse
maRéponse est un httpRéponse = HTTPEnvoie(maRequête)
Trace("Réponse reçue, statut: " + maRéponse..StatusCode)

SI maRéponse..StatusCode = 200 ALORS
Trace("Requête POST réussie")
réponseJSON est une chaîne = maRéponse..Contenu
Trace("Contenu de la réponse: " + réponseJSON)

// Désérialisation de la réponse JSON dans la structure
stRéponse est une stRéponse
Désérialise(stRéponse, réponseJSON, psdJSON)
Trace("Désérialisation réussie")

// Accès aux données des images générées
POUR i = 1 À stRéponse.data..Occurrence
urlImage est une chaîne = stRéponse.data[i].url
Trace("URL de l'image : " + urlImage)

// Création d'une nouvelle requête pour télécharger l'image
imageRequête est un httpRequête
imageRequête..URL = urlImage
imageRequête..Méthode = httpGet
imageRequête..Timeout = 20000 // Ajout d'un délai de timeout de 20 secondes

imageRéponse est un httpRéponse = HTTPEnvoie(imageRequête)
Trace("Réponse reçue pour l'image, statut: " + imageRéponse..StatusCode)

SI imageRéponse..StatusCode = 200 ALORS
imageContenu est un Buffer = imageRéponse..Contenu
Trace("Contenu de l'image reçu")
NomFichierImageAI est chaîne = "image_" + DateHeureSys() + "_" + i + ".png"
// Sauvegarder le contenu de l'image
fichier est un entier = fOuvre(gsPDFServeur + NomFichierImageAI, foCréationSiInexistant)

Trace("Fichier ouvert: " + fichier)
SI fichier <> -1 ALORS
fEcrit(fichier, imageContenu)
fFerme(fichier)
// Définir la source de l'image dans la page Web
Info("Image " + i + " sauvegardée.")
SELON i
CAS 1
IMG_DALL_E3..Valeur = gsPDFServeur + NomFichierImageAI
CAS 2
IMG_DALL_E4..Valeur = gsPDFServeur + NomFichierImageAI
CAS 3
IMG_DALL_E5..Valeur = gsPDFServeur + NomFichierImageAI
CAS 4
IMG_DALL_E6..Valeur = gsPDFServeur + NomFichierImageAI
AUTRE CAS

FIN

SINON
Info("Erreur lors de l'ouverture du fichier.")
FIN
SINON
Info("Erreur de téléchargement de l'image: " + imageRéponse..StatusCode)
FIN
FIN
SINON

//ZTR_SansNom1="Erreur: " + maRéponse..StatusCode + " - " + maRéponse..Contenu
Info("Erreur: " + maRéponse..StatusCode + " - " + maRéponse..Contenu)
FIN

--
Merci pour votre aide
Benoît
Registered member
11 messages
Posted on November, 12 2024 - 4:33 PM
Posté le 12 novembre 2024 - 16:29
Merci !

J'ai finalement rectifié l'ensemble du code, le voici :

// Déclaration des variables
API_KEY est une chaîne = OpenAI.CléSecrèteDalle3
URL_API est une chaîne = "https://api.openai.com/v1/images/generations"
//prompt est une chaîne = "une image de chaton jouant avec une pelote de laine"
prompt est une chaîne = SAI_Prompt_resume

// Définition des structures pour stocker la réponse
stImage est une Structure
url est une chaîne
FIN

stRéponse est une Structure
data est un tableau de stImage
FIN

// Création d'une variable JSON en WinDev
oRequete est un objet JSON
oRequete["prompt"] = "Avec le style" + StyleImage + ", propose moi une image qui illustre le prompt suivant : " + prompt
oRequete["n"] = 4
oRequete["size"] = "1024x1024"

// Conversion de l'objet JSON en texte JSON
sRequeteJSON est une chaîne = JSONVersChaîne(oRequete)

// Création de la requête HTTP
maRequête est un httpRequête
maRequête..URL = URL_API
maRequête..Méthode = httpPost
maRequête..ContentType = "application/json"
maRequête..Entête["Authorization"] = "Bearer " + API_KEY
maRequête..Contenu = sRequeteJSON
maRequête..Timeout = 20000 // Ajout d'un délai de timeout de 20 secondes

Trace("Envoi de la requête à l'API OpenAI DALL-E 3")

// Envoi de la requête et réception de la réponse
maRéponse est un httpRéponse = HTTPEnvoie(maRequête)
Trace("Réponse reçue, statut: " + maRéponse..StatusCode)

SI maRéponse..StatusCode = 200 ALORS
Trace("Requête POST réussie")
réponseJSON est une chaîne = maRéponse..Contenu
Trace("Contenu de la réponse: " + réponseJSON)

// Désérialisation de la réponse JSON dans la structure
stRéponse est une stRéponse
Désérialise(stRéponse, réponseJSON, psdJSON)
Trace("Désérialisation réussie")

// Accès aux données des images générées
POUR i = 1 À stRéponse.data..Occurrence
urlImage est une chaîne = stRéponse.data[i].url
Trace("URL de l'image : " + urlImage)

// Création d'une nouvelle requête pour télécharger l'image
imageRequête est un httpRequête
imageRequête..URL = urlImage
imageRequête..Méthode = httpGet
imageRequête..Timeout = 20000 // Ajout d'un délai de timeout de 20 secondes

imageRéponse est un httpRéponse = HTTPEnvoie(imageRequête)
Trace("Réponse reçue pour l'image, statut: " + imageRéponse..StatusCode)

SI imageRéponse..StatusCode = 200 ALORS
imageContenu est un Buffer = imageRéponse..Contenu
Trace("Contenu de l'image reçu")
NomFichierImageAI est chaîne = "image_" + DateHeureSys() + "_" + i + ".png"
// Sauvegarder le contenu de l'image
fichier est un entier = fOuvre(gsPDFServeur + NomFichierImageAI, foCréationSiInexistant)

Trace("Fichier ouvert: " + fichier)
SI fichier <> -1 ALORS
fEcrit(fichier, imageContenu)
fFerme(fichier)
// Définir la source de l'image dans la page Web
Info("Image " + i + " sauvegardée.")
SELON i
CAS 1
IMG_DALL_E3..Valeur = gsPDFServeur + NomFichierImageAI
CAS 2
IMG_DALL_E4..Valeur = gsPDFServeur + NomFichierImageAI
CAS 3
IMG_DALL_E5..Valeur = gsPDFServeur + NomFichierImageAI
CAS 4
IMG_DALL_E6..Valeur = gsPDFServeur + NomFichierImageAI
AUTRE CAS

FIN

SINON
Info("Erreur lors de l'ouverture du fichier.")
FIN
SINON
Info("Erreur de téléchargement de l'image: " + imageRéponse..StatusCode)
FIN
FIN
SINON

//ZTR_SansNom1="Erreur: " + maRéponse..StatusCode + " - " + maRéponse..Contenu
Info("Erreur: " + maRéponse..StatusCode + " - " + maRéponse..Contenu)
FIN

--
Merci pour votre aide
Benoît
Registered member
126 messages
Posted on December, 02 2024 - 9:43 AM
Bonjour BENOIT
merci pour ce code.
Je ne sais pas pour l'instant si j'en aurai besoin mais je voulais savoir quel compte il faut avoir chez openAI pour utiliser cette génération d'image.
Est ce que le crédit que j'utilise pour générer du texte suffirait ?

Je trouve leur interface de gestion de compte vraiment très obscure.