Avatar of Craig Lambie
Craig LambieFlag for Australia

asked on 

PHP Class new item, cannot call it correctly?

Hi Experts,

I am banging my head against the wall, and I am sure it is due to not knowing PHP as well as I should!
I am trying to call this new class, and keep getting the error "Undefined variable: Google_Playlist" which I can only assume is due to me not calling the class properly.

$youtube = new Google_YoutubeService($client);
//update Playlist Name here
			$ListOb = new $youtube->$Google_Playlist();
			$ListOb.setId($item['id']);
			$InSnip = new $youtube->Google_PlaylistSnippet();
			$InSnip.setChannelId($item['id']);
			$InSnip.setTitle(str_replace("Candidates Federal","Candidates Australian Federal",$title));
			$ListOb.setSnippet($InSnip);

Open in new window


I am using this PHP library to access Youtube API, with some success, but have gotten stuck at needing to create a Google_Playlist class item to do an update.

Google API Library

Your help and thoughts are appreciated greatly.
PHPProgrammingProgramming Theory

Avatar of undefined
Last Comment
Julian Hansen
Avatar of kaufmed
kaufmed
Flag of United States of America image

My guess would be that you need to ditch the new in this line:

$ListOb = new $youtube->$Google_Playlist();

Open in new window

Avatar of Craig Lambie
Craig Lambie
Flag of Australia image

ASKER

sorry, no that doesn't work :(

I really need someone that is a PHP expert to take a look at the library and explain to me the structure a little, enough to get the new class object initiated, then I think I should be able to manage
Where have you initialized this variable $Google_Playlist
I hope for a function Google_Playlist() you have added $ symbol and made it to an variable.
$ListOb = $youtube->Google_Playlist();

use this way.
ASKER CERTIFIED SOLUTION
Avatar of Julian Hansen
Julian Hansen
Flag of South Africa image

Blurred text
THIS SOLUTION IS ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
Avatar of Craig Lambie
Craig Lambie
Flag of Australia image

ASKER

Thanks for helping with the syntax, that have me a new error :(

Can you see what this property should be? I can't see any "required" properties.

Notice: Undefined property: Google_YouTubeService::$Google_Playlist in xxx on line 70 (that is line 2 in your example above julianH)

Thanks.
that is line 2 in your example above julianH)
Doesn't make sense if it is

What the error is saying is that you have tried to do something like

$youtube->Google_Playlist()

Which won't work because as the error says Google_Playlist is not a member of Google_YouTube. It is a separate class

What does line 70 say exactly - can you post a full source listing?
Avatar of Craig Lambie
Craig Lambie
Flag of Australia image

ASKER

<?php
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_YouTubeService.php';
require_once '../StdPHPErrors.php';

// Set your cached access token. Remember to replace $_SESSION with a
// real database or memcached.
session_start();

$client = new Google_Client();
$model = new Google_Model();
$client->setApplicationName('xxxx');

