Можно ли обновить Google Doc из локального файла с помощью Google API? (.NET / C # / WPF) - PullRequest
1 голос
/ 19 ноября 2009

Я сейчас тестирую Google API. Это кажется многообещающим, но я застрял в «простой» проблеме. Я хочу обновить существующий документ локальной копией.

Моя идея состояла в том, чтобы загрузить все документы Google в папку, используя doc-download. Это работает. При следующем запуске я проверяю даты, если удаленный документ более новый, возьмите его снова. Если локальный документ более новый, загрузите его и замените текущую онлайн-версию.

Я не могу найти функцию для замены документа. Существует Upload (имя файла, doctitle), но это создает новый документ. Кто-нибудь знает, возможно ли это, и может указать мне направление коррекции. Нужно ли разбирать атомную ленту (это содержимое документа где-то внутри него ..). «загрузить / изменить слово / загрузить» выглядело так мило: -)

Chris

А для всех, кто интересуется, довольно просто и приятно использовать API. Вот краткий пример WPF (конечно, без учетных данных)

        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);

                    }
                }

            }

        }

1 Ответ

2 голосов
/ 19 ноября 2009

Согласно Docs API docs;) вы можете заменить содержимое документа http://code.google.com/apis/documents/docs/3.0/developers_guide_protocol.html#UpdatingContent

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...