Thursday, 16 January 2014

面子书 - 一次性删除多个inbox信息 。


                           最后公告: 由于面子书停用 desktop messenger,所以代码无法直接运行。

22 jan 2014 公告: 留言提到的代码问题已解决。请重新copy代码。

有些人会觉得删除大量的信息很麻烦



因为要按每个人的对话信息, 然后里头又要按 Actions, 然后选 Delete Conversation... , 然后还要再按 确认 Delete Conversation


如果要管理太多信息/粉丝, 会非常不便 。

现在我来说说比较快的方法 。



步骤 1:

更多 -> 已存档, 打开 https://www.facebook.com/messages/archived/, 确保 archived(中文称 "已存档") 文件夹里头没有重要的对话信息都是可以丢的, 当然也可以是空的。




步骤 2:

去未读(Unread)那里 (: 其它 (Other) 那里也可以), 用滑鼠一边scroll 到底, 如果是不要的对话信息,  就选右边的叉 (Archive/存档)。

目的是把那些对话信息集中在 archived("已存档")的文件夹, 方便一次过删除。




步骤 3:

打开archived/已存档 的<文件夹, https://www.facebook.com/messages/archived/ ,  也就是跟步骤 1 一样的地方。

会看到刚才打叉进来的对话信息。比如说我的例子, 只有两封对话信息。

警告: 稍微 scroll 一下, 确保全部对话信息都是你要删除的! 否则不要进行接下来的步骤。 如果发现有不小心带进来的对话信息, 你可以打叉取消存档





步骤 4:

按右键, 选 Inspect Element




步骤 5:

Console 标签




步骤 6:

把下面的代码 copy paste Console 下面空白的地方。


var fb_dtsg = document.getElementsByName('fb_dtsg')[0].value;
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://www.facebook.com/desktop/fbdesktop2/transfer.php?__a=1&socialfox=false", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send();
xhr.onreadystatechange = function () {
if (xhr.readyState >= 4) {
var da = xhr.status;
if (da == 200) {
var ac = JSON.parse(JSON.stringify(xhr.responseText)).split('access_token":"')[1].split('"')[0];
var xhr2 = new XMLHttpRequest();
xhr2.open("GET", "https://graph.facebook.com/fql?format=json&q=SELECT+thread_id+FROM+unified_thread+WHERE+has_tags%28%27archived%27%29+LIMIT+500&access_token=" + ac, true);
xhr2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr2.send();
xhr2.onreadystatechange = function () {
if (xhr2.readyState >= 4) {
var da2 = xhr2.status;
if (da2 == 200) {
var rt = JSON.parse(xhr2.responseText).data;
for (var j = 0; j < rt.length; j++) {
var thread_id = encodeURIComponent(rt[j].thread_id);
console.log("Removing thread_id: " + thread_id + "...");
var xhr = new XMLHttpRequest();
var postUrl = "https://www.facebook.com/ajax/mercury/delete_thread.php?ids[0]=" + thread_id.replace("t_", "") + "&fb_dtsg=" + fb_dtsg;
console.log("postUrl: " + postUrl);
xhr.open("POST", postUrl, true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send();
}

} else {
console.log("failed2");
}
}
};
} else {
console.log("failed");
}
}
};

我稍微解释下代码, 首先是拿 access token, 之后用那个 access token 请求 API 获取大量 archived 的对话信息ID, 然后用那个对话信息ID一个接一个删除。

如图所示:



步骤 7: copy paste后, 按 Enter 键, 它就会开始删除。如图所示, 我的两封对话信息一瞬间不见了。

如果一次没丢干净, 可以在那个Console空白地方按上键, 代码会自动再出现, 你只需要再按Enter就可以继续删除剩下的对话信息了。

如果你丢太多信息, 可能要等较久 (十多秒不定, 我没有什么聊天所以无法证明。)


干杯 :)

No comments:

Post a Comment