ユーザーの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