I'm currently doing a PHP script on a web app to scrap my drive : By opening a PHP in my browser, I have a script based on examples provided by Google (https://github.com/google/google-api-php-client).
This script simply proceeds to a Files List and copy the files on the server. It's working fine, but I want my Drive files to be synchronized with my server files. I have to run my PHP in my browser every time I want to copy again my files. Here are my questions about that :
- Could I make a PHP script which would be executed programmatically by CRON everyday ? At the moment the PHP opened in my browser needs an authentication (If no cookie of Google account already signed in is detected, I first need to login). I'd like to authorize my Google App once on my account to be able to scrap the drive every day.
- Can I apply this script on multiple Google Accounts (Like having a list of G adresses or tokens, and the script runs for each one). The web app I'm doing is for a dizain of persons, and I'd like to synchronize their drives files with my server.
Thank you in advance for any answer. I don't know if this is very useful, but here is my code :
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++;
  }
Thank you in advance for any help ! :-)
 
    