Go Simple Exemple: Générez des histoires audio avec Google Gemini, TTS et CloudFlare R2

DEV - 27/02
Je travaille actuellement sur un projet parallèle sur l'apprentissage des langues. Les principales caractéristiques incluent la génération ...

Je travaille actuellement sur un projet parallèle sur l'apprentissage des langues. Les principales fonctionnalités incluent la génération de contenu avec l'IA et la conversion du texte en fichiers audio. Pour stocker les fichiers audio, j'ai également besoin de stockage cloud.

Le coût était ma principale priorité car je pensais que le changement entre les plates-formes cloud ne serait pas trop difficile.

En fin de compte, j'ai choisi Google Gemini, Google TTS et CloudFlare R2. Ils fournissent une documentation API et des exemples, mais j'ai trouvé certaines parties manquant, j'ai donc décidé d'écrire un article à ce sujet. J'ai utilisé Go, et cela ne couvre que l'utilisation de base.

Pour Google Gemini et TTS, j'utilise l'API RESTFul. Bien qu'ils fournissent une bibliothèque, j'ai trouvé en utilisant l'API RESTful plus pratique que la configuration de la bibliothèque.

  1. Google Gemini - Envoyez une invite et recevez une réponse.
  2. Google TTS - Envoyez du texte et recevez un fichier audio.
  3. CloudFlare R2 - Stockez un fichier audio au format binaire dans CloudFlare.
  4. Code final

1.Google Gemini

Package API Import ("Bytes" "Encoding / JSON" "fmt" "io" "net / http" "github.com/spf13/viper") Type Part Struct {Text String `JSON:" Text "`} Type Content Struct struct {candidats [] candidats `JSON:" candidats "`} func invite (invite string) (* PROMPTRESULT, ERROR) {// J'utilise Viper pour gérer les variables d'environnement, vous pouvez le remplacer par votre clé API. URL: = fmt.sprintf ("https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:GenerateContent?key=%S", viper.get ("google_cloud_api_key") // Dans cet exemple, il ne fait que JSON.MARSHAL (MAP [String] Interface {} {"Content": [] MAP [String] Interface {} {{"Parts": [] MAP [String] Interface {} {{{"Text": Invite,}},}},}) if Err! = Nil {return Nil, err} req, err: err: = HTTP. url, bytes.newbuffer (data)) si err! = nil {return nil, err} req.header.add ("contenu-type", "application / json") // demande l'API res, err: = http.defaultClient.do (req) si err! = nil {return nil, err} redres rés. io.readall (res.body) if err! = nil {return nil, err} var promptresult promptreult // analyse le résultat err = json.unmarshal (resbody, & promptreult
Entrez le mode de sortie en mode plein écran
Package principal...
[Courte citation de 8% de l'article original]
Loading...