2010-05-18 8 views
30

Spędziłem ostatnią godzinę, hackując: Chcę napisać procedurę Javscript, aby programowo odłączyć się od zdjęć na Facebooku. Gdy to zadziała uruchomię go w konsoli Firebug i usuniemy z siebie wszystkie zdjęcia z Facebooka (nie da się tego zrobić poprzez GUI).Programowanie Untag FB Photos with JavaScript

Chciałem sprawdzić, czy mieliście jakąś radę, żeby zabrać mnie w podróż.

Mam na myśli kilka metod, ale jeszcze nie posunąłem się za daleko. Próbowałem podejście AJAX tworząc nowe żądanie HTML i kierując go do adresu URL remove_tag, który wygląda mniej więcej tak:

/ajax/photo_tagging_ajax.php?pid= (PICTURE_ID) & id = (PICTURE_OWNER_ID) & subject = (coś) & name = (imię + nazwisko) & action = usunąć

Nie surprisin Gly, to nie działa (jeszcze). Sprawdzałem odpowiedź HTTP w Firebug i jest zupełnie inna niż ta, kiedy faktycznie usuwam obrazek. Nie wysyła nawet żądania POST.

Dla wyjaśnienia, próbowałem również zrobić getElementById na kotwicy "remove tag", a następnie wykonuję switcharoo document.location, ale to nie działa. Nie mogę również zrobić na tym pliku .click().

Czy to będzie możliwe, czy też śnię? (to prawie 4AM)

+8

+1 za usuwanie znakowania zdjęć z Facebooka. –

+0

Dzięki. Musimy znaleźć sposób, aby to zrobić. Zainspirowało mnie to, przy okazji: http://www.reclaimprivacy.org – Tal

Odpowiedz

3

Ponieważ nie jestem pewien, czy odebrał moją zaktualizowaną wersję na 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/ to wtyczka do Firefoksa, która może być alternatywą dla konsoli Firebug: możesz pisać makra/skrypty, aby zautomatyzować powtarzalne czynności w przeglądarce. Działania, które kodujesz, nie różnią się od klikania, wypełniania formularzy czy cokolwiek innego. O ile pamiętam, jest interfejs DOM na przejeżdżające html itp

7

Od DCoder, poprzez Hacker News:

Korzystanie Firebug, FireQuery, jQuery żadnego konfliktu jako $ jq, od wewnątrz strony ze zdjęciami (http://www.facebook.com/photo.php?pid=xxx&id=y) :

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); 

Nie aktualizuje interfejsu użytkownika. Parametry fb_dtsg i post_form_id są wymagane i wydają się być tokenami anty-CSRF. Nie eksperymentowałem na tyle, by wiedzieć, czy można je wielokrotnie wykorzystać.

+0

Będę testować to. Nigdy nie używał FireQuery, ale brzmi to obiecująco! – Tal

+0

W tym regexie brakuje jednego przypadku. Facebook czasami ma pewne zmiany między pid i id. Po prostu dodaj. * Pomiędzy i to zadziała: var loc = window.location.href.match (/ pid = (\ d +). * & Id = (\ d +) /); Przy pobieżnym spojrzeniu to nie działa dla mnie. Wysyła żądanie, ale zdjęcie pozostaje oznaczone. – Tal