使用Javascript编程自动取消标记Facebook照片

30

我刚刚花了一个小时来研究这个问题:我想编写一个JavaScript程序来自动解除我在Facebook上的照片标记。一旦它能正常工作,我将在Firebug控制台中运行它,并从所有Facebook照片中解除标记(无法通过图形用户界面完成此操作)。

我想知道您们是否有一些建议可以帮助我完成这个任务。

我已经有几种方法的想法,但还没有取得太大进展。我尝试使用AJAX方法创建一个新的HTML请求,并将其指向remove_tag URL,URL看起来像这样:

/ajax/photo_tagging_ajax.php?pid=(PICTURE_ID)&id=(PICTURE_OWNER_ID)&subject=(SOMETHING)&name=(YOUR+NAME)&action=remove

毫不意外,这并没有起作用。我一直在Firebug中检查HTTP响应,它与我实际上取消照片标记时的响应非常不同。甚至它都没有发送POST请求。

为了澄清,我还尝试在“删除标记”锚点上使用getElementById,然后进行文档位置交换,但那并没有奏效。我也无法对其进行.click()操作。

这种方法是否可行,还是我在做白日梦?(现在已经凌晨4点了)


8
取消在Facebook上标记照片的做法值得赞赏。 - Michael Aaron Safyan
谢谢。我们需要找到一种方法来做这件事。顺便说一句,我受到这个的启发:http://www.reclaimprivacy.org - Tal
3个回答

7

来自DCoder,通过Hacker News

在照片页面内(http://www.facebook.com/photo.php?pid=xxx&id=y),使用Firebug、FireQuery、jQuery no conflict作为$jq:

  var loc = window.location.href.match(/pid=(\d+)&id=(\d+)/);

  var args = {
    pid: loc[1], // photo ID
    id: loc[2], // request sender id? photo owner id? not sure, haven't tested, but my user ID worked when trying to remove someone from a photo in my album
    subject: loc[2], // user ID to remove
    name: '', // not checked
    action: 'remove',
    __a: 1,
    fb_dtsg: $jq('input[name="fb_dtsg"]').val(),
    post_form_id: $jq('#post_form_id').val(),
    post_form_id_source: 'AsyncRequest'
  };

  $jq.post('/ajax/photo_tagging_ajax.php', args);

它不会更新用户界面。需要使用fb_dtsg和post_form_id,它们似乎是反跨站请求伪造令牌。还没有进行足够的实验来确定它们是否可以多次重复使用。


我会测试一下。虽然我从未使用过FireQuery,但这听起来很有前途! - Tal
那个正则表达式缺少一个情况。Facebook有时在pid和id之间会有一些东西。只需在它们之间添加.*,就可以解决问题:var loc = window.location.href.match(/pid=(\d+).*&id=(\d+)/);乍一看,这对我不起作用。它确实发送了某种请求,但图片仍然被标记。 - Tal

3

因为我不确定你是否在 HN 上获取了我的更新版本:

  var loc = window.location.href.split('?')[1].split('#')[0].split('&');
  var qs = {};
  $jq.each(loc, function(ix, el) {
   var m = el.split('='), k = m[0], v = m[1];
   qs[k] = v;
  });

  var args = {
    pid: qs.pid, // photo ID
    id: qs.id, // photo owner ID
    subject: Env.user, // user ID to remove
    name: '', // not checked
    action: 'remove',
    __a: 1,
    fb_dtsg: Env.fb_dtsg,
    post_form_id: Env.post_form_id,
    post_form_id_source: 'AsyncRequest'
  };

  $jq.post('/ajax/photo_tagging_ajax.php', args);

1

Chickenfoot http://groups.csail.mit.edu/uid/chickenfoot/ 是 Firefox 插件,它可能是使用 Firebug 控制台的替代选择:您可以编写宏/脚本来自动执行浏览器中的重复任务。您编写代码的操作与您实际点击、填充表单或进行其他操作没有任何区别。据我所记,它还有用于遍历 HTML 等的 DOM 接口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接