2016-07-27 5 views
11

Google 드라이브 API를 사용하여 폴더를 만들려고합니다. 마지막에 파일 아이디를 얻을 수 있습니다. 그러나 나는 Google 드라이브에 내 폴더 수 없습니다. 권한 문제가있는 것 같습니까?PHP를 사용하여 Google 드라이브에서 API를 통해 만든 파일 및 폴더를 볼 수 없습니다.

$scopes = array(
    'https://www.googleapis.com/auth/drive', 
    'https://www.googleapis.com/auth/drive.appdata','https://www.googleapis.com/auth/drive.apps.readonly', 
    'https://www.googleapis.com/auth/drive.metadata','https://www.googleapis.com/auth/drive.file', 
    'https://www.googleapis.com/auth/drive.readonly','https://www.googleapis.com/auth/drive.photos.readonly' 
); 
$creds = new Google_Auth_AssertionCredentials(
    $serviceAccountName, 
    $scopes, 
    file_get_contents($keyFile) 
); 
$client = new Google_Client(); 
$client->setApplicationName($appName); 
$client->setClientId($clientId); 
$client->setAssertionCredentials($creds); 
$service = new Google_Service_Drive($client); 
$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'Invoices', 
    'permissions' => array('type'=>'anyone','role'=>'reader','allowFileDiscovery'=>1), 

    'mimeType' => 'application/vnd.google-apps.folder')); 
$file = $service->files->create($fileMetadata, array()); 

printf("File ID: %s\n", $file->id); 

답변

2

일부 응답은 부분적으로 적합합니다. [email protected] 같은

생성되는 파일은 API 계정 이메일에 속한다 (뭔가.

당신은

처럼 해당 계정의 소유자에게 권한을 부여 할 필요가
$newPermission = new Google_Service_Drive_Permission(); 
$value="email id"; 
$type="user"; 
$role="writer"; 
    $newPermission->setValue($value); 
    $newPermission->setType($type); 
    $newPermission->setRole($role); 
try { 
    $res= $service->permissions->insert($fileId, $newPermission); 
    print_r($res); 
    } catch (Exception $e) { 
    print "An error occurred: " . $e->getMessage(); 
    } 
당신은 나와 함께 공유에서 해당 폴더를 볼 수

. 또한. 수동 드라이브에 추가 할 수 있습니다

또한 사용하여 이메일을 통해 통지를 발송하지 않도록 설정할 수 있습니다

$service->permissions->insert($fileId, $newPermission,array('sendNotificationEmails'=>false)); 

희망이 있습니다.

0

예, 권한 문제입니다. 생성되는 파일은 API 계정 이메일로 [email protected] 같은 (뭔가를 소속

$fileMetadata = new Google_Service_Drive_DriveFile(array( 'name' => 'Invoices', 'permissions' => array('type'=>'anyone','role'=>'reader','allowFileDiscovery'=>1), 'mimeType' => 'application/vnd.google-apps.folder'));

3

에서

'permissions' => array('type'=>'anyone','role'=>'reader','allowFileDiscovery'=>1),

를 제거하십시오 당신이 드라이브 URL로 이동하는 경우 :. https://docs.google.com/document/d/{ID}을, 당신을 "액세스가 거부되었습니다. 액세스 요청"페이지가 표시됩니다.

서비스 계정 전자 메일은 사용자 전자 메일과 관련이 없습니다. .

사용자와 파일을 만들려면 OAauth 토큰 권한 부여를 만들어야합니다. 단계에 따라

  1. 만들기의 OAuth 인증 "1 단계 : 드라이브 API를 켜고"this page의 예에 따라, 스크립트를 수정 this page

  2. 에, 당신은 할 수 있습니다 :


use Google_Client; 
use Google_Service_Drive; 
use Google_Service_Drive_DriveFile; 

... 

$file = 'root/to/your/credentials.json'; 

$client = new Google_Client(); 
$client->setScopes([ 
    'https://www.googleapis.com/auth/drive', 
    'https://www.googleapis.com/auth/drive.appdata', 
    'https://www.googleapis.com/auth/drive.apps.readonly', 
    'https://www.googleapis.com/auth/drive.metadata', 
    'https://www.googleapis.com/auth/drive.file', 
    'https://www.googleapis.com/auth/drive.readonly', 
    'https://www.googleapis.com/auth/drive.photos.readonly' 
]); 

$client->setAuthConfig($file); 
$authUrl = $client->createAuthUrl(); 

printf("Open the following link in your browser:\n%s\n", $authUrl); 

// You will need to open this url 
print 'Enter verification code: '; 
$authCode = trim(fgets(STDIN)); 

$accessToken = $client->authenticate($authCode); 

file_put_contents($credentialsPath, $accessToken); 
printf("Credentials saved to %s\n", $credentialsPath); 

$client->setAccessToken(json_decode($accessToken, true)); 

$service = new Google_Service_Drive($client); 

$metadata = new Google_Service_Drive_DriveFile([ 
    'name' => 'testing drive', 
    'mimeType' => "application/vnd.google-apps.document" 
]); 
$file = $service->files->create($metadata, []); 
print_r($file); 

파일은 드라이브 홈 디렉토리에 있어야합니다.

그런데 새로운 버전 google/apiclient:2.0.2 (아직 베타 버전이지만 괜찮습니다)을 사용해 보시기 바랍니다.