Daniel Steiner
Daniel Steiner

Reputation: 520

YouTube API with Google PHP SDK - Response as JSON

For my latest Project I would need the result from a YouTube Search as a JSON string. I have tried to modify the code of the official Samples from here so that the whole response array is returned as JSON but the JSON output only includes one result and only two tags of that result

{"etag":"\"bvxF-DWHx1toJotsdJBeCm43SLs/Ti9GPWl-tTk2fzo_W4M7px11bPY\"","eventId":null,"kind":"youtube#searchListResponse","nextPageToken":"CBkQAA","prevPageToken":null,"visitorId":null}

And thats my code:

<?php
header('Cache-Control: no-cache, must-revalidate');
header('Content-type: application/json');
if ($_GET['q'] && $_GET['maxResults']) {
require_once 'Google/Client.php';
require_once 'Google/Service/YouTube.php';
$DEVELOPER_KEY = 'not gonna reveal my key ;) ';
$client = new Google_Client();
$client->setDeveloperKey($DEVELOPER_KEY);
$youtube = new Google_Service_YouTube($client);
try 
{
    $searchResponse = $youtube->search->listSearch('id,snippet', array(
        'q' => $_GET['q'],
        'maxResults' => $_GET['maxResults'],
    ));
    print_r(json_encode($searchResponse));
} 
catch (Google_ServiceException $e) {
    $htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>',
    htmlspecialchars($e->getMessage()));
} 
catch (Google_Exception $e) {
    $htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>',
    htmlspecialchars($e->getMessage()));
    }
}
?>

In the end I would love to have something like

    {
 "kind": "youtube#searchListResponse",
 "etag": "\"bvxF-DWHx1toJotsdJBeCm43SLs/vL7IQMNuL84nujDqKdOtwOPpBkc\"",
 "nextPageToken": "CAIQAA",
 "pageInfo": {
  "totalResults": 203164,
  "resultsPerPage": 2
 },
 "items": [
  {
   "kind": "youtube#searchResult",
   "etag": "\"bvxF-DWHx1toJotsdJBeCm43SLs/m4lAJ1Qx-hvZpw4Uc9qSo_rqy5o\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "UyI4v5sxT54"
   },
   "snippet": {
    "publishedAt": "2014-04-14T10:21:21.000Z",
    "channelId": "UCpDJl2EmP7Oh90Vylx0dZtA",
    "title": "BORGORE & SIKDOPE - Unicorn Zombie Apocalypse (Original Mix)",
    "description": "BORGORE teams up with SIKDOPE to bring you the main stage rocker that is Unicorn Zombie Apocalypse. Grab your copy NOW : http://btprt.dj/1hFUQhP ...",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/UyI4v5sxT54/default.jpg"
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/UyI4v5sxT54/mqdefault.jpg"
     },
     "high": {
      "url": "https://i.ytimg.com/vi/UyI4v5sxT54/hqdefault.jpg"
     }
    },
    "channelTitle": "SpinninRec",
    "liveBroadcastContent": "none"
   }
  },
  {
   "kind": "youtube#searchResult",
   "etag": "\"bvxF-DWHx1toJotsdJBeCm43SLs/4LQaEODdVEec6exNA21SnYJAeOU\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "CPXv392pc9k"
   },
   "snippet": {
    "publishedAt": "2014-05-16T23:00:00.000Z",
    "channelId": "UCpDJl2EmP7Oh90Vylx0dZtA",
    "title": "Borgore & Sikdope - Unicorn Zombie Apocalypse (Official Music Video)",
    "description": "Borgore & Sikdope present Unicorn Zombie Apocalypse (Official Music Video). Download your copy on Beatport HERE : http://btprt.dj/1hFUQhP English ...",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/CPXv392pc9k/default.jpg"
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/CPXv392pc9k/mqdefault.jpg"
     },
     "high": {
      "url": "https://i.ytimg.com/vi/CPXv392pc9k/hqdefault.jpg"
     }
    },
    "channelTitle": "SpinninRec",
    "liveBroadcastContent": "none"
   }
  }
 ]
}

Upvotes: 3

Views: 1161

Answers (1)

internet-nico
internet-nico

Reputation: 1687

The problem is that you are attempting to JSON-encode the Response Object that you received while using the php client library. It is NOT the raw JSON object that the Youtube API returned (and what you want to encode).

If you var_dump($searchResponse); you'll see it says Google_Service_YouTube_SearchListResponse Object

You want to json_encode the "simpleObject" that you get by calling toSimpleObject on the model like:

json_encode($searchResponse->toSimpleObject());

Upvotes: 5

Related Questions