如何删除属于我的应用的所有卡?

时间:2013-06-30 17:25:35

标签: google-mirror-api

我正在尝试删除由我的应用创建的几张卡片。但是,似乎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()

有效删除我的应用创建的卡片的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

资源管理器为此目的编写了一个基于JavaScript的工具:Glass Cleaner

答案 1 :(得分:2)

在我看来,Python示例缺少pageToken的任何概念,大多数其他语言示例都有nextPageToken并循环,直到响应没有nextPageToken。如果您不断反复请求第一页,即使您只有三张卡,也会很快耗尽您的API配额。

这个答案的其余部分是关于列表和删除的一般信息,以及一些你可以安全地试验的curl命令,这些命令不会很快地循环和耗尽你的配额。请特别注意列表命令返回的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。从上面的列表命令中获取一个。

成功完成DELETE后,响应为204,在RESTful世界中可以指示delete succes

然后,如果您按照上面第一个示例执行后续列表,则该项目将立即返回,并且不会被标记为已删除,因为缺少isDeleted属性。

页面大小似乎是10,但我想这可能会改变,因为我没有在任何地方找到记录。

nextPageToken值似乎经常具有相同的开头和结尾,并且它们是非常长的字符串,所以看到它们可能会让人感到困惑,如果不是这样,你可能会无意中认为它们是相同的,这里的教训是要非常仔细地比较在中间。

也许那些curl命令可以帮助您在API配额恢复时进行实验,我会尝试测试null或空字符串nextPageToken以告诉您何时退出循环。等效的java代码是:

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

祝你好运,这是一个很好的问题。