【问题标题】:Server based Google Drive Service?基于服务器的 Google Drive 服务?
【发布时间】:2014-01-17 19:56:37
【问题描述】:

我希望构建一个 Google Drive 应用程序来存储来自网站应用程序的图像和文档文件,而不需要访问者进行身份验证或提供访问权限等。通过 PHP 界面无缝使用 googledrive 服务。

用户将图像/文档上传到网络表单,文件存储在 GoogleDrive 而不是本地文件系统上。

我只是需要这方面的帮助,因为我使用过的所有 Google 客户端示例都需要基于用户的授权和权限。

我现在的代码似乎得到了我的 Google_DriveService 数组:

require_once '../apis/google-api-php-client/src/Google_Client.php';
require_once '../apis/google-api-php-client/src/contrib/Google_PredictionService.php';
require '../apis/google-api-php-client/src/contrib/Google_DriveService.php';

session_start();

// Set your client id, service account name, and the path to your private key.
// For more information about obtaining these keys, visit:
// https://developers.google.com/console/help/#service_accounts
const CLIENT_ID = '########.apps.googleusercontent.com';
const SERVICE_ACCOUNT_NAME = '#########@developer.gserviceaccount.com';

// Make sure you keep your key.p12 file in a secure location, and isn't
// readable by others.
const KEY_FILE = '##########-privatekey.p12';

// Load the key in PKCS 12 format (you need to download this from the
// Google API Console when the service account was created.
$client = new Google_Client();

$key = file_get_contents(KEY_FILE);
$client->setClientId(CLIENT_ID);
$client->setAssertionCredentials(new Google_AssertionCredentials(
    SERVICE_ACCOUNT_NAME,
    array('https://www.googleapis.com/auth/prediction'),$key));

$client->setClientId(CLIENT_ID);
$service = new Google_PredictionService($client);

// Prediction logic:
$id = '9146497114232; # replaced with random numbers for this post
$hostedModelName= 'sample.languageid';
$predictionData = new Google_InputInput();
$predictionData->setCsvInstance(array('Foo Bar A Doo')); ## Not sure what this is or what I need here?
$input = new Google_Input();
$input->setInput($predictionData);

$result = $service->hostedmodels->predict($id,$hostedModelName, $input);

# print '<h2>Prediction Result:</h2><pre>' . print_r($result, true) . '</pre>';

// We're not done yet. Remember to update the cached access token.
// Remember to replace $_SESSION with a real database or memcached.
if ($client->getAccessToken()) {
    $_SESSION['token'] = $client->getAccessToken();
}

$driveService = new Google_DriveService($client);


print_r($driveService);
exit;

我返回了一个长长的对象数组,从那里开始,我相当僵硬。

其中一些看起来像:

[service:Google_ServiceResource:private] => Google_DriveService Object
 *RECURSION*
            [serviceName:Google_ServiceResource:private] => drive
            [resourceName:Google_ServiceResource:private] => revisions
            [methods:Google_ServiceResource:private] => Array
                (
                    [delete] => Array
                        (
                            [id] => drive.revisions.delete
                            [path] => files/{fileId}/revisions/{revisionId}
                            [httpMethod] => DELETE
                            [parameters] => Array
                                (
                                    [fileId] => Array
                                        (
                                            [type] => string
                                            [required] => 1
                                            [location] => path
                                        )

                                    [revisionId] => Array
                                        (
                                            [type] => string
                                            [required] => 1
                                            [location] => path
                                        )

                                )

                            [scopes] => Array
                                (
                                    [0] => https://www.googleapis.com/auth/drive
                                    [1] => https://www.googleapis.com/auth/drive.file
                                )

                        )

                    [get] => Array
                        (
                            [id] => drive.revisions.get
                            [path] => files/{fileId}/revisions/{revisionId}
                            [httpMethod] => GET
                            [parameters] => Array
                                (
                                    [fileId] => Array
                                        (
                                            [type] => string
                                            [required] => 1
                                            [location] => path
                                        )

                                    [revisionId] => Array
                                        (
                                            [type] => string
                                            [required] => 1
                                            [location] => path
                                        )

                                )

                            [response] => Array
                                (
                                    [$ref] => Revision
                                )

                            [scopes] => Array
                                (
                                    [0] => https://www.googleapis.com/auth/drive
                                    [1] => https://www.googleapis.com/auth/drive.file
                                    [2] => https://www.googleapis.com/auth/drive.metadata.readonly
                                    [3] => https://www.googleapis.com/auth/drive.readonly
                                )

                        )

                    [list] => Array
                        (
                            [id] => drive.revisions.list
                            [path] => files/{fileId}/revisions
                            [httpMethod] => GET
                            [parameters] => Array
                                (
                                    [fileId] => Array
                                        (
                                            [type] => string
                                            [required] => 1
                                            [location] => path
                                        )

                                )

                            [response] => Array
                                (
                                    [$ref] => RevisionList
                                )

                            [scopes] => Array
                                (
                                    [0] => https://www.googleapis.com/auth/drive
                                    [1] => https://www.googleapis.com/auth/drive.file
                                    [2] => https://www.googleapis.com/auth/drive.metadata.readonly
                                    [3] => https://www.googleapis.com/auth/drive.readonly
                                )

                        )

                    [patch] => Array
                        (
                            [id] => drive.revisions.patch
                            [path] => files/{fileId}/revisions/{revisionId}
                            [httpMethod] => PATCH
                            [parameters] => Array
                                (
                                    [fileId] => Array
                                        (
                                            [type] => string
                                            [required] => 1
                                            [location] => path
                                        )

                                    [revisionId] => Array
                                        (
                                            [type] => string
                                            [required] => 1
                                            [location] => path
                                        )

                                )

                            [request] => Array
                                (
                                    [$ref] => Revision
                                )

                            [response] => Array
                                (
                                    [$ref] => Revision
                                )

                            [scopes] => Array
                                (
                                    [0] => https://www.googleapis.com/auth/drive
                                    [1] => https://www.googleapis.com/auth/drive.file
                                )

                        )

                    [update] => Array
                        (
                            [id] => drive.revisions.update
                            [path] => files/{fileId}/revisions/{revisionId}
                            [httpMethod] => PUT
                            [parameters] => Array
                                (
                                    [fileId] => Array
                                        (
                                            [type] => string
                                            [required] => 1
                                            [location] => path
                                        )

                                    [revisionId] => Array
                                        (
                                            [type] => string
                                            [required] => 1
                                            [location] => path
                                        )

                                )

                            [request] => Array
                                (
                                    [$ref] => Revision
                                )

                            [response] => Array
                                (
                                    [$ref] => Revision
                                )

                            [scopes] => Array
                                (
                                    [0] => https://www.googleapis.com/auth/drive
                                    [1] => https://www.googleapis.com/auth/drive.file
                                )

                        )

                )

        )

    [version] => v2
    [servicePath] => drive/v2/
    [resource] => 
    [serviceName] => drive

【问题讨论】:

  • 应用将上传到谁的 Google Drive - 你的?
  • 我有点困惑。您的用户当前是否登录到您的 PHP 站点?如果是这样,您能否对 Google Drive API quickstartDrEdit 的凭据进行硬编码,以便所有用户都使用该连接?
  • 是的,用户将登录到应用程序,但我们希望使用单个 Google Drive 帐户来存储图像和文档,而不是用户的驱动器。
  • 可能与 stackoverflow.com/questions/21189523/… 重复。问题可能不同,但答案是一样的;-)

标签: php google-drive-api google-oauth google-api-php-client


【解决方案1】:

我认为您应该考虑为此使用服务帐户。

https://developers.google.com/drive/web/service-accounts

通过使用服务帐户,您不必担心人们会登录。所有内容都将始终上传到同一个服务帐户。

【讨论】:

    猜你喜欢
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多