HuntAPI

Go

Installez le SDK Go de HuntAPI et faites votre premier appel d'API.

Le SDK Go officiel de HuntAPI, avec une méthode typée par endpoint et un request() générique pour le reste.

Prérequis

  • Go 1.22+

Installation

go get github.com/huntapi/huntapi-go

Obtenir votre clé API

Copiez votre clé API depuis le tableau de bord HuntAPI et placez-la dans la variable d'environnement HUNTAPI_API_KEY, que le SDK lit par défaut. Ne la versionnez pas.

Démarrage rapide

package main

import (
	"context"
	"fmt"
	"log"

	"github.com/huntapi/huntapi-go"
)

func main() {
	client, err := huntapi.NewClient("", nil) // reads HUNTAPI_API_KEY
	if err != nil {
		log.Fatal(err)
	}
	ctx := context.Background()
	response, err := client.MediaMetadata(ctx, &huntapi.MediaMetadataParams{Query: "https://www.youtube.com/watch?v=Z5YP8kznWZs"})
	if err != nil {
		log.Fatal(err)
	}
	data, err := response.Map()
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(data)
}

Jobs asynchrones

Les endpoints de téléchargement sont asynchrones : ils renvoient un job_id, et un job peut durer jusqu'à 12 heures. Le SDK peut attendre sa fin.

submitted, err := client.VideoDownload(ctx, &huntapi.VideoDownloadParams{Query: "https://www.youtube.com/watch?v=Z5YP8kznWZs", VideoQuality: huntapi.String("720p")})
if err != nil {
	log.Fatal(err)
}
var accepted struct{ JobID string `json:"job_id"` }
if err := submitted.Decode(&accepted); err != nil {
	log.Fatal(err)
}
job, err := client.WaitForJob(ctx, accepted.JobID, &huntapi.WaitForJobOptions{
	OnProgress: func(job map[string]any) { fmt.Println(job["status"], job["progress"]) },
})

Erreurs

Une réponse hors 2xx lève une erreur d'API avec son statut et son message. Consultez les codes de statut pour la liste complète.

response, err := client.MediaMetadata(ctx, &huntapi.MediaMetadataParams{Query: "https://www.youtube.com/watch?v=Z5YP8kznWZs"})
if apiError, ok := huntapi.IsAPIError(err); ok {
	log.Printf("HTTP %d: %s", apiError.StatusCode, apiError.Message)
}

Nouvelles tentatives

Les requêtes sont retentées jusqu'à 3 fois après une erreur réseau, un 408, 500, 502, 503 ou 504, ou une limite de débit du forfait. Les erreurs de quota par clé et les expirations côté client ne sont pas retentées. Le délai commence à 1 seconde et augmente de 1,5× à chaque tentative, et un en-tête Retry-After a la priorité.

client, err := huntapi.NewClient("", &huntapi.ClientOptions{
	MaxRetries: 5,                      // negative disables retries
	RetryDelay: 500 * time.Millisecond,
})

// or for one request
response, err := client.MediaMetadata(ctx, &huntapi.MediaMetadataParams{Query: "https://www.youtube.com/watch?v=Z5YP8kznWZs"}, huntapi.WithMaxRetries(0))

Requêtes par lots

Lancez plusieurs appels à la fois, 10 par défaut. Un échec n'arrête pas les autres.

inputs := []string{"https://www.youtube.com/watch?v=Z5YP8kznWZs", "https://www.youtube.com/watch?v=jNQXAC9IVRw"}
results := huntapi.Batch(ctx, inputs, 5, func(ctx context.Context, value string) (*huntapi.Response, error) {
	return client.MediaMetadata(ctx, &huntapi.MediaMetadataParams{Query: value})
})
for _, result := range results {
	if result.Err != nil {
		log.Printf("%s: %v", inputs[result.Index], result.Err)
		continue
	}
	fmt.Println(string(result.Value.Body))
}

N'importe quel endpoint

request() atteint n'importe quel chemin, y compris les endpoints sortis après votre version du SDK.

response, err := client.Request(ctx, "GET", "/v1/usage", nil)

Erreurs fréquentes

  • Mettre la clé API dans le code front-end. N'importe qui pourrait la lire. Appelez l'API depuis votre serveur.
  • Considérer tout 401 comme une mauvaise clé. Un 401 peut aussi signaler une limite de débit : lisez le message. Le SDK retente pour vous les limites du forfait.
  • Retenter un 402. Il n'y a plus de crédits ni de quota, donc une nouvelle tentative ne peut pas réussir. Consultez Crédits.
  • Attendre les requêtes longues. Au-delà de 60 secondes, utilisez le mode asynchrone comme ci-dessus plutôt que d'augmenter votre délai. Voir Timeout.

Liens

Sur cette page