revisiones historial google entrar editar docs control compartidos como cambios archivos archivo google-docs google-docs-api google-drive-sdk

google docs - historial - Etag y LastModifiedDate no cambian después de la edición del archivo



google forms (2)

Después de editar un documento en GoogleDrive, parece que el valor de LastModified no cambia inmediatamente a veces. Parece que el valor se actualizará en unos minutos.

Traté de buscar el Etag del documento por DriveSDK, también sucede con el valor de Etag.

Este comportamiento extraño me impide obtener el estado del documento (modificado o no) en tiempo real. Cualquier sugerencia será muy apreciada.

[Ejemplo de solicitud y respuesta] La solicitud es solo GoogleDrive ListFiles: https://www.googleapis.com/drive/v2/files

Esta es la parte de la respuesta JSON, y puede ver que ModifiedDate es anterior a ModifiedByMeDate.

{ "kind": "drive#fileList", "etag": "/"3NNCnvnQuji-pODa6SMQ6atlc3M/oKnf21kAcJKTCIycS597xCSR2bk/"", "selfLink": "https://www.googleapis.com/drive/v2/files", "items": [ { "kind": "drive#file", "id": "1lZjcJIf3Chuu5upFqtiqfTRnRw7*****rFL_tlO8A", "etag": "/"3NNCnvnQuji-pODa6SMQ6atlc3M/MTM1NDY5MzMyMzQ1Mg/"", "selfLink": "https://www.googleapis.com/drive/v2/files/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A", "alternateLink": "https://docs.google.com/a/*****.com/document/d/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A/edit", "embedLink": "https://docs.google.com/a/*****.com/document/d/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A/preview", "iconLink": "https://ssl.gstatic.com/docs/doclist/images/icon_11_document_list.png", "thumbnailLink": "https://docs.google.com/feeds/vt?gd=true&id=1lZjcJIf3Chuu5upFqtiq*****7wSUjbRurFL_tlO8A&v=22&s=AMedNnoAAAAAU*****UK74n3UiIg0L4TY-NwP3EaAU&sz=s220", "title": "TestFile", "mimeType": "application/vnd.google-apps.document", "labels": { "starred": false, "hidden": false, "trashed": false, "restricted": false, "viewed": true }, "createdDate": "2012-07-24T08:14:13.918Z", "modifiedDate": "2012-12-06T01:49:57.982Z", "modifiedByMeDate": "2012-12-06T01:49:57.982Z", "lastViewedByMeDate": "2012-12-06T01:50:06.974Z", "parents": [ { "kind": "drive#parentReference", "id": "0AJ-aGTt-gWksUk9PVA", "selfLink": "https://www.googleapis.com/drive/v2/files/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A/parents/0AJ-aGTt-gWksUk9PVA", "parentLink": "https://www.googleapis.com/drive/v2/files/0AJ-aGTt-gWksUk9PVA", "isRoot": true } ], "exportLinks": { "application/vnd.openxmlformats-officedocument.wordprocessingml.document": "https://docs.google.com/feeds/download/documents/export/Export?id=1l*****huu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A&exportFormat=docx", "application/vnd.oasis.opendocument.text": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3Chuu5upF*****SUjbRurFL_tlO8A&exportFormat=odt", "text/html": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUj*****L_tlO8A&exportFormat=html", "application/rtf": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3Chuu5upFqtiq*****SUjbRurFL_tlO8A&exportFormat=rtf", "text/plain": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3Chuu5upFqtiqf*****SUjbRurFL_tlO8A&exportFormat=txt", "application/pdf": "https://docs.google.com/feeds/download/documents/export/Export?id=1lZjcJIf3C*****fTRnRw7wSUjbRurFL_tlO8A&exportFormat=pdf" }, "userPermission": { "kind": "drive#permission", "etag": "/"3NNCnvnQuji-pODa6SMQ6atlc3M/6LfqbkrWujmUe1WSDkyhTxdIUCc/"", "id": "me", "selfLink": "https://www.googleapis.com/drive/v2/files/1lZjcJIf3Chuu5upFqtiqfTRnRw7wSUjbRurFL_tlO8A/permissions/me", "role": "owner", "type": "user" }, "quotaBytesUsed": "0", "ownerNames": [ "***** *****" ], "lastModifyingUserName": "***** *****", "editable": true, "writersCanShare": true, "appDataContents": false },


Esto no responde a la pregunta, pero me gustaría comentar sobre qué significa etag y modifiedDate en los recursos de File . File etag parece corresponder directamente con el valor de modifiedDate . La segunda parte del etag (después de la barra inclinada) es solo una codificación de la fecha modifiedDate .

En la API de la Lista de documentos, hay una propiedad llamada app:edited además de la propiedad updated (que parece corresponder a fecha modifiedDate aquí). La forma en que cambian estas marcas de tiempo no está claramente documentada, pero he notado esa app:edited cambios app:edited en prácticamente todos los cambios (por ejemplo, protagonizar un archivo, incluso por otro usuario si recuerdo correctamente) y los cambios updated son más limitados (por ejemplo, para contenido modificaciones y cambios de permisos). Y el etag antes corresponde directamente a la app:edited , lo cual es bueno porque un cambio de app:edited indica que realmente hubo un cambio (a veces cambia demasiado, como protagonizar un archivo por un usuario diferente, ya que no es así). realmente afecta los metadatos del usuario actual).

Lo que quiero decir es que creo que el etag la Lista de etag (y tener la propiedad de la app:edited ) es mejor que la API de Drive que tiene el etag modifiedDate solo. El problema con este último es que no tiene una manera confiable de determinar si un recurso de File ha cambiado o no. Por ejemplo, si solo desea verificar si un recurso de File ha cambiado, podría haber usado el método files.get con un encabezado If-None-Match usando el etag . Pero etag no siempre cambia porque modifiedDate no siempre cambia. Cambia, por ejemplo, cuando hay contenido nuevo, o cambia ACL, o cambia la descripción, pero no cambia, por ejemplo, cuando se descarta, o los padres cambian. Al comparar dos recursos, no puede determinar confiablemente cuál es más nuevo. Agregue el hecho de que se puede establecer etag (por ejemplo, sería posible establecer el modifiedDate a un valor anterior, o incluso un valor constante, y el etag con él). El propósito previsto de etag se pierde. Hay muchos casos en los que no podemos simplemente confiar en la lista de cambios, y si etag comporta correctamente, sería de gran ayuda para determinar los cambios que ocurrieron.

Lo que sugiero es restablecer el comportamiento de etag para que sea similar a la API de la lista de documentos. Y para ayudar a determinar qué recurso tiene información más reciente, agregue la app:edited propiedad app:edited también (creo que solo documentar el valor de etag es suficiente, como decir oficialmente que la segunda parte es una codificación de una marca de tiempo, para que podamos confía en que siempre va en aumento). Además, creo que es mejor cambiar la propiedad modifiedDate la modifiedDate del contenido, y nada más (p. Ej., No con los cambios de ACL o de descripción).

Del mismo modo, etag de etag de Revision(List) de archivos verbatim tampoco es muy útil. Como la propiedad downloadUrl cambia regularmente, los etag de cada Revision y toda la lista cambian con ella, dejándola inútil (porque no puede usarla para verificar si las revisiones no cambiaron). Lo bueno es que la propiedad md5Checksum se puede comparar, pero no es confiable en algunos casos.


La infraestructura de Google actualiza Google Doc asincrónicamente después de las actualizaciones. Que yo sepa, esto afecta etag, thumbnails, y probablemente md5sum y ciertas fechas modificadas.

Alguna documentación de Google que confirme qué elementos son asíncronos y cuáles son sincrónicos sería tremendamente útil para los desarrolladores.