X

Пакетное удаление постов в твиттере

Зайдя сегодня в твиттер увидел кучу спам твитов от меня. По всей видимости или куда-то утек пароль, или я разрешил кому-то левому запостить сообщения от меня. В любом случае, надо было восстановить справедливость и удалить все эти спам-сообщения. Их было около 500 штук, соответственно вручную (по одному посту за раз) это было делать долго. Тут я вспомнил, что я же программер, и решил написать небольшой скрипт для этой задачи..

Надо сказать что я не особый фанат твиттера, хотя и пытался подсесть на него пару раз, но не срослось. Однако твиттер остается довольно неплохим способом, загнать сайт в индекс гугла, поэтому, я его иногда использую.

Чтобы не заморачиваться с авторизациями, апи и прочей ерундой, я решил написать JavaScript скриптик для GreaseMonkey. Через 15 минут, скриптик был готов.

Скрипт доступен на Github: Twitter-Bulk-Delete-Posts-For-GreaseMonkey

Работает это так:

  • Вам нужен Firefox с установленным плагином GreaseMonkey
  • Далее в Firefox выбираем в верхнем меню:
    Инструменты>GreaseMonkey>Создать скрипт :

    Создание скрипта в GreaseMonkey

  • Копируем туда код, написанный выше.
  • Обновляем страницу с твиттером
  • Если все сделано правильно, видим что добавились панельки с черным фоном
  • Теперь все что остается сделать, это отметить спам сообщения и нажать удалить:

    Пакетное удаление постов в твиттере

Вот и все!

--[добавлено 21.01.2013]--

Если в будущем у кого-то возникнут проблемы со скриптом, пожалуйста, напишите об этом в комментариях. Возможны изменения на твиттере, после которых он перестанет работать 🙂

--[добавлено 15.04.2013]--

Скрипт обновлен. Добавлена кнопка [Deselect retweets], при нажатии на которую снимаются чекбоксы с твитов, которые были ретвитнуты.

Uncheck retweeted

--[добавлено 20.07.2013]--

По просьбе Антеи записал видео о том, как установить Greasemonkey, добавить туда скрипт, у удалить посты. Не забудьте выставить качество повыше (нажав на шестеренку в плеере) и развернуть на весь экран (или перейдите на сам youtube, тогда в плеере появится возможность выбрать размер просмотра побольше). Как всегда, на все вопросы отвечу в комментариях.

--[добавлено 06.02.2014]--

Скрипт обновлен до версии 3:

- Исправлена проблема, при которой не удалялись ретвиты.

- Блок с кнопками управления, вынесен на отдельную панельку, которая теперь размещается до блока с твитами и не ломает верстку.

Twitter Bulk Delete

- Переписан алгоритм интеграции элементов: 4 раза в секунду, проверяется наличие элементов на странице и если их нет, они добавляются. Теперь, панелька не должна пропадать, при обновлении элементов страниц самим твиттером.

- Добавлен русский язык (определяется автоматически по настройкам браузера проверить)

- Скрипт обновлен в посте и на гитхабе

Если у Вас что-то не работает, пишите в комментариях.

--[добавлено 11.06.2014]--

Скрипт обновлен. Последняя версия доступна на github-е: Twitter-Bulk-Delete-Posts-For-GreaseMonkey. Из поста скрипт убрал, чтобы было проще его обновлять.

--[добавлено 15.07.2016]--

Всем привет! Если у Вас скрипт не работает, значит в Твитере произошли очередные изменения в структуре страниц. В данный момент, у меня нет возможности следить и поддерживать скрипт в рабочем состоянии, поэтому если не работает - значит не работает 🙂

Если у кого-то имеются навыки и желание продолжить заниматься скриптом, Вы всегда можете форкнуть проект на гитхабе и внести нужные изменения. О своих результатах, можете написать в комментах.

Поддержка скрипта прекращена.

Категории: JavaScript

