Salut à vous,
j'ai (j'avais) un compte FB depuis plusieurs années, que j'ai utilisé un peu au début, puis plus du tout, et que je ne gardais que pour suivre l'évolution du site.
Me rendant compte que je ne m'en servais même pas pour suivre l'évolution, j'ai décidé de le supprimer, et de le nettoyer avant. Aussi j'ai fait un script pour télécharger/détaguer/demander la suppression automatiquement des images où je suis. C'est un script vite fait mal fait, mais qui fait son boulot (aujourd'hui, ça ne sera peut-être plus le cas demain). Je l'ai codé en français parce que je l'avais fait uniquement pour moi, mais je me suis dit que ça pourrait servir aussi je le poste ici, avec quelques autres explications plus bas. Tout ce qui suit vient d'être testé, mais ne fonctionnera peut-être plus demain. Aussi si vous voulez quitter FB, c'est le moment.
Avant toute chose, vous pouvez récupérer les données entrées dans FB en allant dans configuration (l'icône en forme de roue crantée)/compte/général puis « Télécharger une copie de vos données sur Facebook » tout en bas. Ça prend un moment, puis vous recevez un courriel vous indiquant où télécharger l'archive.
Le script qui suit est en python, et nécessite lxml et mechanize. C'est du script destiné à n'être utilisé qu'une fois, mais si quelqu'un se sent le courage d'en faire un truc propre, voire de l'intégrer à un outil comme weboob, ça pourrait faire un super outil de fermeture de compte/transition à un équivalent libre. À ce sujet on a d'ailleurs commencé une dépêche sur les alternatives libres, n'hésitez pas y contribuer: http://linuxfr.org/redaction/news/se-passer-de-google-facebook-et-autres-big-brothers-2-0 .
Le script télécharge les photos où vous êtes étiquetés (il faut au préalable remplir les constantes en début de script: votre identifiant/mot de passe, et le nom court utilisé), vous détague et rempli les 4 (!) formulaires pour demander la suppression au publieur. Malheureusement, au bout d'une dizaine de messages, le quota maximum est atteint et le publieur ne recevra plus la demande. En cas d'erreur (connection timeout par exemple, ce qui m'est arrivé plusieurs fois), un deuxième essai est effectué. Si vous avez IPython, je vous conseille de lancer le script avec « ipython -i untag.py », ce qui vous permettra d'avoir la main pour voir ce qu'il se passe en cas de problème.
#!/usr/bin/python
# -*- coding: utf-8 -*-
EMAIL = "votre@adresse.tld"
PASSWORD = "mot_de_passe"
NOM_COURT = "votre_nom_court"
URL_PHOTOS = "https://www.facebook.com/%s/photos?_fb_noscript=1" % NOM_COURT
REP_PHOTOS = "photos"
START_COUNT = 1 # compteur de téléchargements préfixé aux noms des photos, à changer en cas de plantage
save_pages = False # True pour sauvegarder les dernières pages dans /tmp/_tmp_fb_sauve.html (pratique pour vérifier la réponse à la main)
import os, os.path
import hashlib
import mechanize
from lxml import html
from time import sleep, strftime
br = mechanize.Browser()
br.set_handle_robots(False)
def save_page(html):
if save_pages:
with open('/tmp/_tmp_fb_sauve.html','w') as f:
f.write(html)
def submit_form(keys, values):
def set_form():
br.select_form(nr=0)
for idx,key in enumerate(keys):
br[key] = [values[idx]]
set_form()
try:
br.submit()
except mechanize.URLError:
print u"URLError, deuxième tentative"
br.back()
set_form()
br.submit()
def load_page(url):
try:
br.open(url)
except mechanize.URLError:
print u"URLError, deuxième tentative"
br.back() # on revient en arrière en cas d'ouverture d'url relative
br.open(url)
def pause(minutes):
# non utilisé, à ajouter si vous voulez par exemple faire une
# longue pause pour pouvoir envoyer des messages de demande de suppression
print "pause de %d min (%s)" % (minutes, strftime('%H:%M:%S'))
sleep(60*minutes)
# Ça commence ici
try:
print u"Création du répertoire photos"
os.mkdir(REP_PHOTOS)
except OSError:
print u"Il existe déjà"
print u"ouverture de FB"
br.open("https://www.facebook.com")
forms = list(br.forms())
if forms and forms[0].action.startswith('https://www.facebook.com/login.php'):
print u"Nouvelle session, connexion..."
br.select_form(nr=0)
br["email"] = EMAIL
br["pass"] = PASSWORD
br.submit()
print u"Connecté"
else:
# a priori ça commence toujours une nouvelle session, sauf si vous réutilisez le contexte du butineur (br)
print u"Reprise de session"
count_total = START_COUNT
while True:
print u"\n*** Ouverture de la page des photos ***"
load_page(URL_PHOTOS)
photos = [link for link in br.links() if "photo.php?fbid" in link.absolute_url]
if not photos:
break
print u"Trouvé %d photos sur la première page" % len(photos)
for (count, photo) in enumerate(photos, 1):
print u"\n---\nTraitement de la photo numéro %d de la page (%d total)" % (count, count_total)
print u"Ouverture"
load_page("%s&_fb_noscript=1" % photo.absolute_url)
page_photo = html.parse(br.response())
splitted = br.title().split('-')
author = splitted[0] if not 'Photos' in splitted[0] else splitted[1]
author = author.replace('/','_').strip()
imgs = [img for img in page_photo.iter('img') if img.get('id') == "fbPhotoImage"]
if len(imgs) != 1:
print u"On ne devrait trouver qu'une image !"
print u"images trouvées:", imgs
exit(1)
image = imgs[0]
print u"1) Téléchargement de la photo"
load_page(image.get('src'))
image_data = br.response().get_data()
md5 = hashlib.md5(image_data).hexdigest()
dest = os.path.join(REP_PHOTOS, "%03d_%s_%s.jpg" % (count_total, author, md5))
with open(dest,'w') as fichier:
fichier.write(image_data)
print u"Fait dans %s\n" % dest.decode('utf-8','ignore')
count_total += 1
print u"2) Détagage"
fbid = image.get('src').split('_')[1]
mobile_url = "http://m.facebook.com/photo.php?fbid=" + fbid
print u"fbid trouvé: %s, adresse mobile utilisée: [%s]" % (fbid, mobile_url)
load_page(mobile_url)
page_mobile = html.parse(br.response())
liens_detag = [elem for elem in page_mobile.iter('a') if 'report' in elem.get('href','')]
if len(liens_detag) != 1:
print u"On ne devrait avoir qu'un lien détag !"
print u"lien_detag = %s" % liens_detag
exit(1)
lien_detag = liens_detag[0]
load_page(lien_detag.get('href'))
print u"Envoi formulaire détagage"
br.viewing_html = lambda: True # hack nécessaire pour cette page
submit_form(['untag', 'expand_report'], ['1','1'])
print u"deuxième formulaire"
submit_form(['first_choice'], ['dont_want'])
print u"troisième formulaire"
try:
submit_form(['emotion'], ['other'])
except mechanize.ControlNotFoundError:
print u"On est apparemment sur le dernier formulaire (amis en commun ?)"
submit_form([], [])
print u"Fait (ou pas !)"
save_page(br.response().read())
continue
print u"quatrième formulaire"
submit_form([], [])
save_page(br.response().read())
print u"Enfin fait (ou pas !)"
print u"Détagage des photos fini"
D'autre part, j'ai voulu voir ce qu'on pouvait faire pour nettoyer le compte, je suis tombé sur cette page: http://www.wikihow.com/Permanently-Delete-a-Facebook-Account et celle ci: http://www.wrapcode.com/how-tos/remove-facebook-activities-with-imacros/ .
La deuxième page utilise iMacros, qui est une extension malheureusement propriétaire de firefox. Je suppose qu'il est possible de faire la même chose avec quelque chose comme Selenium IDE ou Greasemonkey, aussi une solution libre est bienvenue. L'exemple donné ne fonctionne pas pour un compte en français, aussi j'ai adapté une des macros données en commentaire, la voici:
VERSION BUILD=8530828 RECORDER=FX
TAG POS=1 TYPE=SPAN ATTR=CLASS:uiButtonText
TAG POS=1 TYPE=SPAN ATTR=TXT:Supprimer
TAG POS=1 TYPE=INPUT:BUTTON ATTR=NAME:ok&&VALUE:Supprimer
WAIT SECONDS = 4
Ça marche plutôt pas mal: sélectionnez votre historique (https://www.facebook.com/NOM_COURT/allactivity), puis filtrez pour n'afficher que les commentaires. Déroulez au maximum pour tout afficher, puis mettez un grand nombre dans le Max de « rejouer la macro », cliquez sur « jouer (répéter) » et laissez faire. C'est bien de faire ça dans une fenêtre à part, histoire de ne pas perturber votre utilisation de Firefox/Iceweasel pendant que ça mouline. Vous pouvez l'utiliser avec vos propres commentaires et ceux de vos contacts (enfin amis dans le vocables FB).
Il reste les statuts, j'ai fait une variante en utilisant l'enregistrement de macro et en adaptant la précédente. Je ne sais pas si ça va marcher pour vous, mais pour moi ça a marché:
VERSION BUILD=8530828 RECORDER=FX
TAG POS=3 TYPE=I ATTR=CLASS:mrs<SP>_2fmu<SP>customimg<SP>img<SP>sp_8g08g1<SP>sx_8e1c65&&TXT:
TAG POS=1 TYPE=SPAN ATTR=TXT:Supprimer
TAG POS=1 TYPE=INPUT:BUTTON ATTR=NAME:ok&&VALUE:Supprimer
WAIT SECONDS = 4
À entrer en affichant toutes les activités (sans filtrer sur les commentaires) et toujours en déroulant au maximum. De temps en temps ça se bloque, il faut alors relancer à la main. Des « WAIT SECONDS = XXX » bien placés peuvent certainement améliorer ça.
Un passage final à la main sur toutes les activités (sans filtre) peut permettre de s'assurer qu'on n'a rien laissé d'indésirable, le cas échéant vous pouvez utiliser la même technique que pour les statuts (utilisation de l'enregistrement de macro pour sélectionner l'icône, puis adaptation de celle donné).
À noter que le script Python et la macro peuvent fonctionner en même temps.
Pour prévenir vos contacts de votre départ, le plus simple semble être de faire un événement et d'inviter tout le monde. Laissez au moins quelques jours histoire que tout le monde puisse voir.
Les albums photos de vos amis sont téléchargeables avec les kipi plugins qui sont utilisables avec Digikam ou Gwenview.
Enfin, pour la suppression, le lien est difficile à trouver, mais vous pouvez y accéder directement en cliquant sur https://ssl.facebook.com/help/contact.php?show_form=delete_account . Pour la postérité, je reproduis le message mis à ce moment pour dissuader de continuer:
« Si vous ne pensez jamais réutiliser Facebook et souhaitez effacer complètement votre compte, nous pouvons nous en charger. Rappelez-vous cependant que vous ne pourrez ni réactiver votre compte ni récupérer son contenu ou ses informations. Si vous souhaitez tout de même supprimer votre compte, cliquez sur Supprimer mon compte. » (j'aime [icône pouce] l'utilisation des « jamais », « complètement », et du style qui fait bien comprendre la gravité de la chose et son côté irréversible).
Après avoir validé et entré le CAPTCHA, il faudra encore attendre 14 jours sans vous connecter (ce qui annulerait la demande de suppression). Le message de confirmation est le suivant:
« **Supprimer définitivement le compte**
Votre compte a été désactivé du site et sera supprimé définitivement dans 14 jours. Si vous vous connectez à votre compte dans les 14 jours, vous aurez la possibilité d’annuler votre demande. »
On laisse tout de même une chance de se racheter à la pauvre brebis égarée. Rapidement, une popup apparaît avec:
« **Non connecté(e)**
Veuillez vous connecter pour continuer. »
Sachant qu'une reconnexion annule la procédure de suppression.
Je n'ai pas reçu de courriel de confirmation, aussi ma seul façon de vérifier la suppression est d'attendre au moins 14 jours et de tenter une connexion pour voir si elle bien impossible comme attendu.
Pensez à supprimer tous les cookies liés à FB (dans Firefox/Iceweasel aller dans les préférences, puis « vie privée » puis « supprimer des cookies spécifiques », entrez « facebook » dans le filtre et cliquez sur « supprimer tous les cookies ». Il faudrait faire de même avec les autres sites liés à FB, si vous avez des suggestions en commentaires).
Bien évidemment, vos données ont de fortes chances d'être toujours sur les disques de FB, au moins dans les sauvegardes. Disons que les étapes décrites ici permettent au moins d'éviter que ça se retrouve trop facilement.
Il ne vous reste plus qu'à soit totalement raccrocher de ce genre de truc, soit trouver une alternative qui vous convient ou encore aider au développement d'une alternative libre qui pourrait vous convenir avec un coup de pouce.
Enfin, le script et ce journal sont sous CC By-SA, n'hésitez pas à adapter aux évolutions de FB, à incorporer dans des outils de migration automatique, etc.
# Ah si !
Posté par Goffi (site web personnel, Mastodon) . Évalué à 4.
Ah si, je viens de recevoir un courriel de confirmation, le voici:
« Bonjour XXX,
Nous avons reçu une demande de suppression définitive de votre compte. Votre compte a été désactivé du site et sera supprimé définitivement dans 14 jours.
Si vous n’avez pas demandé la suppression définitive de votre compte, veuillez vous connecter à Facebook pour annuler cette demande :
https://www.facebook.com/login.php
Merci,
L’équipe Facebook »
[^] # Re: Ah si !
Posté par Marotte ⛧ . Évalué à 8. Dernière modification le 06 novembre 2013 à 22:24.
Je saisi pas l'intérêt de faire un script pour virer les contenus un par un si tu finis par supprimer entièrement le compte.
J'ai rien compris ?
[^] # Re: Ah si !
Posté par Goffi (site web personnel, Mastodon) . Évalué à 9.
Je ne crois pas que la suppression de compte supprime les contenus. Peut-être je me trompe (et dans ce cas wikihow aussi), mais je préfère prendre le maximum de précautions.
[^] # Re: Ah si !
Posté par Atem18 (site web personnel) . Évalué à 3.
Facebook n'a pas de copie de tes images, ni d'immenses clusters, voyons.
[^] # Re: Ah si !
Posté par Goffi (site web personnel, Mastodon) . Évalué à 7.
Oui ça ça va certainement rester sur leurs disques, comme précisé en fin de journal. J'entendais plutôt sur les pages des contacts (enfin « amis »): je ne sais pas (et ne crois pas) que les commentaires postés, les tags ou ce genre de choses sont supprimés de leur contexte, et dans le doute je le fais avant. En plus ça permet de récupérer les photos par la même opération, photos qui ne sont pas dans l'archive envoyée.
[^] # Re: Ah si !
Posté par dave_null (site web personnel) . Évalué à 1.
Quand tu suprime quelque chose sur facebook, il n'est pas vraiment supprimé mais juste masqué. À mon avis, ton script est utile pour les photos mais la suppression du reste ne change rien au final.
[^] # Re: Ah si !
Posté par Goffi (site web personnel, Mastodon) . Évalué à 2.
ça prévient au moins les gens qui ont publié les photos qu'on souhaite les supprimer, mais au bout d'une dizaine de messages le quotas et atteint et on ne peut plus les prévenir.
Les tags je me demande ce que ça fait de ne pas les supprimer mais de supprimer le compte: est-ce que le nom reste ou est-ce qu'ils sont supprimés ? Enfin encore une fois dans le doute vaut mieux prendre ses précautions :)
[^] # Re: Ah si !
Posté par GG (site web personnel) . Évalué à 3.
Lorsqu'un compte d'un contact est supprimé, on ne voit plus son avatar. Par contre le "nom facebook" reste.
Si on cherche essaye de regarder la page du contact, on obtient un message précisant que le compte n'est plus disponible.
Sinon, FB et consort ne suppriment rien, puisque tout ce qui est uploadé leur "appartient" pour n'importe quel usage. En France, le droit de paternité n'est effectivement pas transféré, mais c'est tout.
Je n'ai pas vérifié dernièrement si un lien vers un document
supprimémasqué était encore visible.J'ai un compte de test sur lequel je peux faire des essais… avant de le supprimer.
Bonne journée
G
Pourquoi bloquer la publicité et les traqueurs : https://greboca.com/Pourquoi-bloquer-la-publicite-et-les-traqueurs.html
[^] # Re: Ah si !
Posté par calandoa . Évalué à 10.
Le vrai intérêt du script est de chopper ton mot de passe pour que Goffi puisse se connecter à ton compte et récupérer comme contact toutes tes copines.
[^] # Re: Ah si !
Posté par Goffi (site web personnel, Mastodon) . Évalué à 2.
je viens de faire le test 16 jours après la demande de suppression, mon compte a bien été supprimé…
# "Télécharger une copie de vos données"
Posté par Zertrin (site web personnel) . Évalué à 0.
Il est apparemment possible de récupérer directement toutes ses données dans une archive (cf. https://www.facebook.com/help/405183566203254)
Je n'ai pas testé donc ne sais pas ce que cela vaut, mais c'est peut être utile en complément pour récupérer d'autres choses que juste les photos avant de tirer un trait sur son compte.
[^] # Re: "Télécharger une copie de vos données"
Posté par Goffi (site web personnel, Mastodon) . Évalué à 5.
Oui, c'est expliqué en début de journal.
[^] # Re: "Télécharger une copie de vos données"
Posté par Zertrin (site web personnel) . Évalué à 1.
Arf pourtant je pensais avoir lu attentivement, j'ai sauté ce paragraphe accidentellement.
# voire aussi
Posté par Krunch (site web personnel) . Évalué à 3.
http://justdelete.me/
Bon, c'est juste les liens utiles mais il pourrait être intéressant de compléter ce site en référençant ce genre de scripts aussi.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
# suicide machine
Posté par papap . Évalué à 4.
Il y a déjà un type qui fait ça : http://suicidemachine.org/
[^] # Re: suicide machine
Posté par Goffi (site web personnel, Mastodon) . Évalué à 8.
Sur le forme:
c'est quand même impressionnant la vidéo de 3 min avec de l'émotion et tout (le livre dans la main, les enfants qui sautent dessus) autour d'un pauvre script, ils sont très fort :D
J'aime bien aussi les phrases du style (dans la FAQ) « Some Social Suiciders reported that their lives has improved by an approximate average of 25% » qui ne veulent absolument rien dire, je me demande si c'est parodique ou si le marketing a vraiment besoin de mettre des chiffres comme ça partout.
Enfin bref, ça c'était le côté ridicule
Sur le fond:
On peut faire un business de tout visiblement. Je ne sais pas trop comment ils se rémunèrent (ils songent à rendre le site payant apparemment, cf FAQ: « Usage of Web 2.0 Suicide machine is for free at the moment. », est-ce qu'il affichent de la pub ? Est-ce qu'il en mettent sur les comptes qu'ils suppriment (oui au moins pour FB, ils joignent le groupe « Social Network Suiciders ») ?
Bon sinon ça reste intéressant ne serait-ce que pour la mise à jour des scripts en continu, mais pour moi il est hors de question de filer mon mot de passe à un serveur distant (qui m'assure qu'ils ne stockent pas les infos ? Qu'ils ne publient pas des choses avec le compte ? etc), ce genre de script doit être libre et public (ce qui d'ailleurs permet de le mettre à jour s'il est populaire).
Sur le plan technique en plus, c'est plus simple de le faire de chez soi: leurs serveurs étant à l'étranger, il peut y avoir des sécurités à passer (d'ailleurs dit dans leur FAQ), j'ai eu le tour avec FB.
# Aller plus loin
Posté par vlamy (site web personnel) . Évalué à 2.
Je ne vois pas quelle partie de ton script permet d'effacer le backup de tes données sur les serveurs de la NSA… :)
Plus généralement, je crois que cela montre à quel point il est difficile d'avoir la maîtrise du contenu que l'on diffuse sur Internet. En ce sens j'apprécie le journal, même si je savais déjà que c'était dur d'effacer un compte Facebook.
J'irai plus loin en mentionnant l'intérêt d'apposer systématiquement des licences à tout ce que l'on diffuse, comme pour ce journal :) C'est une habitude qui me parait saine, même si pas toujours facile à mettre en place. De plus je me vois mal apposer une licence, qui plus est libre, sur un contenu secret qui risquerait de mettre nos vies en péril si les divers programmes d'espionnage venaient à le lire :)
Bref, les licences libres nous sauveront !
Comment ça « ou pas ! » ?
[^] # Re: Aller plus loin
Posté par Professeur Méphisto . Évalué à 4.
et si finallement le plus grand intérêt de fessebouc est d'attirer l'attention sur ces problématique et rendre vigilant avant l'arrivée du prochain casse-couille ?
Comment ça « rêveur ! » ?
[^] # Re: Aller plus loin
Posté par vlamy (site web personnel) . Évalué à 2. Dernière modification le 07 novembre 2013 à 09:45.
Joli point de vue.
La vie sans rêves c'est trop triste ! De plus, les rêves c'est le moteur de l'innovation, de la création, ça nous pousse à aller de l'avant.
Imagines le gars qui, il y un siècle, se disait « je veux aller dans l'espace ! ». Il lui fallait une bonne dose de rêves (et partagés en plus) pour réaliser ce projet !
# G+ ?
Posté par fredix . Évalué à 3.
Manque plus que Google+ /o\
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 10.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: G+ ?
Posté par vlamy (site web personnel) . Évalué à 6. Dernière modification le 07 novembre 2013 à 13:47.
Tu veux dire
# Outils mieux adaptés ?
Posté par Laurent J (site web personnel, Mastodon) . Évalué à 6.
Hello,
Je vois fleurir des scripts pour aller faire des choses sur une page web, utilisant des libs plus ou moins efficace, parce que n'utilisant pas des "vrais" navigateurs. Par exemple, la page récupérée par mechanize n'est pas "vivante": le javascript n'est pas exécuté, et quand on voit que de plus en plus d'application génère du HTML à la volée : on ne peut pas faire grand chose sur ladite page web si le JS n'est pas executé. D'où d'ailleurs l'utilisation de iMacro pour certaines choses ici, infaisable avec mechanize si j'ai bien compris.
Alors Messieurs Dames, sachez qu'il existe des navigateurs "scriptables", c'est à dire que ce sont des navigateurs pilotables par un script. Et par navigateur, j'entends des vrais navigateurs, avec un vrai moteur de rendu HTML, un vrai moteur JS pour exécuter le js de la page etc. Avec ce genre d'outils, le code de la page web va donc s’exécuter pour de vrai.
Ainsi donc, vous écrivez un script (en JS), qui va dire au navigateur, "ouvre cette page", "click ici", "donne moi le contenu là" etc.. Et le navigateur va faire ce qu'on vous demande. Comme Mechanize, mais en vrai.
sachant qu'ils ont à peu près la même API…
Et avec le framework CasperJS, l'API est encore plus simple à utiliser. (et "accessoirement", il sert beaucoup à réaliser des tests fonctionnels, en remplacement de Selenium et autres).
PS: ce commentaire est une pub déguisée, écrit par l'auteur de l'un de ces navigateurs ;-)
PS2: désolé :-)
[^] # Re: Outils mieux adaptés ?
Posté par Laurent J (site web personnel, Mastodon) . Évalué à 4.
mauvaise url de casper. voici la bonne : http://casperjs.org
[^] # Re: Outils mieux adaptés ?
Posté par Goffi (site web personnel, Mastodon) . Évalué à 2.
Salut Laurent,
oui je connais ces outils (depuis peu), vu que j'envisage de les utiliser pour automatiser certains tests de SàT (j'hésite entre PhantomJS et Selenium pour le moment).
Disons que pour cette tache, le javascript n'était pas nécessaire (sauf pour iMacros, mais là vu que j'avais déjà une macro presque fonctionnelle à disposition, et que PhantomJS ou Selenium j'aurais du me taper de la doc pour les utiliser, j'ai été au plus simple), et le couple mechanize/lxml permet quand même de faire les choses rapidement (surtout que je le connais déjà, et puis c'est du Python :) ).
Ceci merci pour les liens, c'est toujours utile à connaître.
# Sinon, il y a aussi la « mauvaise » méthode…
Posté par Obsidian . Évalué à 2.
On avait aussi évoqué cette façon de faire, il y a quelques temps :-)
https://linuxfr.org/users/claudex/journaux/rsf-et-charlie-hebdo-d%C3%A9couvrent-les-m%C3%A9faits-de-la-centralisation#comment-1287327
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.