以编程方式在Google云端硬盘帐户列表中运行文件列表

时间:2017-08-05 07:14:33

标签: php google-api google-drive-api google-oauth google-api-php-client

我目前正在网络应用上执行PHP脚本来废弃我的驱动器: 通过在我的浏览器中打开PHP,我有一个基于Google提供的示例的脚本(https://github.com/google/google-api-php-client)。

此脚本只是进入文件列表并复制服务器上的文件。 它工作正常,但我希望我的Drive文件与我的服务器文件同步。每次我想要再次复制我的文件时,我必须在浏览器中运行我的PHP。以下是我的问题:

  1. 我可以制作一个每天由CRON以编程方式执行的PHP脚本吗? 目前在我的浏览器中打开的PHP需要身份验证(如果未检测到已登录的Google帐户的cookie,我首先需要登录)。我想在我的帐户上授权一次我的Google应用程序,以便每天都可以废弃该驱动器。
  2. 我可以在多个Google帐户上应用此脚本(例如,有一个G地址或令牌列表,并为每个帐户运行脚本)。我正在做的网络应用是针对一群人的,我想将他们的驱动文件与我的服务器同步。
  3. 提前感谢您的回答。我不知道这是否非常有用,但这是我的代码:

    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++;
      }
    

    提前感谢您的帮助! : - )

1 个答案:

答案 0 :(得分:2)

  
      
  1. 我可以制作一个每天由CRON以编程方式执行的PHP脚本吗?
  2.   

是的,您可以在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,您可以根据需要为多个帐户设置刷新令牌。帐户的所有者必须简单地对您的应用程序进行身份验证,并且您将拥有一个刷新令牌来访问它。