5

GoogleDrive でドキュメントを編集した後、LastModified の値がすぐに変更されないようです。数分で値が更新されるようです。

DriveSDK でドキュメントの Etag を取得しようとしましたが、Etag 値にも発生します。

この奇妙な動作により、ドキュメントのステータス (変更されているかどうか) をリアルタイムで取得できなくなります。どんな提案でも大歓迎です。

[サンプル リクエストとレスポンス] リクエストは GoogleDrive ListFiles のみです: https://www.googleapis.com/drive/v2/files

これは応答 JSON の一部であり、ModifiedDate が 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
  },
4

3 に答える 3

6

etagこれは質問への回答ではありませんが、リソースの意味とmodifiedDate意味についてコメントしたいと思いFileます。File etag値に直接対応しているようmodifiedDateです。の 2 番目の部分etag(スラッシュの後) は、modifiedDate.

Documents List API には、プロパティapp:edited以外に呼び出されるプロパティがありupdatedます (ここに相当するようmodifiedDateです)。app:editedこれらのタイムスタンプが変更される方法は明確に文書化されていませんが、ほぼすべての変更 (たとえば、私の記憶が正しければ別のユーザーによるファイルのスター付け) での変更と、変更がより限定的であることに気付きましたupdated(コンテンツの変更や権限の変更など)。 )。また、etagbefore は に直接対応しますapp:edited。これは、 の変更が実際に変更があったことを示しているため、良いことですapp:edited(ただし、現在のユーザーのメタデータには実際には影響しないため、別のユーザーによるファイルのスター付けなど、変更が多すぎる場合があります)。 )。

私が言いたいのは、Documents List のetag(そしてapp:editedプロパティを持っている) 方が Drive APImodifiedDateだけを持っているよりも優れていると思うということです。File後者の問題は、リソースが変更されたかどうかを判断する信頼できる方法がないことです。たとえば、Fileリソースが変更されたかどうかを確認したいだけの場合はIf-None-Matchetag. でもetagいつも変わらないからいつも変わらmodifiedDateない。たとえば、新しいコンテンツがある場合、ACL が変更された場合、説明が変更された場合は変更されますが、ゴミ箱に移動した場合や親が変更された場合は変更されません。2 つのリソースを比較する場合、どちらが新しいかを確実に判断することはできません。という事実を追加modifiedDateを設定できます (たとえば、modifiedDateを以前の値または定数値に設定して、それを使用することもできetagます)。の本来の目的etagが失われます。変更リストだけに頼ることができない場合が多く、etag適切に動作する場合、発生した変更を判断するのに非常に役立ちます。

私が提案するのは、 の動作をetagDocuments List API に似たものに戻すことです。また、どのリソースがより新しい情報を持っているかを判断するのに役立つように、プロパティも追加します ( 2 番目の部分はタイムスタンプのエンコードであると公式に言っているようにapp:edited、値を文書化するだけで十分だと思います。etag常に増加します)。modifiedDateまた、コンテンツの変更時にプロパティを変更するだけで、他には何も変更しない方がよいと思います (たとえば、ACL の変更や説明の変更ではありません)。

同様に、逐語的ファイルetagRevision(List)リソースもあまり役に立ちません。downloadUrlプロパティは定期的に変更されるため、etagそれぞれのRevisionリストとリスト全体が変更され、役に立たなくなります (リビジョンが変更されていないかどうかを確認するために使用できないため)。md5Checksum比較できるプロパティがあるのは良いことですが、場合によっては信頼できない場合があります。

于 2012-12-06T06:47:29.293 に答える
2

Google のインフラストラクチャは、更新後に非同期で Google ドキュメントを更新します。私の知る限り、これは etag、サムネイル、そしておそらく md5sum と特定の変更日に影響します。

どの項目が非同期で、どの項目が同期であるかを確認する Google のドキュメントは、開発者にとって非常に役立ちます。

于 2012-12-06T02:23:38.313 に答える