I am new to google drive api.. I am working on uploading files from my server to google drive.
In my gmail account I have
- created a Service Account, download keys and uploaded to server
- Provided access to Drive Api and SDK Api.
-
Added a Controller to communicate with google as:
set_include_path(get_include_path() . PATH_SEPARATOR . ROOT .DS. "vendors"); require_once('Google/Client/Google_Client.php'); require_once('Googl
e/Client/contrib/Google_DriveService.php');
define('CLIENT_ID','my_client_here....');
define('SERVICE_ACCOUNT_NAME','my_account_name here');
define('KEY_FILE',VENDORS.'Google/Client/key/privatekey.p12'); // what i was availed by google.
if(is_file(KEY_FILE)){
$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/drive'),
$key)
);
$service = new Google_DriveService($client);
$file = new Google_DriveFile();
$file->setTitle('Any sample file title');
$file->setDescription('An experiment to upload text file via server to server');
$file->setMimeType('text/plain');
$data = "Lorem ipsum is a dummy text";
$createdFile = $service->files->insert($file, array(
'data' => $data,
'mimeType' => 'text/plain',
));
print_r($createdFile);
Now the output of this is as follows:
[kind] => drive#file
[id] => 0B-NwgyCI2GQENkswOHVNcVl2aDQ
[etag] => "11QSOvUX6KZKZVB6nCB3GloLTJQ/MTM5MDU2MzUwNTU2OQ"
[selfLink] => https://www.googleapis.com/drive/v2/files/0B-NwgyCI2GQENkswOHVNcVl2aDQ
[webContentLink] => https://docs.google.com/uc?id=0B-NwgyCI2GQENkswOHVNcVl2aDQ&export=download
[alternateLink] => https://docs.google.com/file/d/0B-NwgyCI2GQENkswOHVNcVl2aDQ/edit?usp=drivesdk
[iconLink] => https://ssl.gstatic.com/docs/doclist/images/icon_10_text_list.png
[title] => Any sample file title
[mimeType] => text/plain
[description] => An experiment to upload text file via server to server
[labels] => Array
(
[starred] =>
[hidden] =>
[trashed] =>
[restricted] =>
[viewed] => 1
)
[createdDate] => 2014-01-24T11:38:25.679Z
[modifiedDate] => 2014-01-24T11:38:25.569Z
[modifiedByMeDate] => 2014-01-24T11:38:25.569Z
[lastViewedByMeDate] => 2014-01-24T11:38:25.569Z
[parents] => Array
(
[0] => Array
(
[kind] => drive#parentReference
[id] => 0AONwgyCI2GQEUk9PVA
[selfLink] => https://www.googleapis.com/drive/v2/files/0B-NwgyCI2GQENkswOHVNcVl2aDQ/parents/0AONwgyCI2GQEUk9PVA
[parentLink] => https://www.googleapis.com/drive/v2/files/0AONwgyCI2GQEUk9PVA
[isRoot] => 1
)
)
[downloadUrl] => https://doc-04-60-docs.googleusercontent.com/docs/securesc/lptjog45u94o44tbsu1586vcuinvv74h/mlvse3i90c59eb4q6ggg7d4c6v6q4hfd/1390557600000/03476129820556261866/03476129820556261866/0B-NwgyCI2GQENkswOHVNcVl2aDQ?h=16653014193614665626&e=download&gd=true
[userPermission] => Array
(
[kind] => drive#permission
[etag] => "11QSOvUX6KZKZVB6nCB3GloLTJQ/-HVXFUAxHplEpHWK6MSWEcIX7d8"
[id] => me
[selfLink] => https://www.googleapis.com/drive/v2/files/0B-NwgyCI2GQENkswOHVNcVl2aDQ/permissions/me
[role] => owner
[type] => user
)
[originalFilename] => Any sample file title
[fileExtension] =>
[md5Checksum] => 2c06987d6ae9cfcd7060c68f4356231a
[fileSize] => 31
[quotaBytesUsed] => 31
[ownerNames] => Array
(
[0] => sdsdsdswrwew@developer.myemail.com
)
[owners] => Array
(
[0] => Array
(
[kind] => drive#user
[displayName] => dsdadasd3@developer.myemail.com
[isAuthenticatedUser] => 1
[permissionId] => 03476129820556261866
)
)
[lastModifyingUserName] => 89989989889@developer.myemailid.com
[lastModifyingUser] => Array
(
[kind] => drive#user
[displayName] => my_display_name
[isAuthenticatedUser] => 1
[permissionId] => 03476129820556261866
)
[editable] => 1
[copyable] => 1
[writersCanShare] => 1
[shared] =>
[appDataContents] =>
..............
Now the main problem is that the files upload via this is not listing in my google drive files list but if I query for the availale files in my account I get only the file list uploaded via this api and not the one I created manually in the google drive interface.
See my code to get file list..
.....................
$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/drive'),
$key)
);
$service = new Google_DriveService($client);
....................
$files = $service->files->listFiles();
Now Questions:
- Why do the files not listed in my google drive list.
- Why the service account I created in google console is treated as like a different user. eg file list are different than original users and orignal user file are not listed in api listed files.
Please let me know where I am doing wrong, also let me know if what I am trying to achieve is possible or not. I have created a Service Account rather than Client ID for web application
because the script will run automatically without any user interface.
Please suggest....