我目前正在网络应用上执行PHP脚本来废弃我的驱动器: 通过在我的浏览器中打开PHP,我有一个基于Google提供的示例的脚本(https://github.com/google/google-api-php-client)。
此脚本只是进入文件列表并复制服务器上的文件。 它工作正常,但我希望我的Drive文件与我的服务器文件同步。每次我想要再次复制我的文件时,我必须在浏览器中运行我的PHP。以下是我的问题:
提前感谢您的回答。我不知道这是否非常有用,但这是我的代码:
function retrieveAllFiles($service, $parameters) {
$results = array();
$pageToken = NULL;
do{
try {
if ($pageToken) {
$parameters['pageToken'] = $pageToken;
}
$files = $service->files->listFiles($parameters);
$results = array_merge($results, $files->getFiles());
$pageToken = $files->getNextPageToken();
} catch (Exception $e) {
print "Une erreur s'est produite : " . $e->getMessage();
$pageToken = NULL;
}
}while($pageToken);
return $results;
}
// Function to get a list of files id
function scrapDrive($service, $excluded) {
$final_files = array();
$query = "";
if(sizeof($excluded) == 0){
$query = "name = '--------'";
}else{
$query = "name = '".$excluded[0]."'";
}
// I just do a custom query if the user has chosen to exclude personal folders from his drive
foreach ($excluded as $folder_name) {
$query .= " or name ='".$folder_name."'";
}
// Get folders ID
$excluded_folders = retrieveAllFiles($service, array('q' => $query));
$excluded_folders_id = array();
foreach ($excluded_folders as $folder) {
array_push($excluded_folders_id, $folder['id']);
}
$usermail = getUserMail($service);
// Getting only files from last month
$artworks_query = "modifiedTime > '".date("Y-m-d\TH:i:sP",strtotime("-1 month"))."'";
// Only getting images
$artworks_query .= " and mimeType contains 'image/' and '".$usermail."' in owners";
foreach ($excluded_folders_id as $id) {
$artworks_query .= " and not '".$id."' in parents";
}
$artworks = retrieveAllFiles($service, array('q' => $artworks_query));
foreach ($artworks as $artwork) {
$final_artworks[$artwork['id']] = $artwork['name'];
}
return $final_artworks;
}
$excluded = getExcludedFolders($_SESSION['id']);
$artworks = scrapDrive($service, $excluded);
$nb_of_artworks = sizeof($artworks);
$i = 1;
// Copy each file
foreach ($artworks as $artwork_id => $artwork_name) {
$response = $service->files->get($artwork_id, array(
'alt' => 'media' ));
$content = $response->getBody()->getContents();
file_put_contents("folder/".$artwork_id.'_'.$artwork_name, $content);
}
$i++;
}
提前感谢您的帮助! : - )
答案 0 :(得分:2)
- 我可以制作一个每天由CRON以编程方式执行的PHP脚本吗?
醇>
是的,您可以在cron中运行php脚本。 how to run a php script daily with the cron job on Ubuntu os
目前在浏览器中打开的PHP需要身份验证(如果未检测到已登录的Google帐户的Cookie,我首先需要登录)。
那是因为你使用的是Oauth2。您可以轻松地将刷新令牌保存在文件中,然后让脚本从文件中读取刷新令牌,而不是从cookie中读取它。 check this
我想在我的帐户上授权一次我的Google App,以便每天都可以废弃该驱动器。
如果这是您个人可以控制的帐户,则应考虑使用服务帐户身份验证而不是Oauth2。 check this
我可以在多个Google帐户上应用此脚本(例如,有一个G地址或令牌列表,并为每个帐户运行脚本)。我正在做的网络应用程序是为了一个人的dizain,我想将他们的驱动器文件与我的服务器同步。
使用Oauth2,您可以根据需要为多个帐户设置刷新令牌。帐户的所有者必须简单地对您的应用程序进行身份验证,并且您将拥有一个刷新令牌来访问它。