2015-06-26 3 views
1

Я пытаюсь загрузить изображения с API Google (https://github.com/google/google-api-php-client), и я не могу заставить его работать. Всякий раз, когда я запускаю его, он дает мне ошибку 401 Login Required. Вот мой код:Использование Google Диска API с PHP для загрузки изображений?

Функции:

public function __construct() 
{ 
    $this->instance = new \Google_Client(); 

    $this->instance->setApplicationName('DPStatsBot'); 
    $this->instance->setDeveloperKey(Config::getInstance()->getDriveDeveloperKey()); 
    $this->instance->addScope('https://www.googleapis.com/auth/drive'); 

    $this->drive_instance = new \Google_Service_Drive($this->instance); 
} 

public function upload($image, $dpname) 
{ 
    $file = new \Google_Service_Drive_DriveFile(); 
    $file->setTitle($dpname . '_' . RandomString::string()); 

    $upload = $this->drive_instance->files->insert($file, 
    [ 
     'data' => $image, 
     'mimeType' => 'image/jpg', 
     'uploadType' => 'media' 
    ]); 

    return $upload; 
} 

вызовы функций:

$client = new DriveClient(); 

foreach($dm->entities->media as $img) 
{ 
    Printer::write('Recieved image from "' . $dm->sender->screen_name . '", saving to Drive...'); 

    $client->upload($this->getImage($img->media_url), $dm->sender->screen_name); 
} 

Ошибка:

Fatal error: Uncaught exception 'Google_Service_Exception' with message 'Error c 
alling POST https://www.googleapis.com/upload/drive/v2/files?uploadType=multipar 
t&key=APIKEYHERE: (401) Login Required' in C:\Doesp 
lay\DPStatsBot\vendor\google\apiclient\src\Google\Http\REST.php:110 

Ключ API я использую с моей консоли Google Developers под APIs & auth->Credentials и является общедоступным API-интерфейсом.

Любая помощь будет принята с благодарностью!

Благодаря

Edit:DriveClient класс, который содержит функции

+0

читать о oauth2. вы не аутентифицируетесь. и открытые ключи не для этого. –

ответ

3

открытого ключа АФИ для API, общего доступа. Данные, которые не принадлежат пользователю. Вам нужно создать идентификатор клиента из веб-приложения.

Тогда вы сможете аутентифицировать его с помощью Oauth2.

это может вас заинтересовать. drive Quickstart php

Как знать, когда вы должны быть заверены:

  • Public API: Aanalytics metadata API мета данные не принадлежат ни к одному пользователю его любой общедоступные данные могут получить доступ.

  • Данные пользователя API: Google Analytics Real-time Data данные возвращены владельцем пользователя, это не общедоступные данные, доступные для просмотра всеми пользователями. Документация утверждает

Requires authorization

Если документация говорит требует аутентификации, то вы должны быть заверены для доступа к этому вызову.

Родитель Файл

Проверьте переменную $ ParentID, это то, как вы загрузите файл в определенный каталог, если вы не добавите setParents он будет загружен в корневую папку. code ripped from

/** 
* 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(); 
    } 
} 
+0

Спасибо, не видел этого. Как только я последовал и адаптировал это, это сработало! Еще один вопрос: как перенести файл в каталог? – cheese5505

+0

Вы не можете переместить файл из одного каталога в другой прямо сейчас, его ошибка в API. Вы должны загрузить его снова, а затем загрузить его с правильным именем папки родителей. – DaImTo

+0

Как загрузить файл в каталог? Насколько я знаю, мне нужно добавить что-то к полям put. – cheese5505

Смежные вопросы