2016-03-07 17 views
5

Google's pageに記載されている例に基づいて、GoogleクライアントSDKをComposer経由でインストールしました。そして、Googleドライブにファイルをアップロードするには、次のコードを使用しようとしている:Googleドライブクライアントを呼び出す未定義のメソッド

<?php 
header('Content-Type: text/plain'); 
require_once('vendor/autoload.php'); 

/** 
* Insert new file. 
* 
* @param Google_Service_Drive $service Drive API service instance. 
* @param string $title Title of the file to insert, including the extension. 
* @param string $description Description of the file to insert. 
* @param string $parentId Parent folder's ID. 
* @param string $mimeType MIME type of the file to insert. 
* @param string $filename Filename of the file to insert. 
* @return Google_Service_Drive_DriveFile The file that was inserted. NULL is 
*  returned if an API error occurred. 
*/ 
function insertFile($service, $title, $description, $parentId, $mimeType, $filename) { 
    $file = new Google_Service_Drive_DriveFile(); 
    $file->setTitle($title); 
    $file->setDescription($description); 
    $file->setMimeType($mimeType); 

    // Set the parent folder. 
    if ($parentId != null) { 
    $parent = new Google_Service_Drive_ParentReference(); 
    $parent->setId($parentId); 
    $file->setParents(array($parent)); 
    } 

    try { 
    $data = file_get_contents($filename); 

    $createdFile = $service->files->insert($file, array(
     'data' => $data, 
     'mimeType' => $mimeType, 
    )); 

    // Uncomment the following line to print the File ID 
    print 'File ID: %s' % $createdFile->getId(); 

    return $createdFile; 
    } catch (Exception $e) { 
    print "An error occurred: " . $e->getMessage(); 
    } 
} 

$client_email = '[email protected]'; 
$private_key = file_get_contents('key.p12'); 
$scopes = array(
    'https://www.googleapis.com/auth/drive.file', 
    //'https://www.googleapis.com/auth/drive.appdata', 
    //'https://www.googleapis.com/auth/drive.apps.readonly' 
); 
$credentials = new Google_Auth_AssertionCredentials(
    $client_email, 
    $scopes, 
    $private_key 
); 

$client = new Google_Client(); 
$client->setAssertionCredentials($credentials); 
if ($client->getAuth()->isAccessTokenExpired()) { 
    $client->getAuth()->refreshTokenWithAssertion(); 
} 

$service = new Google_Service_Drive($client); 
// https://developers.google.com/drive/v2/reference/files/insert#examples 
$response = insertFile($service, 'Test Image for OCR', 'Image for OCR', null, 'image/jpeg', 'test1.jpg'); 
if($response === NULL) { 
    echo 'Upload failed' . PHP_EOL; 
} else { 
    var_dump($response); 
} 
?> 

insertFile()機能は、例えばページからコピーしたが、私は、スクリプトを実行すると、それが表示されます。

Fatal error: Call to undefined method Google_Service_Drive_DriveFile::setTitle()

ですセットアップ中に私が見逃したことは何ですか?

答えて

7

代わりの$file->setTitle($title); 使用$file->setName($filename);

編集2

Insert()方法は、だから、基本的に新しいコードは(テストしていないことになるcreate()

Use create() instead of insert()

によって置き換えられているを使用して)、

$createdFile = $service->files->create($file, array(
     'data' => $data, 
     'mimeType' => $mimeType, 
    )); 
+0

例が更新されていない、またはライブラリが更新されているとしますか?更新されたサンプルはどこにありますか? '$ createdFile = $ service-> files-> insert()'の行に、未定義のメソッドGoogle_Service_Drive_Files_Resource :: insert()を呼び出します。 – Raptor

+1

Insert()メソッドは次のように置き換えられます。 create()、ここで見つけることができますhttps://developers.google.com/drive/v3/reference/files/create#request –

+0

作品は魅力的です。ありがとう。 – Raptor

関連する問題