-
-
Save edjw/61cda68535b237fa7fa8db23842c1b6d to your computer and use it in GitHub Desktop.
// // https://twitter.com/settings/your_twitter_data/twitter_interests | |
// Lots of discussion and improvement of the original script in the comments | |
// Here's the best version that works well | |
// Because Twitter stops the script working after unchecking 50 interests, so you will almost certainly have to run the script multiple times | |
function sleep(milliseconds) { | |
return new Promise(function (resolve) { | |
return setTimeout(resolve, milliseconds); | |
}); | |
}; | |
Array.from(document | |
.querySelectorAll('input[type="checkbox"]')) | |
.filter(checkbox => checkbox.checked == true) | |
.slice(0, 50) | |
.forEach((checkbox, index, array) => | |
sleep(1000).then(() => { | |
console.log(`${index + 1}/${array.length}: Unchecking "${checkbox.parentNode.parentNode.innerText}"`) | |
checkbox.click(); | |
})); | |
@ibrahimab Uncaught TypeError: document.querySelectorAll(...).filter is not a function
for your short scriptlet.
@mirabilos. It was missing Array.from()
around the document.querySelectorAll(...)
I've updated the gist with @ibrahimab's cleaner version with the Array.from() fix as well as a sleep function that might help some people with timeouts and some nicer logging
You can avoid the API lockout by making sure the wait is actually between each unchecking, and extending the timeout as well. With the below I could do 100 in one go, maybe a longer delay would let you go longer (or possibly it's because I've been messing with this for a bit).
Change
sleep(1000).then(() => {
To
sleep(5000 * index).then(() => {
Yes, but if you aren't doing this multiplication then every execution starts at the same time, just offset by 1000
from when the script is executed. Only with the multiplication is it delaying the same amount between each click, to simulate clicking them manually.
Rewrote it to divide the checkboxes into chunks to run the script in batches to prevent hitting twitter's API rate limits.
let chunks = [];
let source = Array.from(document.querySelectorAll('input[type="checkbox"]:checked'));
while (source.length) {
chunks.push(source.splice(0, 20));
}
const event = new MouseEvent('click', {
view: window,
bubbles: true,
cancelable: true
});
let minutes = 10; // amount of time to wait between batches
let interval = setInterval(() => {
if (chunks.length === 0) {
clearInterval(interval);
return;
}
chunks.splice(0, 1)[0].forEach(i => {
i.dispatchEvent(event);
});
}, minutes * 60 * 1000);
People should realize that twitter does not remove the interests, and will continue to add/enable interests whilst using twitter.
Almost funny how this excellent gist is not the first result in Google, but it is the first result in Brave Search for "twitter clear interests"
Yeah… imagine my anger…
… so, how do I run this? Copy/paste the entire script into the developer console? (This is with Firefox)
Update: apparently, yes. Though periodically a popup about a script making the site slow appears… sigh but better than nothing.
Update 2: wow, the long script from this gist actually worked! My “interests” are empty, as they should be!
Here’s to hoping I won’t be annoyed with “topics” every third tweet now.
Update 3: after three days, Twitter has registred me with no less than 196 new “interests”. I guess I have to run this script every day…