Alors ce matin je regardais mon twitter et je me suis rendu compte que j'avais trop de tweets. Après une petite recherche je me suis aperçu qu'il n'y avait pas de moyen rapide et gratuit pour supprimer les tweets.
Je vais vous montrer comment on peut utiliser le moteur du navigateur pour exécuter des commandes.
Pour les gens qui ne veulent pas voir les détails vous pouvez directement aller à la fin.
Vous y trouverez la version condensé et comment l'utiliser.
Car on est jamais mieux servi que par soi-même
On va avoir besoin de notre identifiant twitter, pour le récupérer on va "scanner" le panneau changement de profil en bas à gauche.
Pour ce faire on va récupérer la div du changement de profil et extraire le texte html pur.
Puis on prends la deuxième ligne et on efface juste le premier caractère ( qui est un @ normalement ).
function get_id() {
return document.querySelector('header div[data-testid="SideNav_AccountSwitcher_Button"]').outerText.split('\n')[1].slice(1);
}
Maintenant tout va se faire sur la page profil. C'est la page qui porte l'URL : 'https://twitter.com/<votre_id>'.
On va indiquer au navigateur une procédure pour effacer un tweet.
Cette procédure se déroule en plusieurs étapes :
- Trouver un de nos tweets et simuler un clic sur le bouton menu.
- Trouver le bouton 'Supprimer' du menu qui vient de s'afficher.
- Trouver le bouton de confirmation et simuler un clic dessus.
function delete_top_tweet_or_reply() {
// On récupère l'ID
let id = get_id();
// On trouve un de nos tweet
let lien = document.querySelector('article div[data-testid="User-Names"] a[href="/'+id+'"]');
var found = false;
if (lien) {
found = true;
// Maintenant cliquons sur le menu
lien.closest("article").querySelector('[aria-haspopup="menu"]').click();
// On trouve le bouton supprimer
let menu_delete_item = document.querySelector('[role="menuitem"]');
// On vérifie que c'est bien le bouton de suppression ( sécurité )
if (menu_delete_item.querySelector('span').innerText == 'Supprimer' ) {
// On clique dessus et on confirme
menu_delete_item.click();
document.querySelector('[role="button"][data-testid="confirmationSheetConfirm"]').click();
}
}
return found;
}
Maintenant si vous lancez la fonction, votre navigateur vas supprimer votre tweet le plus haut/récent sur la page.
delete_top_tweet_or_reply();
Nous avons maintenant le moyen de supprimer un tweet, c'est bien mais fastidieux. Écrivons un code qui permet de supprimer plusieurs tweets d'un coup. Nous ajouterons aussi un petit temps d'attente pour ne pas aller trop vite.
async function delete_tweets_or_replies(number) {
for ( i = 0 ; i < number ; i++ )
{
await new Promise(r => setTimeout(r, 2000));
delete_top_tweet_or_reply();
}
}
Maintenant pour supprimer les 5 premiers tweets de la page :
delete_tweets_or_replies(5)
Oui mais les retweet et les likes ?
Alors pour un retweet on peut utiliser la fonction suivante :
function unretweet(){
let button = document.querySelector('article div[data-testid="unretweet"]');
var found = false;
if (button) {
found = true;
// On récupère le tweet associé
let article = button.closest("article");
button.click();
// On clic sur Undo Retweet
document.querySelector('[role="menuitem"][data-testid="unretweetConfirm"]').click();
}
return found;
}
async function unretweets(number) {
for ( i = 0 ; i < number ; i++ )
{
await new Promise(r => setTimeout(r, 2000));
unretweet();
}
}
D'une manière analogue on peut "unliker" des tweets.
Voici le code :
function unlike_tweet(){
// On trouve un bouton unlike
let button = document.querySelector('article div[data-testid="unlike"]');
var found = false;
if ( button ) {
found = true;
// On récupère le tweet associé
let article = button.closest("article");
// On clique sur le bouton unlike
button.click();
// On supprime le tweet du dom de la page pour pouvoir les enchainer
article.parentNode.removeChild(article);
}
return found;
}
async function unlike_tweets(number) {
for ( i = 0 ; i < number ; i++ )
{
await new Promise(r => setTimeout(r, 2000));
unlike_tweet();
}
}
et pour unlike les 10 premier tweet de la page :
unlike_tweets(10);
Oui mais moi je veux tout supprimer !
On peut écrire une fonction simple qui supprime tout sur la page courante :
async function clean_all(){
// Tant qu'il y a quelque chose a supprimer on supprime
while (delete_top_tweet_or_reply() || unretweet() || unlike_tweet() )
{
await new Promise(r => setTimeout(r, 2000));
}
console.log("J'ai fini !");
}
Trop long j'ai pas lu !!!
On peut utiliser le mode développeur des navigateurs pour exécuter du javascript, les raccourcis claviers peuvent être diffèrent en fonction du navigateur.
Pour Firefox c'est CTRL+SHIFT+K, Pour Chrome/Chromium c'est CTRL+SHIFT+I.
Assurez vous d'être en mode console.
Vous devez naviguez sur votre profile puis en fonction de ce que vous voulez faire allez soit sur "tweet et réponses" soit sur vos "likes".
Ensuite copier le code suivant dans la console dans la console :
function get_id(){return document.querySelector('header div[data-testid="SideNav_AccountSwitcher_Button"]').outerText.split('\n')[1].slice(1);}
function delete_top_tweet_or_reply(){let id=get_id();let lien=document.querySelector('article div[data-testid="User-Names"] a[href="/'+id+'"]');var found=false;if(lien){found=true;lien.closest("article").querySelector('[aria-haspopup="menu"]').click();let menu_delete_item=document.querySelector('[role="menuitem"]');if (menu_delete_item.querySelector('span').innerText == 'Supprimer' ){menu_delete_item.click();document.querySelector('[role="button"][data-testid="confirmationSheetConfirm"]').click();}}return found;}
async function delete_tweets_or_replies(number){for(i=0;i<number;i++){await new Promise(r=>setTimeout(r,2000));delete_top_tweet_or_reply();}}
function unretweet(){let button=document.querySelector('article div[data-testid="unretweet"]');var found=false;if(button){found=true;let article=button.closest("article");button.click();document.querySelector('[role="menuitem"][data-testid="unretweetConfirm"]').click();}return found;}
async function unretweets(number){for(i=0;i<number;i++){await new Promise(r=>setTimeout(r,2000));unretweet();}}
function unlike_tweet(){let button=document.querySelector('article div[data-testid="unlike"]');var found=false;if(button){found=true;let article=button.closest("article");button.click();article.parentNode.removeChild(article);}return found;}
async function unlike_tweets(number){for(i=0;i<number;i++){await new Promise(r=>setTimeout(r,2000));unlike_tweet();}}
async function clean_all(){while(delete_top_tweet_or_reply()||unretweet()||unlike_tweet()){await new Promise(r=>setTimeout(r,2000));}console.log("J'ai fini !");}
C'est une version minifié à la main pour être plus facile à copier.
Maintenant toujours dans la console vous pouvez appeler les fonctions dont vous avez besoin.
Pour supprimer des tweets ou des réponses :
delete_tweets_or_replies(5)
Et pour enlever vos likes sur la page likes:
unlike_tweets(5)
Et pour nettoyer toute la page:
clean_all()
Et voilà que ce soit pour le ménage de printemps ou pour partir sur Mastodon vous avez les outils pour nettoyer votre compte twitter.