2009-11-18 3 views
1

Je suis actuellement en train de tester l'API google. Cela semble prometteur, mais je suis bloqué par un problème "simple". Je veux mettre à jour un document existant avec une copie locale.Vous pouvez mettre à jour Google Doc à partir d'un fichier local à l'aide de google API? (.NET/C#/WPF)

Mon idée était de télécharger tous les documents google dans un dossier en utilisant le téléchargement de doc. Ça marche. Lors de la prochaine exécution, je vérifie les dates, si un document distant est plus récent, récupérez-le à nouveau. Si le document local est plus récent, téléchargez-le et remplacez la version en ligne actuelle.

Je ne trouve pas de fonction pour remplacer un document. Il y a un téléchargement (filename, doctitle) mais cela crée un nouveau document. Est-ce que quelqu'un sait si cela est possible et peut me pointer dans la direction de la correction. Dois-je disséquer le flux d'atomes (le contenu du document se trouve-t-il quelque part à l'intérieur?). Le « téléchargement/changement de mot/upload » avait l'air si gentil :-)

Chris

Et pour tous ceux qui se intéresse, son assez simple et agréable à utiliser l'API. Voici un court exemple WPF (sans informations d'identification, bien sûr)

 var settings = new RequestSettings("GoogleDocumentsSample", _credentials); 
     AllDocuments = new ObservableCollection<Document>(); 

     settings.AutoPaging = true; 
     settings.PageSize = 10; 

     service = new DocumentsService("DocListUploader"); 
     ((GDataRequestFactory)service.RequestFactory).KeepAlive = false; 
     service.setUserCredentials(username, password); 

     //force the service to authenticate 
     var query = new DocumentsListQuery {NumberToRetrieve = 1}; 
     service.Query(query); 



     var request = new DocumentsRequest(settings); 


     Feed<Document> feed = request.GetEverything(); 
     // this takes care of paging the results in 
     foreach (Document entry in feed.Entries) 
     { 
      AllDocuments.Add(entry); 
      if (entry.Type == Document.DocumentType.Document) 
      { 
       var fI = new FileInfo(@"somepath" + entry.DocumentId + ".doc"); 

       if (!fI.Exists || fI.LastWriteTime < entry.Updated) 
       { 
        Debug.WriteLine("Download doc " + entry.DocumentId); 
        var type = Document.DownloadType.doc; 
        Stream stream = request.Download(entry, type); 

        if (fI.Exists) fI.Delete(); 

        Stream file = fI.OpenWrite(); 

        int nBytes = 2048; 
        int count = 0; 
        Byte[] arr = new Byte[nBytes]; 

        do 
        { 
         count = stream.Read(arr, 0, nBytes); 
         file.Write(arr, 0, count); 

        } while (count > 0); 
        file.Flush(); 
        file.Close(); 

        stream.Close(); 

        fI.CreationTimeUtc = entry.Updated; 
        fI.LastWriteTimeUtc = entry.Updated; 

       } 
       else 
       { 
        if (entry.Updated == fI.LastWriteTime) 
        { 
         Debug.WriteLine("Document up to date " + entry.DocumentId); 
        } 
        else 
        { 
         Debug.WriteLine(String.Format("Local version newer {0} [LOCAL {1}] [REMOTE {2}]", entry.DocumentId, fI.LastWriteTimeUtc, entry.Updated)); 
         service.UploadDocument(fI.FullName, entry.Title); 

        } 
       } 

      } 

     } 

Répondre

2

Selon docs API Docs;) vous pouvez remplacer le contenu d'un document http://code.google.com/apis/documents/docs/3.0/developers_guide_protocol.html#UpdatingContent

+0

"doh" - aurait regardé là .. Ok, mais cela signifie que mon "petit test" devient un téléchargement ATOM/changement/téléchargement. Reporté :-) À moins que quelqu'un ait quelques lignes de code source qui traînent et est prêt à les poster ... Malheureusement, il n'y a pas d'échantillon pour la mise à jour .. –

Questions connexes