Voici mon problème:
Spotify ne retourne pas toutes les pistes sauvegardées par l'utilisateur. Il y a une limite pour le nombre de pistes retournées - 50 (ici API).Demande multiple en guzzle
J'ai trouvé une solution qui retourne toutes les pistes enregistrées de l'utilisateur (boucle utilisée). Il fait beaucoup de demandes (dans mon cas était ~ 17 fois - 814 pistes) Mais ma page se charge de 6 secondes à 8 secondes.
Je l'ai lu Concurrent requests mais je ne sais pas comment utiliser cela et demandes async dans ma situation parce que dans mon cas, aucun montant connu des demandes. La boucle se termine uniquement lorsque le nombre de pistes retournées (items) est 0. Pouvez-vous m'aider avec mon problème?
<?php
namespace AppBundle\Service;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use HWI\Bundle\OAuthBundle\Security\Core\Authentication\Token\OAuthToken;
use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class SpotifyRequester
{
protected $client;
protected $tokenStorage;
public function __construct(TokenStorageInterface $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
$this->client = new Client();
}
public function getSavedTracks()
{
$token = $this->getToken(); // true token
$offset = 0;
do {
$response = $this->client->request('GET',
'https://api.spotify.com/v1/me/tracks?limit=50&offset=' . $offset, [
'headers' => [
'Authorization:' => 'Bearer ' . $token,
'Accept:' => 'application/json',
'Content-Type:' => 'application/json',
]
]);
// Response from current request
$content = json_decode($response->getBody()->getContents(), true);
$offset += count($content['items']);
}
while (count($content['items']) != 0);
// Count of tracks
return $offset;
}
}
Comme un travail autour de vous pourrait utiliser (si Spotify n'a pas de points d'extrémité pour exposer les compteurs) une requête initiale (peut-être une limite à un enregistrement?) Cela retournera le nombre total dans le json. à partir de là, vous pouvez calculer le nombre de demandes nécessaires en fonction du nombre total et du nombre de pages nécessaires pour tout afficher. –