2017-01-09 4 views
0

Я могу получить файлы с Google Диска, используя API, по ссылке: Display (View) list of files from Google Drive using Google Drive API in ASP.Net with C# and VB.Net.Как получить все файлы из всех папок с API Google Диска в C#

Но я получаю только 100 записей. У меня несколько тысяч записей. Может кто-нибудь, пожалуйста, дайте мне знать, что нужно изменить, чтобы получить полный отчет.

Вы можете найти код ниже:

namespace GoogleDrive 
{ 
    public partial class gDrive : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      GoogleConnect.ClientId = "942196220502-k107l4mtn6n606d8m38pp2k6clfmbftd.apps.googleusercontent.com"; 
      GoogleConnect.ClientSecret = "oJxTZ2Bw9QfOlrc7KgxsEf9o"; 
      GoogleConnect.RedirectUri = Request.Url.AbsoluteUri.Split('?')[0]; 
      GoogleConnect.API = EnumAPI.Drive; 
      if (!string.IsNullOrEmpty(Request.QueryString["code"])) 
      { 
       string code = Request.QueryString["code"]; 
       string json = GoogleConnect.Fetch("me", code); 
       GoogleDriveFiles files = new JavaScriptSerializer().Deserialize<GoogleDriveFiles>(json); 
       gv1.DataSource = files.Items.Where(i => i.Labels.Trashed == false); 
       gv1.DataBind(); 
      } 
      else if (Request.QueryString["error"] == "access_denied") 
      { 
       ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", "alert('Access denied.')", true); 
      } 
      else 
      { 
       GoogleConnect.Authorize("https://www.googleapis.com/auth/drive.readonly"); 
      } 
     } 

     public class GoogleDriveFiles 
     { 
      public List<GoogleDriveFile> Items { get; set; } 
     } 

     public class GoogleDriveFile 
     { 
      public string Id { get; set; } 
      public string Title { get; set; } 
      public string OriginalFilename { get; set; } 
      public string ThumbnailLink { get; set; } 
      public string IconLink { get; set; } 
      public string WebContentLink { get; set; } 
      public DateTime CreatedDate { get; set; } 
      public DateTime ModifiedDate { get; set; } 
      public GoogleDriveFileLabel Labels { get; set; } 
      public string alternateLink { get; set; } 
      public Boolean editable { get; set; } 
     } 

     public class GoogleDriveFileLabel 
     { 
      public bool Starred { get; set; } 
      public bool Hidden { get; set; } 
      public bool Trashed { get; set; } 
      public bool Restricted { get; set; } 
      public bool Viewed { get; set; } 
     } 
    } 
} 

Ниже код применим, чтобы получить первые 1000 записей.

namespace gDrive 
{ 
    class Program 
    { 
     static string[] Scopes = { DriveService.Scope.DriveReadonly }; 
     static string ApplicationName = "Drive API .NET Quickstart"; 

    static void Main(string[] args) 
    { 
     UserCredential credential; 
     gDriveTableAdapter gDrive = new gDriveTableAdapter(); 

     using (var stream = 
      new FileStream("client_secret.json", FileMode.Open, FileAccess.Read)) 
     { 
      string credPath = System.Environment.GetFolderPath(
       System.Environment.SpecialFolder.Personal); 
      credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json"); 

      credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
       GoogleClientSecrets.Load(stream).Secrets, 
       Scopes, 
       "user", 
       CancellationToken.None, 
       new FileDataStore(credPath, true)).Result; 
      //Console.WriteLine("Credential file saved to: " + credPath); 
     } 

     // Create Drive API service. 
     var service = new DriveService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = ApplicationName, 
     }); 

     // Define parameters of request. 
     FilesResource.ListRequest listRequest = service.Files.List(); 
     listRequest.PageSize = 1000; 
     listRequest.Fields = "nextPageToken, files(webViewLink, name)"; 

     // List files. 
     IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute() 
      .Files; 
     Console.WriteLine("Processing...\n"); 
     if (files != null && files.Count > 0) 
     { 
      foreach (var file in files) 
      { 
       gDrive.InsertQuery(file.Name, file.WebViewLink); 
      } 
      Console.WriteLine(files.Count + " records fetched."); 
     } 
     else 
     { 
      Console.WriteLine("No files found."); 
     } 
     Console.Read(); 
    } 
    } 
} 
+0

