TabunStatusFetcher, или теперь никто не придёт незамеченым

+145
cab404в блоге IT Pony!28 июля 2013, 23:13
Мне внезапно понадобилось поймать <insert_name_here> в Табуне, а обновлять страницу… в конце концов, я программист.

Посему навалял такую вещь:


QA:

Q: Что оно вообще делает?
A: Постоянно проверяет заданный список пользователей, если кто-нибудь пришел — оповещает сигналом.

Q: Как её включить?
A: Открываем консоль, набираем java -jar путь_к_файлу, жмём enter.

Q: Можно ли добавить сразу несколько пользователей?
A: Угу, через запятую.

Q: Где звуковые оповещения!? Мне что, каждые пять секунд смотреть в окошко?
A: Поставь около jar-а какой-нибудь wav-звук (например, этот), переименованный в «alarm». Он и будет оповещением.


Версия для Gnome с поддержкой оповещений:

70 комментариев

А ссылку на скачать?
andreymal
0
Кнопка же.
Kelimbern
0
Так и знал, что слоупоки на мой коммент набегут) Когда я написал, кнопки не было, потом добавили
andreymal
+2
Kelimbern
0
Отслеживает по активности? Или по времени последнего визита из профиля?
Revizor
0
Когда кто заходил, типо да.
ncuxonam
0
— Второе. Кстати, ссылки нет т.к нажал enter в тегах. Сейчас допишу пост.
cab404
0
Никому не нужно

похоже тег немного недостоверен.
Да и я сам не против глянуть.
ncuxonam
0
Сколько у меня постов из-за этого enter было сырыми отправлено… Жду.)
Yunnie
0
— Тут.
cab404
0
А теперь скажи, как ты сделал, что оно у тебя выглядит нормально) (Я даже подумал, что это GTK с Python)
Спойлер
andreymal
0
Наверно у него лингус.
ncuxonam
0
Ну так и у меня «лингус», потому и спрашиваю.
andreymal
0
— Потому, что это действительно GTK. У меня классная тема.
cab404
0
Судя по внешнему виду у меня, это не GTK, это какое-то встроенное джавовское убожество (Swing вроде называется?), которое, как я понял, каким-то чудом распарсило твою тему)
andreymal
0
— Да, это Swing, но настроенный. Мало кому приходило в голову лезть в UIManager и выставлять GTK Backend.
cab404
+2
Что то я его просто кликом запустил — не ишет. ТО есть мелькает что-то на пол секунды и всё.
ncuxonam
0
UPDT: через строку запустилось, но при запросе — unknown source.
ncuxonam
0
— Нашел заброшенный образ для виртуалки, буду проверять.
cab404
0
— Старая тупая винда юзает по умолчанию старый тупой ASCII. Исправлено, сейчас перезалью.
cab404
0
Гыгыгы :3 Вин тебя затралил.
ncuxonam
+1
Вин себя затралил.
cab404
+1
— Перезалил.
cab404
0
А зачем было использовать сжатые http-пакеты?
Revizor
+1
— А так трафика выходит меньше.
cab404
0
Кстати, а как ты заставил Табун отвечать тебе сжатыми пакетами? Я попробовал поставить Accept-Encoding: gzip, всё равно отвечает текстом.
Revizor
+1
— Пф. Значит, плохо пробовал. У меня с простейшим набором всё работает. Посмотри в код sweetieBot.
cab404
+1
Попробовал. Текст.
КодURL targetURL = new URL(«tabun.everypony.ru/profile/Revizor/»);
String tabun = «tabun.everypony.ru»;
HttpClient client = new DefaultHttpClient();
HttpHost host = new HttpHost(tabun, 80);
HttpResponse resp;
HttpGet get = new HttpGet(targetURL.toURI());
get.addHeader(new BasicHeader(«Host», tabun));
get.addHeader(new BasicHeader(«Connection», «keep-alive»));
get.addHeader(new BasicHeader(«Accept-Encoding», «gzip»));
resp = client.execute(host, get);
Header[] headers = resp.getAllHeaders();
for (Header header: headers) {
System.out.println(header.getName()+":"+header.getValue());
}
Scanner scaner = new Scanner(resp.getEntity().getContent(), «utf-8»);
scaner.useDelimiter("\\A");
while (scaner.hasNext()) {
System.out.println(scaner.next());
}
Revizor
0
— resp.getEntity().getContent() instanceof GZIPInputStream?
cab404
0
Неа. sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.
(Правда тут я использую обычный URLConnection. Но результат от этого не меняется :) )
Для варианта с HttpResponse — org.apache.http.conn.EofSensorInputStream
Revizor
0
— HttpGet get = new HttpGet("/profile/Revizor");?
cab404
0
То же самое
И это притом, что для других сайтов Accept-Encoding: gzip прекрасно работает. Хотя, опять же, не для всех.
Revizor
0
— Кстати говоря, для таких больших документов, как web-страницы юзай BufferedReader.
cab404
0
java.util.Scaner аналогичен по функционалу BufferedReader (то есть чтение с использованием буфера), плюс позволяет парсить «на лету». Использование одновременно Scaner и BufferedReader избыточно.
Revizor
0
— А вот и нифига! Scanner медленнее раз в двадцать, сам проверял, когда писал sweetieBot.
cab404
0
Прошу прощения что не в тему, но sweetieBot не работает после авторизации. Samsung Galaxy SII, Android 4.1.2
TheDoctor
0
— Знаю, починил.
cab404
0
Если использовать его просто для чтения страницы — согласен. А вот при одновременном её разборе — спорно.
Revizor
0
BasicHttpRequest request;
        BufferedReader reader;
        HttpResponse response;
        InputStream input;
        URL url;

        try {

            request = new BasicHttpRequest();
            url = new URL("http://tabun.everypony.me/profile/Revizor");
            response = request.doGetRequest(url);

            for (Object key : response.getHeaders().getHeaders().keySet()) {
                System.out.println(key + ": " + response.getHeaders().getHeaders().get(key));
            }

            reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(response.getInputStream())));

            String line = "";
            String page = "";

            while ((line = reader.readLine()) != null)
                page += line + "\n";

            System.out.println(page);
            
        } catch (IOException e) {
            e.printStackTrace();
        }
