前段时间由于帐号密码被撞库,instagram 被人盗去关注了好多广告帐号,大概有 1000 多个。登录进去一看吓了一跳,赶紧改了密码。可是怎么把这 1000 多号人取消关注,却犯了难。
首先我想借助官方的力量,可是并没有在 instagram 里找到人工服务的地方,也没有发现提交工单的表单;去 twitter @ 也没人理。要是 instagram 的 web 页面能够有 unfollow 的按钮,那倒还好办,异步发一堆 unfollow 请求就行了(被盗的 twitter 就是这样取消所有关注的,其实就是简单的$(something).click()),可惜没有。移动端不是很了解,不知道如何将一堆点击操作换成代码。也曾经想利用 instagram 的 API 自己写一个批量 unfollow 的脚本,然而 instagram 的安全等级太高,给出的权限很少,申请高级的权限还被拒了,所以这条路也走不通了。只好另寻他法了。
于是在 quora 的帮助下找到了 unfollowgram。
进入 unfollowgram 主页,按照要求使用 instagram 的帐号登录之后,选择「who doesn’t follow me back」选项,然后执行如下代码,获取所有的将要 unfollow 的用户的 id。
var uids = $("#thelist li a.unfollow").map(function(val, i) {
return $(i).attr('id');
}).toArray()
unfollowgram 没有提供批量 unfollow 的功能,接下来就要一个个的 unfollow 这些 users。
注意请求的频率,instagram 对每个 client 的限速是每小时 60 个 relationship 请求,但是 unfollowgram 似乎自己也有限制,每次超过 20 个就会出错,所以我改成每 3 分钟一个请求。代码如下。
var unfollow = function(uids) {
uid = uids.shift();
$.ajax({
type: 'POST',
url: 'http://unfollowgram.com/en/unfollow.ajax',
data: 'uid=' + uid,
// async: false
});
console.log(uids.length);
if (uids.length > 0) {
setTimeout(unfollow, 180000, uids);
}
}
接下来执行unfollow(uids)即可。1000 个请求,每 3 分钟执行一个,没办法,只能放那儿跑了,还得注意 unfollowgram 可能会被登出。
仍然不够完美,如果你有更好的方法,请务必告诉我。
PS: 在 instagram web 端找到了 unfollow 的方法,但是官网也有速度限制,目前来看每分钟一个问题不大,6s 一个经常遇到速度限制。
var unfollow = function(uids) {
uid = uids.shift();
$.post("https://www.instagram.com/web/friendships/" + uid + "/unfollow/");
console.log(uids.length);
if (uids.length > 0) {
setTimeout(unfollow, 60000, uids);
}
}