3

アプリで作成されたいくつかのカードを単純に削除しようとしています。ただし、このlist()方法は、ユーザーのタイムライン全体ですべてのカードを循環しているように見えます。

以下の私のコードは、 の下のドキュメントの例から少し変更されていtimeline listます。これを使用しようとしたとき、操作がタイムアウトするわずか数秒前に、タイムラインのすべてのカードを誤ってループして、1,000 /日の割り当てをすべて使い果たしました.

 def delete_previous_cards(self):
   """
     This cleans up any cards that may have been leftover.
   """

   result = []
   request = self.mirror_service.timeline().list()
   while request:
     try:
       timeline_items = request.execute()
       result.extend(timeline_items.get('items', []))
       request = self.mirror_service.timeline().list_next(request, timeline_items)
     except errors.HttpError, error:
       print 'An error occurred: %s' % error
       break

   for item in result:
     item_id = item['id']
     self.mirror_service.timeline().delete(id=item_id).execute()

アプリで作成されたカードを効率的に削除するにはどうすればよいですか?

4

2 に答える 2

2

Python の例には pageToken の概念が欠けているように見えます。他のほとんどの言語の例には nextPageToken があり、応答に nextPageToken がなくなるまでループします。カードが 3 枚しかない場合でも、最初のページを何度もリクエストし続けると、すぐに API クォータを使い果たしてしまいます。

この回答の残りの部分は、リストと削除に関する一般的な情報と、安全に実験できるいくつかのcurlコマンドであり、ループしてクォータをすぐに使い果たすことはありません。list コマンドから返された JSON の nextPageToken プロパティに特に注意してください ...

LISTDELETEは奇妙で、私の経験ではドキュメントに正確に従っていません。

List のサンプル CURL コマンドを次に示します。

curl -x http://localhost:5671 -H "Authorization: Bearer YOUR_TOKEN_HERE" 
https://www.googleapis.com/mirror/v1/timeline

トークンに関連付けられているユーザーとアプリの 10 個のアイテムを返します。

削除されたアイテム (isDeleted を true に設定) が含まれていますが、出力 JSON に isDeleted プロパティは表示されません。これは奇妙です。

少し変更すると、次のようになります。

curl -x http://localhost:5671 -H "Authorization: Bearer YOUR_TOKEN_HERE" 
https://www.googleapis.com/mirror/v1/timeline?isDeleted=true

(末尾のパラメーターに注意してください) 同じリストが得られますが、出力 JSON には isDeleted プロパティが含まれています。ここでの教訓は、削除リクエストをループするために isDeleted=false をリクエストする必要があるということです。

アイテムを削除するには、次のようにします。

curl -x http://localhost:5671 -H "Authorization: Bearer YOUR_TOKEN_HERE" 
-H "Content-Type: application/json" -v -X DELETE 
https://www.googleapis.com/mirror/v1/timeline/ID_OF_A_TIMELINE_CARD

最後に list コマンドから取得したカードの実際の ID を使用する必要があることに注意してください。上記のリスト コマンドから 1 つ取得します。

DELETE が成功すると、応答は 204 になります。これは、RESTful な世界では、削除が成功したことを示している可能性があります。

次に、上記の最初の例のように後続のリストを実行すると、アイテムはすぐに戻ってきて、isDeleted プロパティがないため、削除済みとしてマークされません。

ページのサイズは 10 のようですが、どこにも文書化されていないので、変更される可能性があると思います。

nextPageToken の値はしばしば同一の始まりと終わりを持っているように見え、それらは非常に長い文字列であるため、それらを見ると混乱する可能性があり、そうでない場合でも同じであると誤って考える可能性があります。ここでの教訓は、途中で非常に注意深く比較することです.

これらの curl コマンドは、API クォータが戻ってきたときに実験するのに役立つかもしれません。null または空の文字列 nextPageToken をテストして、ループをいつ終了するかを教えてください。同等の Java コードは次のとおりです。

} while (request.getPageToken() != null && request.getPageToken().length() > 0);

頑張ってください、そして素晴らしい質問です。

于 2013-07-01T07:35:19.153 に答える