//xxxxxVideo Uploader ID stuff
$client->setClientId('xxxxxx);
$client->setClientSecret('xxxx');
$client->setRedirectUri('http://127.0.0.1:8080/YoutubeAPI/youtube.php');
//$client->setDeveloperKey('xxxxx'); // Server Key
$client->setDeveloperKey('xxxxx'); //Browser Key

/*
//xxx.xxx-xx ID stuff
$client->setClientId('xxxx.apps.googleusercontent.com');
$client->setClientSecret('xxxx-');
$client->setRedirectUri('xxxx');
$client->setDeveloperKey('xxxxx');
*/

$youtube = new Google_YoutubeService($client);
//unset($_SESSION); 

if (isset($_GET['code'])) {
echo1("1");
  $client->authenticate();
  $_SESSION['token'] = $client->getAccessToken();
  $redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
  header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
}

if (isset($_SESSION['token'])) {
//echo1("2");
  $client->setAccessToken($_SESSION['token']);
}
$htmlBody = '';
if ($client->getAccessToken()) {
	//echo1("3");
	
  try {
  
	//echo1("3a");
	$playlists_optParams = array('mine' => 'true','maxResults' => '50');
    $playlistItems = $youtube->playlists->listPlaylists('snippet',$playlists_optParams);

    $htmlBody .= '<table>';
	$htmlBody .= '<tr><th>Title</th><th>Change Req</th><th>Changed?</th></tr>';
    foreach ($playlistItems['items'] as $item) {	
		//print_r1($item);
		//$htmlBody .= "<li>".$item['snippet']['title']." ID:".$item['id']."</li>";
			
		$htmlBody .= '<tr>';
		$title = $item['snippet']['title'];
		$id = $item['id'];
		
		$htmlBody .= '<td>'.$title.'</td>';
		
		if(!strstr($title,"Australian") && strstr($title, "Senate")) {
			$htmlBody .= '<td>Yes</td>';
			
			//update Playlist Name here
			$ListOb = new $youtube->Google_Playlist();
			$ListOb.setId($item['id']);
			$InSnip = new $youtube->Google_PlaylistSnippet();
			$InSnip.setChannelId($item['id']);
			$InSnip.setTitle(str_replace("Candidates Federal","Candidates Australian Federal",$title));
			$ListOb.setSnippet($InSnip);
			
			$playlistUpdate = $youtube->playlists->update('snippet',$ListOb);
			
				//error with update
				$htmlBody .= '<td class="bad">No</td>';
				
				//successful update
				$htmlBody .= '<td class="good">Yes</td>';
		} else {
			$htmlBody .= '<td>No</td>';
		}
		$htmlBody .= '</tr>';
		
    } //end for each item in Playlist
	$htmlBody .= '</table>';
	
  } 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()));
  }

  $_SESSION['token'] = $client->getAccessToken();
} else {
	echo1("4");
	echo1("5");
	$state = mt_rand();
	$client->setState($state);
	$_SESSION['state'] = $state;

	$authUrl = $client->createAuthUrl();
	$htmlBody = <<<END
	<h3>Authorization Required</h3>
	<p>You need to <a href="$authUrl">authorize access</a> before proceeding.<p>
END;

}

?>

<!doctype html>
<html>
  <head>
    <title>My Uploads</title>
	<style>
		table tr td { border: 1pt black solid; }
		.bad {color:red;}
		.good {color:green;}
	</style>
  </head>
  <body>
	<h1>Youtube Project Output:</h1>
    <?php print $htmlBody; 
	
		echo1("<br /> Complete:".date("H:i:s"));	
	?>
  </body>
</html>

Open in new window

Line 70: is
$ListOb = new $youtube->Google_Playlist();

Open in new window

Which is not the same as Line 2 of my post
$ListOb = new Google_Playlist();

Open in new window

Note the absence of the $youtube-> prefix in the second line of code.

Line 70 is trying to instantiate an object (new) using an existing object method call - which is like saying "Please pass the confused"

Line 12 - you have a missing closing apostorphe - although this is probably a result of you removing the name and replacing with xxxx

Other than that it does not appear that you have made any of the recommended changes (Lines 70 to 75).
Avatar of Craig Lambie
Craig Lambie
Flag of Australia image

ASKER

Sorry, I really should look more carefully, and get some rest! Thanks for the help, very useful!
You are welcome - thanks for the points.
PHP
PHP

PHP is a widely-used server-side scripting language especially suited for web development, powering tens of millions of sites from Facebook to personal WordPress blogs. PHP is often paired with the MySQL relational database, but includes support for most other mainstream databases. By utilizing different Server APIs, PHP can work on many different web servers as a server-side scripting language.

125K
Questions
--
Followers
--
Top Experts
Get a personalized solution from industry experts
Ask the experts
Read over 600 more reviews

TRUSTED BY

IBM logoIntel logoMicrosoft logoUbisoft logoSAP logo
Qualcomm logoCitrix Systems logoWorkday logoErnst & Young logo
High performer badgeUsers love us badge
LinkedIn logoFacebook logoX logoInstagram logoTikTok logoYouTube logo