mardi 28 janvier 2020

Multiple Request with Guzzle in Laravel

I've restapi with pagination and I need to combine the result for sitemap.

Json Results

    {
        ...
        "info": {
            "playlistId":"PLxxxxx",
            "totalResults": 242,
            "maxResults": 50,
            "nextToken": "CCAAQ"
        },
        "results": [
            {
                "id": 1,
                "title": "How to make a Cookies",
            }
            ...
        ]
    }

I've trying with below code, but still no luck. lot of duplicate video. I don't know what's wrong with this. I've try use promise too, but the results still duplicated.

            ...

            $requests = [];
            foreach ($playlists['playlistId'] as $playlistId) {
                if (!empty($playlistId)) {
                    $result = $client->request('GET', route('api.playlist', ['playlistId' => $playlistId]));
                    $guzzle = \GuzzleHttp\json_decode($result->getBody(), true);
                    ...
                    $pages = ceil($total_posts / $max_per_page);

                    for ($i = 0; $i <= $pages; $i++) {
                        $pageToken = Helper::youtubeToken();

                        $requests[] = new GuzzleRequest('GET', route('api.playlist', ['playlistId' => $playlistId, 'page' => $pageToken[$i]]));

                    }
                }
            }

            $responses = Pool::batch($client, $requests, array(
                'concurrency' => 1000,
            ));

            foreach ($responses as $response) {
                //do something
                $respon = \GuzzleHttp\json_decode($response->getBody(), true);

                if ($respon['info']['playlistId']) {
                    $filename = $respon['info']['playlistId'];
                    $nextToken = $respon['info']['nextToken'];
                    $sitemap = Sitemap::create();

                    foreach ($respon['results'] as $hasil) {
                        $slug = ApiController::make_slug($hasil['title']);
                        if (!empty($nextToken)) {
                            $sitemap->add();
                            ...                               

                        }

                    }
                    $sitemap->writeToFile("$playlistPath/$filename.xml");

                }

            }

I need to get all of the results list and filtered by playlistId.

Thanks in advance.



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire