Как я могу получить ссылку на Google Drive REST api v3? - PullRequest
1 голос
/ 22 марта 2020

После загрузки файла в GoogleDrive, я могу получить fileId из ответа, затем я передаю fileId следующей функции:

public function createShareLink($fileId, $accessToken){
    $ch = curl_init();
    $options = [
        CURLOPT_URL =>  'https://www.googleapis.com/drive/v3/files/'.$fileId.'/permissions',
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POSTFIELDS => json_encode(['type'=>'anyone', 'role'=>'reader',]),
        CURLOPT_HTTPHEADER => [
            'Authorization:Bearer '.$accessToken,
            'Content-Type:application/json',
        ],
        //In case you're in Windows, sometimes will throw error if not set SSL verification to false
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
    ];
    //In case you need a proxy
    //$options[CURLOPT_PROXY] = 'http://127.0.0.1:1087';

    curl_setopt_array($ch, $options);
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close ($ch);
    return $result;
}

Это сработало и возвращает json:

{
 "kind": "drive#permission",
 "id": "anyoneWithLink",
 "type": "anyone",
 "role": "reader",
 "allowFileDiscovery": false
}

Файл в GoogleDrive действительно стал общедоступным: shared file in GoogleDrive

Но в ответе нет ссылки на общий ресурс json, поэтому Я проверяю документацию, в здесь , вы можете найти параметр fields (см. Снимок экрана ниже): fields parameter

Нажмите Ответ перенаправит вас на страницу, содержащую несколько примеров того, как вы передаете значения в параметры fileds.

Я следую примеру, передавая webViewLink в качестве значения fields следующим образом:

CURLOPT_URL =>  'https://www.googleapis.com/drive/v3/files/'.$fileId.'/permissions?fields=webViewLink',

Но ответит ошибка:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalidParameter",
    "message": "Invalid field selection webViewLink",
    "locationType": "parameter",
    "location": "fields"
   }
  ],
  "code": 400,
  "message": "Invalid field selection webViewLink"
 }
}

Я пытался id:

CURLOPT_URL =>  'https://www.googleapis.com/drive/v3/files/'.$fileId.'/permissions?fields=id',

Ответ:

{
 "id": "anyoneWithLink"
}

Я пытался name:

CURLOPT_URL =>  'https://www.googleapis.com/drive/v3/files/'.$fileId.'/permissions?fields=name',

Ответ:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalidParameter",
    "message": "Invalid field selection name",
    "locationType": "parameter",
    "location": "fields"
   }
  ],
  "code": 400,
  "message": "Invalid field selection name"
 }
}

Я пытался mimeType:

CURLOPT_URL =>  'https://www.googleapis.com/drive/v3/files/'.$fileId.'/permissions?fields=mimeType',

Ответ:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalidParameter",
    "message": "Invalid field selection mimeType",
    "locationType": "parameter",
    "location": "fields"
   }
  ],
  "code": 400,
  "message": "Invalid field selection mimeType"
 }
}

Я правда Я не знаю, как работает этот fields параметр, потому что я думаю, webViewLink, name и mimeType являются правильными полями, все они описывают в здесь , , кто-то делал это раньше ? Я не собираюсь использовать google-api- php -клиент , потому что его размер слишком велик (> 20M).

1 Ответ

2 голосов
/ 22 марта 2020
  • Вы хотите получить webViewLink, используя php.
  • Вы хотите добиться этого с помощью curl, не используя googleapis из php.
  • Вы уже были использованы Drive API.

Если я правильно понял, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Проблема:

  • В вашем случае вы пытаетесь получить webViewLink из метода Permissions: создать в Drive API. К сожалению, метод Permissions: create не имеет полей file. Таким образом, поля webViewLink, name и mimeType не могут быть напрямую получены из метода Permissions: create.
  • About I really don't know how can this fields parameter works, cause I think webViewLink, name and mimeType are correct fields, they all describe in [here](https://developers.google.com/drive/api/v3/reference/files#resource-representations), anyone did this before?,
    • В этом случае пожалуйста, проверьте Разрешения . Здесь вы можете увидеть параметры полей.

По вышеприведенной ситуации такая ошибка возникает.

Обходной путь 1:

К счастью, формат webViewLink является константой. Используя это, вы можете напрямую получить webViewLink, используя идентификатор файла, как показано ниже.

$webViewLink = 'https://drive.google.com/file/d/'.$fileId.'/view?usp=drivesdk';

Обходной путь 2:

Если вы хотите получить webViewLink с помощью API, как насчет использования Метод файлов: попасть в Drive API? Пример сценария выглядит следующим образом.

Пример сценария:
function getWebViewLink($fileId, $accessToken){
    $ch = curl_init();
    $options = [
        CURLOPT_URL =>  'https://www.googleapis.com/drive/v3/files/'.$fileId.'?fields=webViewLink',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => ['Authorization:Bearer '.$accessToken],
    ];
    curl_setopt_array($ch, $options);
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close ($ch);
    return $result;
}

Ссылка:

Если я неправильно понял ваш вопрос, и это было не то направление, которое вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...