Комментарии (53)

  • здравствуйте, у вас в видео greasemonkey версии 1.10, а сейчас уже 2,3. какую использовать?
    и у меня с ней проблемы, она не устанавливается :(

    • Привет, ставь 2.3. У меня стоит 2.3 проблем вроде нет. Что именно происходит, когда "не устанавливается"?

  • Здравствуйте удалял твиттеры с помощью программы удалились не все теперь они весят а их самих не видно , думал глюк , но нет их просто не видно на сайте так как я нашел свой самый первый твитт , если удалить профиль твитты пропадут с сайта ?

  • Здравствуйте у меня не получается делаю все как у вас не идет , а еще подскажите а я удалял твитты с помощью сайта онлайн все нормально удалялось ,а потом дошло до 2800 и они пропали , число их отображается а самих их не видно , что можно делать , находил их через программу мой первый твит но там только по одному можно удалять это долго незнаю что делать , а если удалить твиттер полностью они удаляться или так так и будут болтаться на сайте ?

  • // ==UserScript==
    // @name Twitter Bulk Delete
    // @namespace Twitter
    // @include https://twitter.com/*
    // @version 3.1
    // @require http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js
    // @grant none
    // ==/UserScript==

    $(document).ready(function()
    {

    var language = window.navigator.userLanguage || window.navigator.language;

    var tbd_translations = {
    'defaults': {
    select_all_weets: "Select All Tweets",
    deselect_retweets: "Deselect Retweets",
    delete_selected_tweets: "Delete Selected Tweets",
    delete_selected_tweets_q:"Delete selected tweets?",
    delete_this_tweet: "delete this ↓ tweet"
    },
    'ru-ru': {
    select_all_weets: "Выбрать все твиты",
    deselect_retweets: "Исключить ретвиты",
    delete_selected_tweets: "Удалить выбранные твиты",
    delete_selected_tweets_q:"Точно удалить выбранные твиты?",
    delete_this_tweet: "удалить этот ↓ твит"
    },
    'ru': {
    select_all_weets: "Выбрать все твиты",
    deselect_retweets: "Исключить ретвиты",
    delete_selected_tweets: "Удалить выбранные твиты",
    delete_selected_tweets_q:"Точно удалить выбранные твиты?",
    delete_this_tweet: "удалить этот ↓ твит"
    }
    };

    var tbd_l = tbd_translations[language.toLowerCase()]
    ? tbd_translations[language.toLowerCase()]
    : tbd_translations.defaults;

    setInterval(function(){

    $('.js-stream-item').each(function() {

    if ($(this).find('.ProfileCard').length) return;

    if (!$(this).find('.ch_del_tweets').length)
    {
    var tweet_id = $(this).find('.js-stream-tweet').attr('data-tweet-id');
    var tweet_type = $(this).find('.js-stream-tweet a.undo-retweet:visible').length>0 ? 'retweet' : 'tweet';
    var html ='';
    html += '';
    html += '';
    html += ' ';
    html += '';
    html += '';
    html += tbd_l.delete_this_tweet;
    html += '';
    html += '';
    $(this).prepend(html);
    }

    });

    if ( ! $('#tbd-manage-panel').is(':visible') )
    {
    var html ='';
    html +='';
    html +='';
    html +='';
    html +='';
    html +='';

    $(html).insertBefore('.ProfileHeading');
    }

    var click_event_obj = $('#func_select_all_tweets');
    if (click_event_obj.length>0 && (!click_event_obj.data('events') || !click_event_obj.data('events').click))
    {
    click_event_obj.click(function(){
    $('input.ch_del_tweets').attr('checked','checked');
    });
    }

    var click_event_obj = $('#func_deselect_retweets');
    if (click_event_obj.length>0 && (!click_event_obj.data('events') || !click_event_obj.data('events').click))
    {
    click_event_obj.click(function(){
    $('.retweeted:visible').each(function(){
    $(this).parent().find('.ch_del_tweets').attr('checked','');
    });
    });
    }

    var click_event_obj = $('#func_del_tweets');
    if (click_event_obj.length>0 && (!click_event_obj.data('events') || !click_event_obj.data('events').click))
    {
    click_event_obj.click(function(){
    if (!confirm(tbd_l.delete_selected_tweets_q)) return false;

    var tweet_authenticity_token = $('input.authenticity_token').val();

    $('input.ch_del_tweets:checked').each(function(){
    var action_url = 'https://twitter.com/i/tweet/destroy';
    if ($(this).attr('tweet_type')=='retweet')
    {
    action_url = 'https://twitter.com/i/tweet/unretweet';
    }

    var tweet_id = $(this).attr('tweet_id');
    $.ajax({
    type: 'POST',
    url: action_url,
    data: {
    _method:'DELETE',
    authenticity_token: tweet_authenticity_token,
    id: tweet_id
    },
    success: function(){
    $('#stream-item-tweet-'+tweet_id).slideUp('fast', function(){
    $('#stream-item-tweet-'+tweet_id).html('')
    });

    },
    });

    });

    });
    }

    }, 250);

    });

  • у меня взломали твиттер https://twitter.com/spss_ru. сменил пароль, но твиты, созданные ботом или еще кем-то, не удаляются ни с помощью скрипта, ни вручную.

  • Виталий - скинь мне мыло на --[потёрто]-- я вышлю скриншоты

  • Работаю под Мозилой.
    Могу удалить только свои твиты. Но переходя на "Главную" нету панельки и не могу поудалять спамовые твиты и ретвиты. Хотя чек боксы там есть.
    И что я не то сделал? Или они вообще не должны удаляться.

    • Вадим, этот скрипт должен удалять, только твои твиты. Ситуация для которой он написан:
      1) Кто-то получил доступ к твоему аккаунту
      2) Создал от твоего имени твиты
      3) Ты обнаружил это, и поменял пароль
      4) Теперь ты хочешь удалить "свои" твиты, которые опубликовал злоумышленник от твоего имени.

      Я не большой знаток и фанат твиттера, поэтому не слежу за нововведениями. Могу резюмировать так: если вы вручную можете удалить "плохой" твит/ретвит/новость из своей ленты (например, по щелчку на иконку корзины на нем), то это можно реализовать и в скрипте.

      Чтобы мне было понятно, чего вы хотите пришлите ссылки на скриншоты и описание того как на ваш взгляд это должно работать. Когда будет время, я посмотрю смогу ли такое реализовать.

  • Здравствуйте! Не планируется обновление скрипта в связи с изменением оформления твиттера? Не отображается панель с кнопками, хотя чек боксы остались.

  • Как раз по такой проблеме искал решение. И вот оно!
    Благодарю Виталий за скрипт и наглядную видеоинструкцию!

  • Здравствуйте, Виталий!
    Вы можете мне помочь? У меня на странице не отображаются твиты и ретвиты. Последний раз страница обновилась 18 февраля. Люди видят мои твиты в общей ленте, я их вижу, но на моей странице ничего нет. Что произошло?

    • Если это после использования моего скрипта, то попробуйте его отключить. Но, я думаю это не от него, т.к. у меня все работает.
      Попробуйте сменить броузер, используйте Firefox, Chrome, Opera или Internet Explorer. Думаю проблема где-то у Вас и связана с какими-то настройками: блокировщиками рекламы или отключенным JavaScript.
      Если все же вы использовали мой скрипт и помогло его отключение, то напишите какой браузер Вы используете и его версию.

        • Привет, работать будет в любом браузере с greasemonkey. Знаю что FF точно есть для андроида, а волт насчет greasemonkey не в курсе.
          Есть еще одна проблема - я не уверен, что скрипт вообще работает сейчас. Дело в том, что он завязан на структуру элементов страницы, и при некоторых изменениях в дизайне или структуре, ломается.
          Всего скорее, такие изменения довольно просто починить, однако у меня в данный момент, на это нет времени.

  • а у меня ретвиты не удаляются
    я чтото не так делаю?

    • Нет, у Вас все в порядке, проблема была связана с обновлением интерфейса twitter-а. Уже все исправил. Спасибо, за уведомление!

  • Тополь, вот так заполняешь:

    Название: twitter
    Пространство имен: twitter
    Описание: twitter
    Включение (одно на строку): https://twitter.com/*
    Исключение: [ничего]

    В принципе не особо важно что тут писать, после сохранения скрипта эти значения будут переписаны, на те, что указаны в верху скрипта.

    Потом нажимаешь ОК, откроется редактор, в него надо скопировать текст скрипта.

    Там в посте внизу есть видео, ~ на 2.08, я показываю куда чего вставлять, можешь глянуть там.

  • Виталий, помогите, пожалуйста. Установила новый браузер, там все иначе. Кнопку "создать скрипт" с горем пополам нашла, а вот там внутри ничего не могу понять (ну совсем не программист я :) ), там присутствуют следующие ячейки:
    - название
    - пространство имен
    - описание
    - включение (одно на строку) - здесь автоматически уже вписан урл моей страницы в твиттере
    - исключение (одно на строку)
    Так куда вставлять скрипт?:(

  • Спасибо огромное, Виталий! Просто не могу не оставить слова благодарности. Очень понятная инструкция, очень полезный скрипт, всё быстро и с первого раза ^_^

    • И вам спасибо за отзыв! Рад, что Вам пригодился мой скриптик!!! :)

  • все появилось как у вас,но когда жму удалить выделенное, ничего не происходит и ничего не удаляется в итоге

    • Только что проверил, у меня работает. Попробуй отметить и удалить 1 твит. Если знаешь что такое FireBug или Консоль разработчика в Chrome, то попробуй глянуть на вкладку Console, возможно там будут ошибки, напиши о них в комменты.

      Если еще у кого-то есть ошибки, отпишите пожалуйста, в комменты.

  • Благодарю!!! 1000 твитов спама как не бывало за 15 минут :)

    • Пожалуйста, рад что у тебя получилось очистить аккаунт от спама!

  • Здравствуйте!
    Спасибо за прогу.
    Хорошо бы добавить такую функцию:
    - выбор интервала времени - например "выбрать только 1 августа" или "весь июль" и затем DEL

    • Привет! Пожалуйста, рад что тебе помог. Когда текущая версия поломается и я буду её исправлять, попробую реализовать предложенный тобой функционал.

  • Поясните для непонимающего человека)) Что именно и куда вставлять? весь код - куда? в название? пространство? Совсем в этом не разбираюсь. Спасибо заранее)

    • Нужно установить Firefox, потом в него плагин GreaseMonkey, потом в меню выбрать создание скрипта, откроется редактор в который и надо будет вставить скрипт который выше. Записал для тебя видео, посмотри в конце поста или сразу на youtube.

  • Привет!
    Спасибо огромное за скрипт и за подробную инструкцию, у меня хоть и не с первого раза, но все получилось :)

  • Скрипт просто замечательный!!! Низкий уклон тебе Vitaliy Orlov за твою работу, так как 2 дня потеряла в поисках программы для удаления всех твитов сразу...а теперь не могу нарадоваться тому, что с помощью твоего скрипта все получилось). Еще раз Спасибо!

    • Спасибо, Натик. Очень рад, что скрипт тебе помог!
      Сам, в свое время, сильно огорчился от перспективы удалять все вручную, хорошо что получилось автоматизировать :D

  • Скрипт обновлен. Добавлена кнопка [Deselect retweets], при нажатии на которую снимаются чекбоксы с твитов, которые были ретвитнуты.

    Так же найдена особенность работы скрипта при которой пропадают кнопки действий (выбрать все твиты, удалить и т.д.). Если они у вас не отображаются, нажмите Ctrl+F5 в броузере. Это связано с тем, что интерфейс твитера использует AJAX и при смене страниц, GreseMonkey не всегда может прицепить кнопки в нужное место. В будущем попробую исправить.

  • Добрый день! Mac os, поставил плагин, создал скрипт, вставил код, вхожу в твиттер, если селект олл и делит селектед, подтверждаю… и ничего не происходит

    • Проверил у себя, работает. К сожалению у меня Windows, возможно есть какая-то разница в сборках FF или GreaseMonkey. На маке нет возможности протестить :( Возможно у Вас установлена виртуальная машина с виндой или есть доступ к такой машинке, если это так, попробуйте сделать тоже самое оттуда.

      Так же попробуйте вручную отметить 1 сообщение (поставить одну галочку) и попробовать его удалить. Если сработает, то возможно проблема в большом кол-ве сообщений. Также, если получится, просьба отписать сюда.

      P.S> Если у кого-то есть похожие проблемы, просьба отписать в комментариях, не забудьте указать вашу операционку и версию броузера.

      • Виталий! что то наверное сделал в первый раз не так, всё заработало! Спасибо! Отличный скрипт! Если бы ещё добавили функцию как отменить ретвиты (для чистки акка самое то) то было бы просто великолепно!

        • Я рад, что помог Вам :D
          Пожелания приняты, постараюсь сделать в следующей версии, либо когда будет свободное время.

  • спасибо вам большое за скрипт, вы меня сегодня спасли)

1 2