cab404
0
java.util.zip.ZipException: Not in GZIP format
:)
Revizor
0
— Это как минимум странно. Может, у нас Java разная? :D
cab404
0
java version «1.7.0_09»
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
Но как от версии Java зависит отправляемая на сервер и принимаемая информация? Запрос уходит нормально, я в этом уверен, на других серверах он работает, это тоже проверено. Конечно, в спецификации написано, что сервер сам решает, сжимать или не сжимать ответ при запросе с Accept-Encoding, но тогда я не понимаю, почему именно мне Табун сжимать отказывается. При том я побовал и полностью дублировать запрос своего браузера, только с Accept-Encoding, и тоже ничего. Странно это…
Revizor
0
— Обновись, закрой дыры, ибо они огромны. Через WireShark налови пакетов, посмотри, может он и браузеру отказывается сжимать.
cab404
0
Обновился, проверил для браузера — он тоже принимает несжатые ответы. Хз что такое.
Сегодня еще с работы проверю.
Revizor
0
— Попробуй VNC. Может быть, Мизулина против gzip, т.к на букву g есть плохие слова.
cab404
0
Причем именно на табуне? Если бы параметры из хедера где-нибудь терялись, они терялись бы для всех сайтов. Но это не так :(
Revizor
0
— Может быть, у серверов есть встроенная защита от Ревизоров.
cab404
0
Табун коварен.
Revizor
0
Блин, я нашел эту сволочь, которая творила эту порнографию с gzip. Спасибо за подсказку с WireShark. Оказывается, ответы таки приходили в gzip, но Касперский их распаковывал( читал, наверно) и отдавал дальше уже в распакованном виде. Причем он так делал не со всеми сайтами.
Revizor
0
Теоретически http-запрос, отправляемый каждые пять секунд, сожрёт дохрена трафика, довольно дорогого на каком-нибудь GPRS.
andreymal
0
Мда, трафик… С анлимом о нём как-то забываешь…
Revizor
+4
._.
паранойя
alexiy777
0
Файл чист, вирусов нет, если ты про это :#
ncuxonam
+1
нет, не про это. на скрин посмотри
alexiy777
+2
Хохохо, тонко.
ncuxonam
0
Палево это магия
Опробую
Krueger
+1
— Перезаливаю, добавлено звуковое оповещение. Просто положите любой звук (например этот) в формате wav, переименованный в «alarm», рядом с jar файлом.
cab404
0
Добавь конфиг, который запоминает логины и время, и кнопку «Проверить сейчас», для мгновенной проверки. :)
TheDoctor
0
— Для мгновенной проверки нажми в пустом окошке enter, про конфиги… не знаю, зачем. Если нужно мониторить кучу людей — собери их в одном файле через запятую.
cab404
0
Хм, действительно работает. (Я про ENTER). А насчет конфига — удобнее будет. Но это просто моё мнение. :)
TheDoctor
0
Немного не в тему… наверно. Каб, твой клиент табуна совсем не запускается на моем дряхленьком телефончике. Или лучше в лс об этом?
LazyOne
0
— Совсем-совсем? Какая версия Андроид?
cab404
0
Один раз, первый, запустилось, потребовало логин и пасс. Дальше — вылетает с ошибкой, мол «приложение будет закрыто».
2.3.3 у меня, как купил телефон, так и не менял. Samsung gt-s5830.
LazyOne
0
мы все под колпаком. Ужоснах.
PrinceMars
0
Зря скачал версию со звуком. Теперь такая ошибка. Предыдущая работала без нарекания.
Воть
ncuxonam
0
— Это логи. Убрано, перезалито, добавлена возможность запуска из консоли с настройками. Запустите с параметром --help.
cab404
0
— Выложена версия для Gnome.
cab404
0
— Сменена используемая библиотека, всё весит меньше. А именно — основная версия — 569,7 кБ, версия для Gnome — 2,1 МБ.
cab404
0
Q: Как её включить?
A: Открываем консоль, набираем java -jar путь_к_файлу, жмём enter.

В самой популярной ос двойной клик по jar файл сделает тоже самое и даже лучше…
Pahtet
0
Не завёлся ещё здесь местный Сноуден?
Commander
+1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.