2015-02-14 7 views
2

Я пытаюсь загрузить 50-мегабайтный файл в папку на моем аккаунте Google Диска.Загрузить файл на диск Google с помощью cron execute PHP

Алгоритм:

  1. Cron запускает PHP - PHP MySQL дамп базы данных и сжатие и шифрование файлов;
  2. Тот же скрипт PHP запускает другой скрипт и поставляет имя файла. Этот скрипт должен использовать Google Drive API для загрузки файла в мою учетную запись Google Диска.

Затем файл должен быть доступен на моем Google Диске blahblahblah/backup.sql.tar.gz

Но это не так. И я уверен, что все не удается с частичной загрузки, без вывода.

Я даже не знаю, как, черт возьми, я должен получить секрет клиента? Я пытался Dev консоль, но я только получаю:

CLIENT ID 
CERTIFICATE FINGERPRINTS 
API KEY 

я пытался до сих пор:

https://developers.google.com/drive/web/quickstart/quickstart-php https://github.com/google/google-api-php-client/tree/master/examples

А также это:

<?PHP 
/** 
* Insert new file. 
* 
* @param Google_DriveService $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_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_DriveFile(); 
    $file->setTitle($title); 
    $file->setDescription($description); 
    $file->setMimeType($mimeType); 

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

    try { 
    $data = file_get_contents($filename); 

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

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

Я использую последнюю версию API Google PHP-клиентская библиотека.

Могу ли я получить простой PHP-код, который будет работать из коробки, используя API и загружая файл?

Действия пользователя не задействованы. Мне не нужно авторизовать пользователя. Все должно быть сделано на стороне сервера.

+0

Вы говорите: «Повторяю, никаких действий, связанных с USER, нет». но, конечно же, в какой-то момент пользователь (даже если это вы) должен разрешить приложение (даже если это ваше приложение) получить доступ к вашему Google Диску. Это фундаментальная часть OAuth. См. Https://developers.google.com/api-client-library/php/guide/aaa_oauth2_web. В коде, который вы опубликовали, как вы создали объект службы $? При отладке OAuth/Drive всегда стоит сбросить пакеты http, чтобы увидеть, что происходит с проводом, и любые ответы. – pinoyyid

+0

Поскольку это резервная копия MySQL, и это делается на стороне сервера полностью, я хочу сделать PHP, который будет использовать API Google для загрузки файла на диск Google. Это должно выполняться cron каждые 12 часов, поэтому, если, например, что-то происходит с моим сервером, резервная копия будет находиться на диске Google, готовом для развертывания на новом месте. – xZero

+0

Я знаю, что вы хотите сделать.Мой вопрос: как вы решили разрешить свое приложение, чтобы иметь возможность доступа к вашему Google Диску? Я подозреваю, что вы не правильно поняли, как работает OAuth. – pinoyyid

ответ

1

Чтобы получить идентификатор клиента и открытый ключ, вам необходимо зарегистрировать свое приложение: Google Developers Console.

Для подробной документации Пожалуйста, посетите: Google Drive realtime API quickstart.

+0

Не совсем .... Я заканчиваю такими же бесполезными данными: только идентификатор клиента и ключ API, и я не знаю, как его использовать. – xZero

+1

Вы пытались настроить образец, как показывает учебник? У меня нет приложений, зарегистрированных с ними. Я голосую за ваш вопрос, так что кто-то, кто сталкивался с приложением Google, может помочь. – Shuhail

+0

Просто обновление Я получил некоторый прогресс, загрузил успех, но: - Двоичный файл поврежден из-за строки «MIME TYPE» в начале файла. (Вставка с помощью Google Диска) - Я не могу указать имя файла, но он сохраняется как «Без названия». – xZero

1

Клиентский секрет предназначен для веб-приложений, для которых требуется авторизация нескольким пользователям или отдельным пользователям. Вашему делу нужна учетная запись службы, в которой одна учетная запись обрабатывает все и требует только определенных параметров, которые могут быть закодированы в ваших сценариях.

$json = json_decode(file_get_contents("xxxxxx.json"), true); 

$CLIENT_ID = $json['client_id']; 
$CLIENT_EMAIL = $json['client_email']; 
$REDIRECT_URI = ""; 
$private_key = file_get_contents('xxxxxxxx.p12'); 
$credentials = new Google_Auth_AssertionCredentials(
    $CLIENT_SECRET, 
    $SCOPES, 
    $private_key 

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

Заполните крестики с вашими файлами, убедитесь, чтобы загрузить .json и .p12 поэтому сценарий может прочитать его. Надеюсь, это помогло.

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