5 ms·
Ask HN: How would you improve this bash oneliner for deleting tweets?
Many people use tweet deletion services, which periodically remove everything from their Twitter timeline; I wondered if it could be done from a Bash command line.
I wrote up my experiences as an explainer for nontechnical people: https://jamiehall.cc/2020/03/10/delete-all-your-tweets-with-one-line-of-bash/ https://jamiehall.cc/2020/03/10/delete-all-your-tweets-with-...
TL;DR, here is the oneliner I've been using:
$ twurl "/1.1/statuses/user_timeline.json?screen_name=YOUR_TWITTER_HANDLE&count=200
&max_id=$(
twurl '/1.1/statuses/user_timeline.json?screen_name=YOUR_TWITTER_HANDLE&count=200&include_rts=1'
| jq -c -r '.[] | .id_str' | head -10 | tail -1)
&include_rts=1"
| jq -c -r '.[] | .id_str'
| parallel -j 10 -a - twurl -X POST /1.1/statuses/destroy/{1}.json
> /dev/null
[Edit: I've put line breaks in there to make it more legible.]
I'm curious if it's possible to do better. In particular: could this be more elegant? Is it possible to do it using common built-ins, instead of twurl and jq?
Any suggestions or improvements would be very welcome!
- toomuchtodo 7y agoYou might consider putting this in a GitHub Gist, sharing the link for it, and accept comments and improvements within the Gist comments functionality. This would also allow others to fork your code to improve upon or keep a copy for themselves.
- jamiehall 7y agoGreat idea, thanks! https://gist.github.com/nerdcha/3e811ef28d04561f73337e46267a0d5c https://gist.github.com/nerdcha/3e811ef28d04561f73337e46267a...
- toomuchtodo 7y agoDid you get the feedback you were looking for?
- benburleson 7y ago(Security risks aside,) That can even allow people to curl and pipe to run in the terminal direct from github.
- deleted 7y ago[deleted]
- mirimir 7y agoNot a Twitter user here, but would this delete retweets by others of your tweets? Those might include tweets that you'd most want to delete. As well as ones that you'd most want to retain, for that matter.
- jamiehall 7y agoYes, it takes care of that; if someone has retweeted you with a comment, the thing they're commenting on is replaced with "This tweet is no longer available." (Obviously, it's no defence against people screenshotting your tweet, manually copy-pasting what you said, etc etc.)
- viraptor 7y agoI don't think there's a good reason to calculate the max_id every time. If you want to delete all tweets, you could skip it.
- staktrace 7y agoYou could improve it by making it not a one-liner! Usually making it a multiple-liner can improve readability. And unless you're typing it into the command line directly everytime you run it (as opposed to putting it in a file that you invoke) it doesn't really matter how many lines it has.
- wespiser_2018 7y agoI came here to say this. In addition, searching through bash history is a terrible "save and fetch" interface
- Normal_gaussian 7y agoIt's not just readability. One day the code breaks. For a one liner I have to pick it apart, add logging / diagnostics, fix it, and reassemble. The two most time consuming and error prone parts of that are dealing with the 'one liner'
- peterleeq 7y agoaint knw
- rhacker 7y agoI feel like this is normally the content you see in Stack Overflow
- a-wu 7y agoI've tried this before in a Python script but quickly got rate limited by the 300 tweet update limit [0]. Does this get around that? [0] https://developer.twitter.com/en/docs/basics/rate-limits https://developer.twitter.com/en/docs/basics/rate-limits
- darepublic 7y agoIt's hard to imagine that it would
- ksherlock 7y agoYou could improve it by not tweeting in the first place.
- t0astbread 7y agoWhat are the rate limits on the /statuses/destroy endpoint? I've checked the docs and the docs say it is limited but the actual limit is not specified. Other than that, thanks for writing this! I've been thinking about a tool like this and this might come in handy. The code looks fine to me although I would probably spin this out into a script and add some logging, as others have already pointed out.
- Pirate-of-SV 7y agojq -c -r '.[] | .id_str' # Can be rewritten to jq -r '.[].id_str' jq -c -r '.[] | .id_str' | head -10 | tail -1 # Can be rewritten to jq -r '.[9].id_str'
- jamiehall 7y agoAh, nice. Thanks! :D
- jlelse 7y agoNot answering your question, but I found a way to mass delete tweets without creating an app: https://jlelse.blog/posts/mass-delete-tweets/ https://jlelse.blog/posts/mass-delete-tweets/
- cosmiccatnap 7y agoMake it delete the account instead.
- jamiehall 7y agoThank you to everybody who commented! The suggestions to use something more sensible than a oneliner (and to post on Stack instead) are well taken. A big motivation of this project was "just because", for shits and giggles, so I hope it's amused you for a minute or two. Cheers!