web-dev-qa-db-ja.com

Google Drive APIv3-ファイルのダウンロードPHP

PHPを使用したGoogleDrive APIv3のダウンロードフローを理解しようとしています。 API v2を使用してファイルをダウンロードするI:

  • ファイルのメタデータを取得しました
  • DownloadUrlパラメーターを使用してファイルへの直接リンクを取得し、それにoAuthトークンを添付して、それにGETリクエストを作成しました。

API v3を使用すると、これは非推奨になっているようです。 docs によると、ドライブサービスで_"alt" => "media"_の配列パラメーターを指定してfiles->get()を呼び出し、ファイル自体を取得します。メタデータではなく。

そして彼らの例は:

_$fileId = '0BwwA4oUTeiV1UVNwOHItT0xfa2M';
$content = $driveService->files->get($fileId, array(
'alt' => 'media' ));
_

私はこれがどのように機能するかを理解するのに苦労していて、コードを調べましたが、それ以上の情報は得られませんでした。

get()を呼び出すと、例では実際に_$content_に何が入りますか?それはファイルの内容ですか(この場合、大きなファイルを処理するときにこれは面倒に思えます-確かにメモリが不足しますか?!)、それとも私がfopenを呼び出すことができるある種のストリーム参照ですか? ?このファイルをディスクに保存するにはどうすればよいですか?

ドキュメントには、そのAPI呼び出しを行ったときに何が起こるかについての詳細は実際には説明されていません。ファイルのダウンロードを実行すると書かれているだけですか?

6
jeonatl3

少し実験してみたところ、わかりました。

ドキュメントで指定されている_alt=>media_パラメータを使用してget()メソッドを呼び出すと、基になるHTTP応答が取得されます。これは Guzzle応答オブジェクト (明らかにクライアントライブラリとして)です。基盤となるトランスポートにGuzzleを使用します)。

そこから、$response->getStatusCode()などのGuzzle応答メソッドを呼び出すか、実際のファイルコンテンツのストリームを取得できます。

彼らがこれをどこかに文書化していたなら、役に立ちました!

編集:他の誰かがファイルを保存する方法で立ち往生している場合の大まかな例は次のとおりです。

_<?php

date_default_timezone_set("Europe/London");
require_once 'vendor/autoload.php';

// I'm using a service account, use whatever Google auth flow for your type of account.

putenv('GOOGLE_APPLICATION_CREDENTIALS=/path/to/service/account/key.json');
$client = new Google_Client();
$client->addScope(Google_Service_Drive::DRIVE);
$client->useApplicationDefaultCredentials();

$service = new Google_Service_Drive($client);

$fileId = "0Bxxxxxxxxxxxxxxxxxxxx"; // Google File ID
$content = $service->files->get($fileId, array("alt" => "media"));

// Open file handle for output.

$outHandle = fopen("/path/to/destination", "w+");

// Until we have reached the EOF, read 1024 bytes at a time and write to the output file handle.

while (!$content->getBody()->eof()) {
        fwrite($outHandle, $content->getBody()->read(1024));
}

// Close output file handle.

fclose($outHandle);
echo "Done.\n"

?>
_
13
jeonatl3