[Twitter][Mac]スクリプトエディタでツイ消しの自動化を試した話

最終更新: 2021/04/05/公開: 2021/04/05
この記事は 2021年4月5日 に投稿されました。
内容が古いかもしれません。ご注意ください。
※最後に更新されたのは 2021年4月5日 です。

ツイ消しをしたいけどツイ廃過ぎて消すことができない問題

要点

  • ツイートが3200件以内かちょっと多いくらいなら自動削除ツールでほぼ可
  • 使用期間が長く何万ツイートもある場合はAPIを経由しての自動削除はできない
  • AppleScript+JavaScriptで半自動にすることは可能(RTは残る)
  • お金を払えば全消しできるツールもあるらしい。
    »Tweet Deleter

自動ツールで良い場合

2021年3月現在、削除ツールによって消すことができる件数が3200件まで+一定期間までしか戻れない(ここ未検証です……)ということで ツイート数がそんなに無い方は下記「黒歴史クリーナー」等のツールで削除すればOKです。

黒歴史クリーナー

アカウント消したほうが早い場合

Twitterを長期間、しかも頻繁に利用している方のツイート全消し(RT含む)は実質自動では不可能なのでアカウント削除が一番手っ取り早いです。ただし一度使ったメールアドレスで再度アカウントを作成するのは1ヶ月くらい時間をおいてからでないとできないはずなので、消してからもすぐ使いたい方はご注意を。よく公式のヘルプなどご確認ください。

でもなんとかしたい。

自分の場合11年間使用しており16万件以上ツイートがあるので消すことができませんが、フォロワーさんや作成したリストは捨てたくなく……半自動にて処理できないか試しましたので経過をメモしました。

結局JavaScriptで消したら一番速かった

色々こねくり回した結果スクリプトエディタでJavaScriptを実行、ボタンを超高速で押しまくるというのがやった中で最速でした。

基幹のスクリプトは下記を参照。Chromeで「Apple EventsからのJavaScriptを許可」して諸々実行させます。AppleScriptの細かいところまではちょっと資料を読んでもわからなかったので今回はほぼコピペです……助かりました。

JXA、Webページが読み込まれたら実行(twitterにログインする)

月の高いところ

大雑把な手順

  1. ツイートを期間検索。この時あんまり長い期間にしてもうまいこと消せなかったりするので欲張らない。多くて2〜3000件とかなら大丈夫かもしれない。
  2. スクリプト実行、待つ。

スクリプト詳細

自分の理解度が甘いため要らん処理とかもあるかもしれないですが下記の内容。ほんとほぼコピペです。
やっていることはツイート右上の「…」を押してからツイートの削除ボタンを押す、という通常手でやることをJSにまかせているだけです。実行すると何も見えずただツイートが飲み込まれるように消えていきます。

スクリプトエディタに貼り付けて調整して、Chromeで実行したら同じことができると思いますが 非プログラマが自分用に適当に作ったものなので使うのは自己責任でお願いします。

なおリツイートとかいいねは消えません。私は諦めました。

// Google Chromeを定義
var app = Application("Google Chrome");
app.includeStandardAdditions = true;
var windowChrome = null,
    tabFirst = null;
windowChrome = app.windows[0];
tabFirst = windowChrome.tabs[0]; 
 
// Chromeをアクティブにする
app.activate();
 
// ブラウザ上で実行させる関数を定義
var runFunction = function(){
  let processA = new Promise(function(resolve, reject) {
    var openModalBtn = document.querySelector("[aria-label='もっと見る']");
    if(openModalBtn){
      openModalBtn.click();
      openModalBtn = null;
    }
  });
  let processB = new Promise(function(resolve, reject) {
    var deleteBtn = document.querySelector("[role='menuitem']");
    if(deleteBtn){
      deleteBtn.click();
      deleteBtn = null;
    }
  });
  let processC = new Promise(function(resolve, reject) {
    var terminator = document.querySelector("[data-testid='confirmationSheetConfirm']");
    terminator.click();
    terminator = null;
  });
  let processD = new Promise(function(resolve, reject) {
    var corpse = document.querySelector("div[style^='position: absolute; width: 100%;']");
    console.log(corpse);
    corpse.remove();
    corpse = null;
  });

  processA
    .then(processB)
    .then(processC)
    .then(processD)
    .catch( function(){
      console.log('失敗しました');
    });

  processA = null;
  processB = null;
  processC = null;
  processD = null;
};
 
// 関数を一行テキストに
var runFunctionStr = runFunction.toString();
runFunctionStr = runFunctionStr.replace(/t/g, "");
runFunctionStr = runFunctionStr.replace(/n/g, "");

for( var repeat = 0; repeat < 繰り返す数; repeat++ ) {
  delay(0.15);
  formSubmitFlg = app.execute(tabFirst, {javascript: "(" + runFunctionStr + ")(); 'true'"});
}

【補足】プログラムなんか組んでないでAutomatorでなんとかできないのか

結論:満足の行く精度・速度では不可能

一応、最初はシンプルにこなそうとしてAutomatorで「ワークフロー」を新規作成し、「記録」でツイ消しの一連の動作を登録したものを再生することで反復して処理できないかを試しました。

最終的にはFirefoxならば停止せずに自動で削除動作を行えるというところまではできました。時間はかかります。

※Chrome・Safariだと途中で止まったりしますのでMacではFirefoxが良いかと思います

何が問題か

クリック位置がずれて何回目かのループで操作に失敗するため。+やっぱ遅い

PC版Twitterはツイートを消したあとに残骸みたいな線が1px残るのでクリック位置を調整する必要がでてくるのですが、ここが難所で乗り越えられませんでした。