[Этот примером страница] (https: // разработчики. google.com/drive/v3/web/quickstart/dotnet): 'listRequest.PageSize = 10;', читающий [здесь] (https://developers.google.com/drive/v3/reference/files/list) мы видим, что значение по умолчанию - 100, как вы видите. Вы можете установить его до 1000, как указано на этой второй странице. Вам, видимо, придется как-то использовать параметр 'pageToken', чтобы продолжить получать файлы после 1000. Показывать, что ваш код вместо ссылки на другую страницу будет более полезен. – Quantic

+0

@quantic добавлено кодирование, PLS найти его – Aruna

+0

Извините, я не знаю API Google Drive или как его использовать. Может быть, вам следует следовать примеру, который я связал, вместо того, который вы нашли, потому что моя новая и от самого Google. Можно ли оставить в своем сообщении «ClientId» и «ClientSecret»? – Quantic

ответ

2

Возможно, вы используете Google Drive api V2. Если вы отправляете параметр maxResults, равный 1000, вы вернете первые 1000 строк. Если в вашем ответе возвращаются дополнительные строки, то page Token. Вам нужно будет отправить другой запрос и добавить pageToken в новый запрос, который вернет вам следующий отправленный вам данные. Я не знаком с этой библиотекой, поэтому не могу помочь вам изменить код.

Примечание: Учебное пособие, с которым вы следуете, - с 2014 года, и оно не использует самую обидную версию Google Drive API which is V3. Также вы не используете официальных Google .Net client library.

Update:

Это мой список всех файлов метод для API Google Drive. он показывает, как создать стример страницы и вернет полный список ВСЕХ файлов. Примечание: он будет продолжать запрашивать данные до тех пор, пока на вашем диске Google не будет больше данных. Я не несу ответственности за пищу квоты :)

public class FilesListOptionalParms 
    { 
     /// The source of files to list. 
     public string Corpus { get; set; } 
     /// A comma-separated list of sort keys. Valid keys are 'createdTime', 'folder', 'modifiedByMeTime', 'modifiedTime', 'name', 'quotaBytesUsed', 'recency', 'sharedWithMeTime', 'starred', and 'viewedByMeTime'. Each key sorts ascending by default, but may be reversed with the 'desc' modifier. Example usage: ?orderBy=folder,modifiedTime desc,name. Please note that there is a current limitation for users with approximately one million files in which the requested sort order is ignored. 
     public string OrderBy { get; set; } 
     /// The maximum number of files to return per page. 
     public int PageSize { get; set; } 
     /// The token for continuing a previous list request on the next page. This should be set to the value of 'nextPageToken' from the previous response. 
     public string PageToken { get; set; } 
     /// A query for filtering the file results. See the "Search for Files" guide for supported syntax. 
     public string Q { get; set; } 
     /// A comma-separated list of spaces to query within the corpus. Supported values are 'drive', 'appDataFolder' and 'photos'. 
     public string Spaces { get; set; } 

    } 

    /// <summary> 
    /// Lists or searches files. 
    /// Documentation https://developers.google.com/drive/v3/reference/files/list 
    /// Generation Note: This does not always build correctly. Google needs to standardize things I need to figure out which ones are wrong. 
    /// </summary> 
    /// <param name="service">Authenticated Drive service. </param> 
    /// <param name="optional">The optional parameters. </param>   
    /// <returns>FileListResponse</returns> 
    public static Google.Apis.Drive.v3.Data.FileList ListAll(DriveService service, FilesListOptionalParms optional = null) 
    { 
     try 
     { 
      // Initial validation. 
      if (service == null) 
       throw new ArgumentNullException("service"); 

      // Building the initial request. 
      var request = service.Files.List(); 

      // Applying optional parameters to the request.     
      request = (FilesResource.ListRequest)SampleHelpers.ApplyOptionalParms(request, optional); 

      var pageStreamer = new Google.Apis.Requests.PageStreamer<Google.Apis.Drive.v3.Data.File, FilesResource.ListRequest, Google.Apis.Drive.v3.Data.FileList, string>(
               (req, token) => request.PageToken = token, 
               response => response.NextPageToken, 
               response => response.Files); 


      var allFiles = new Google.Apis.Drive.v3.Data.FileList(); 
      allFiles.Files = new List<Google.Apis.Drive.v3.Data.File>(); 

      foreach (var result in pageStreamer.Fetch(request)) 
      {      
       allFiles.Files.Add(result); 
      } 

      return allFiles; 

     } 
     catch (Exception Ex) 
     { 
      throw new Exception("Request Files.List failed.", Ex); 
     } 
    } 

Необязательного Parms рваной из моего проекта: Unofficial Drive sample Список всех файлы разорвали с моей сути: gist

+0

спасибо @dalmto, обновил api v3, но я получил только 1000 записей, как я могу получить оставшиеся записи. PLS уточнить. отправил новый вопрос по этой ссылке - http://stackoverflow.com/questions/41572228/how-to-list-of-more-than-1000-records-from-google-drive-api-v3-in-c- sharp – Aruna

+0

У меня есть пример кода с разбивкой по страницам Я посмотрю, найду ли я его для вас – DaImTo

+0

wow great dalmto, ожидая этих кодов ... – Aruna

 Смежные вопросы

  • Нет связанных вопросов^_^