1

ユーザーのGoogleドキュメントをローカルデータベースに同期するC++デスクトップアプリケーションに取り組んでいます。

アプリケーションは、HTTPリクエストを送信する(curlを使用してHTTPリクエストを送信する)ことにより、Googleドキュメントとスプレッドシートをローカルに取得します。リクエスト https://docs.google.com/feeds/default/private/full

ここでは、次の同期のために、各Googleドキュメントのresource_idとその他のメタ情報をデータベースに保存しています。

最初の同期が完了すると、次の同期以降、更新されたリソースのみを取得するために次のHTTPリクエストを送信します

https://docs.google.com/feeds/default/private/full?updated-min=Value ここでupdated-minは以前のXMLupdated-min値です

ここで、Googleドキュメントを識別するリソースの処理中に、以前に保存されたGoogleドキュメントの「resource-id」値に基づいて更新されるかどうかが決まります。

現在と以前の「resource_id」(データベースから取得)が同じである場合は、更新されたものと見なし、そうでない場合は新しいものと見なします。Google Doc APIによると、「resource_id」はGoogleドキュメントの一意の識別子です。

実際の応答には、「updated-min」時間の後に変更された新しい/更新リソースのみが含まれている必要があります。

このロジックはこれまで(ほぼ1年)正常に機能していましたが、データベース内の同じGoogleドキュメントの重複エントリが突然表示されました。(Googleドライブが導入された後に表示され始めたことに気づきました)。

また、同じGoogleドキュメントの重複するエントリはすべて異なるリソースIDを持っているため、それぞれが新しいエントリとして扱われ、同じGoogleドキュメントのエントリが重複します。

「resource_id」は、リソースの一意性を識別するための正しい属性です。

この問題に対処するために私たちを助けていただけませんか

よろしくSubbiReddy

4

1 に答える 1

1

このフィールドは、Google ドキュメントに保存されているファイルを一意に識別するための正しいフィールドですが、値resource_idに依存するのではなく、変更フィードを使用してデータを同期する必要があります。updated-min

https://developers.google.com/google-apps/documents-list/#detecting_changes_to_resources

また、最近リリースされたバージョン 2 の Drive API にも同じ機能が実装されています。Documents List API の代わりにバージョン 2 を使用するようにアプリを更新することをお勧めします。

https://developers.google.com/drive/manage-changes

于 2012-06-29T23:36:29.247 に答える