URL: https://linuxfr.org/users/goffi/journaux/howto-suppression-de-compte-fb Title: HowTo: suppression de compte FB Authors: Goffi Date: 2013年11月06日T21:49:38+01:00 License: CC By-SA Tags: firefox, réseau_social, tutoriel, howto et facebook Score: 36 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. ```python #!/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_2fmucustomimgimgsp_8g08g1sx_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.

AltStyle によって変換されたページ (->オリジナル) /