Массовое добавление и удаление друзей в LiveJournal через XML-RPC

Так как пользоваться консолью ЖЖ для добавления или удаления друзей стало невозможно (эти команды отключили) — сделал небольшой скрипт lj-edit-friends, который позволяет редактировать список друзей для указанного аккаунта через XML-RPC интерфейс ЖЖ. Пользоваться несложно — получить список друзей для добавления/удаления с помощью LJ Add/Remove Friends, сохранить его в файл и обработать через lj-edit-friends. Подробности — ниже.
(далее…)

Простой скрипт для увеличения посещаемости блога в Живом Журнале

Около трёх месяцев назад в комментариях к скрипту для добвления друзей в жж Zanzanoza предложил попробовать ещё один способ увеличения количества своих читателей в ЖЖ. Суть способа проста — залогинившись под нужным аккаунтом, заходить на страницы профилей жж-юзеров в расчете на то, что посещение зафиксируется в статистике их журналов и какой-то процент посещённых в ответ заинтересуется нашим журналом.

Эффективность такого способа раскрутки журнала с самого начала вызывала некоторые сомнения, но в силу простоты реализации решил проверить, что из этого получится. В результате сделал простой скриптик (сам он опубликован ниже), скормил ему файлик со списком всех жж-аккаунтов, присутствующих в топе Яндекса, и оставил работать.
(далее…)

Сохранение статистики внешних входящих ссылок из Яндекс.Вебмастер

Решил ради интереса посмотреть статистику изменения количества входящих внешних ссылок (и ссылаюшихся сайтов) через Я.Вебмастер — и с удивлением не обнаружил в нем такой возможности. Может быть «Выгрузка внешних ссылок в виде архива» — то, что мне нужно, но формирования архива придется ждать неделю и только потом можно будет узнать, что же в нем.

Запрос через Яндекс-поиск с ключом link (вида http://yandex.ru/yandsearch?text=link%3D%22dimio.org%2F*%22&lr=2) выдает сильно отличающийся от вывода Я.Вебмастер результат. Интернеты вообще сообщают, что ключ link не поддерживается Яндексом уже несколько лет.

Оставалось только одно — забирать интересующую информацию прямо со страницы из Вебмастера. Сделал небольшой скрипт на perl, который и решает поставленную задачу. Скрипт целиком доступен на отдельной странице, в заметке остановлюсь подробнее только на паре моментов.
(далее…)

Халявная реклама на twite.ru

Рекалама на twite.ru бесплатно!

Про сервис рекламы (и набора фолловеров) в твиттере, ЖЖ и фейсбуке — twite.ru — знают, полагаю, уже многие. Немало встречается заметок о том, как заработать в твайте (заработок в твайте сравни заработку в GoGetLinks, только вместо ссылок — перепосты и ретвиты). Проблема только в одном — там присутствует постмодерация и в момент вывода средств «наружу» администрация проверит ваш блоггерский аккаунт. Значит, придётся или раскручивать аккаунт под рекламу, или портить рекламой свой личный блог. Ни того, ни другого мне делать не захотелось.

Существует еще одна возможность распорядиться своими средствами на twite.ru — их можно перекинуть на свой «аккаунт рекламодателя», при этом не нужно проходить проверку модераторами, средства остаются в системе. Вывод простой — можно зарабатывать средства на рекламу своего сайта при помощи ботов. И если твиттер-аккаунт для добавления в систему в качестве рекламной площадки нужно минимально раскрутить, то ЖЖ добавляется элементарно и без всяких проверок (хотя для раскрученного ЖЖ-аккаунта естественно выдаются более привлекательные рекламные предложения).
(далее…)

Сравнение производительности сетевых библиотек в Perl

Когда задумал сделать парсер тИЦ для LJ Add/Remove Fiends — решил для начала проверить, какой способ загрузки страниц с показателями тИЦ из скрипта окажется быстрее, поскольку это в любом случае окажется самым узким местом в производительности парсера (любая обработка уже полученных данных, если она сделана без грубых ошибок типа бесконечного цикла, происходит гораздо быстрее загрузки этих данных по сети).

Для начала проверил на локальной машине (первый тест), затем на сервере (второй тест). Воспользовался модулем Benchmark::Timer, по сути он ставит метки начала и конца, после чего вычисляет разницу между ними (то же самое несложно получить с использованием Time::HiRes). У Benchmark::Timer правда есть дополнительная возможность — он может гонять тест до получения результата с заданной обеспеченностью и заданным процентом ошибки.

Третьим тестом, уже из чистого любопытства (поскольку результат был предсказуем) был тест многопоточной загрузки. Естественно этот вариант оказался быстрее любого из однопоточных, в среднем в два раза (при 15 потоках).

Выводы — библиотеки Perl не только выгодней с точки зрения безопасности, но и работают стабильно быстрее вызовов системных утилит. Самую медленную загрузку показал Wget, основывать парсер на нём — явно плохая идея. Многопточность естественно вне конкуренции. Подробности ниже.

(далее…)

Автоматическая проверка готовности загранпаспорта

Гос. органы идут в массы, постоянно вводят новые, удобные для граждан (по крайней мере на первый взгляд), формы взаимодействия.
К такому нововведению можно отнести и сервис проверки готовности загран. паспорта на сайте УФМС, расположенный по адресу http://www.ufms.spb.ru/checkzp.php. С помощью сервиса можно быстро узнать, готов ли загран. паспорт или еще находится в процессе оформления, введя в поля формы данные своего гражданского паспорта (также доступна проверка по данным из свидетельства о рождении).

Всё в принципе хорошо и удобно кроме одной мелочи — чтобы воспользоваться проверкой готовности — нужно периодически вспоминать о ней и заходить на сайт. По-моему, приделай УФМС автоматическое оповещение о готовности паспорта по электронной почте — сервис выглядел бы законченным и действительно удобным в использовании.

Но раз УФМС не идет на встречу гражданину, значит гражданин должен сам облегчить себе жизнь. Я решил сделать это используя три простых и доступных инструмента: консольный браузер lynx (для отправки данных формы POST-запросом), планировщик заданий cron (для периодической проверки готовности загран. паспорта) и утилиту поиска по тексту grep (для поиска нужной строки в дампе страницы), для чего написал простенький скрипт, который закинул в cron. Скрипт с указанным в кроне периодом проверяет готовность моего паспорта и присылает мне отчет на электронную почту (которая указана в настройках крона).

#!/bin/sh
echo "checkser=p&seriap=XXXX&numberp=YYYYYY&submit=%CF%F0%EE%E2%E5%F0%E8%F2%FC" | lynx -post_data -dump http://www.ufms.spb.ru:80/checkzp.php | grep 'Ваш заграничный'

Вместо ХХХХ нужно подставить серию своего гражданского паспорта (макс. 7 символов, что, как я понимаю, позволяет использовать серии старых паспортов, с римскими цифрами), а YYYYYY заменить соотв. на его номер (макс. 6 символов). Если запускать скрипт из-под английской локали, то шаблон для grep надо изменить с ‘Ваш заграничный’ на ‘Vash zagranichnyj’, поскольку скрипт отдаст страницу в латинице.

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

Дополнение:
Если сайт проверки готовности загранника постоянно «радует» сообщением о превышении числа запросов, можно пропустить их через tor. В этом случае удобно будет воспользоваться другим способом отправки форм POST-методом из lynx — записать автоматический скрипт, который и будет осуществлять проверку.

Посутпаем следующим образом:

  1. вызываем lynx с ключем cmd_log=имя_файла_куда_сохранить_скрипт:
    lynx -cmd_log=script_name http://www.ufms.spb.ru:80/checkzp.php,
    вводим серию и номер паспорта, отправляем запрос, дожидаемся загрузки страницы с ответом и закрываем браузер.
  2. в дополнение к tor устанавливаем torsocks — утилита несколько сырая, но дело своё делает исправно, перенаправляя траффик на tor (можно естественно использовать любой понравившийся прокси, указав его в качестве умолчального export http_proxy="address:port").
  3. вызываем lynx через torsocks или выбранный прокси с указанием использовать для автоматизации отправки данных формы записанный ранее файл скрипта с передачей результатов работы на разбор в grip:
    torsocks lynx -cmd_script=script_name http://www.ufms.spb.ru:80/checkzp.php | grep «Ваш заграничный»

Всё, автоматизация проверки готовности заграничного паспорта успешно проведена! Пока скрипт работает за человека, человек может расположиться у телевизора и спокойно отдохнуть 🙂

Небольшое обновление генератора XML для WordPress

WordPress XML Creator Online (онлайн версия генератора XML файлов для импорта и автоматического наполнения блогов на wordpress) получила небольшое, но достаточно полезное, по-моему, дополнение — возможности добавления картинок к записям.

Ссылки на картинки берутся случайным образом из списка, указанного пользователем (если список оставить пустым — ничего к записям добавлено не будет) и добавляются в начало каждой записи, при это поддерживается два варианта обработки списка:

  • «Повторы возможны» — использованные ссылки не удаляются из списка, поэтому картинки могут повторяться.
  • «Без повторов» — каждая ссылка используется только один раз. Если ссылок меньше, чем записей — часть записей останется без картинок.

Ссылки указываются по одной на строку следующем виде:

  • http://mysite.ru/img01.jpg
  • http://mysite.ru/img02.jpg
  • И далее сколько нужно (в разумных пределах, поскольку скрипт не примет больше, чем 0,7 Мб данных в совокупности)

Подробней с возможностями программы можно ознакомиться на справочной странице.

Надеюсь, что нововведение окажется полезным. Предложения и сообщения об ошибках в работе WordPress XML Creator по-прежнему прошу присылать на адрес dimio@dimio.org.

Адаптация Cygwin shred для Windows

Адаптация утилиты shred для windows

Набросал тут как-то в свободную минуту скрипт-оболочку для вызова утилиты безопасного удаления файлов shred, которой постоянно пользуюсь дома.
Win-аналоги искать было лень — попробовал как-то найти под win софтинку для конвертации mp3 в wav — ради того, что в линухе делается одной командой, пришлось час ползать по сети и засорять машину, а в итоге всё найденное было платным или кривым.

Поскольку у меня на работе всё равно установлен cygwin — воспользовался сборкой shred под него, а батник сделал для большего удобства использования. Дальше всё просто — батник на рабочий стол и перетаскиваем на него предназначенные для безопасного удаления файлы.

Код батника предельно примитивный, так что просто приведу его ниже (под катом). Достаточно скопировать в текстовый файл и изменить расширение на .bat.

(далее…)

Анонимайзер как замена прокси. Проверка анонимайзеров на валидность

Скрипт для составления и проверки списка веб-прокси

Наткнулся на любопытную заметку под названием «И еще немного про Google Hack«, в которой автор описывает использование анонимайзеров (пример анонимайзера — сайт Anonymouse) вместо публичных прокси для обхода капчи в Google.
Такой способ использования анонимайзеров мне тоже приглянулся и я решил написать свой скрипт для сбора и проверки на валидность списка публичных веб-прокси.

(далее…)

Синхронизация текстовых файлов — простой скрипт на Perl

Случилось так, что мне стало очень нужно синхронизировать ограниченный набор файлов между флешкой и компьютером. При этом руками копировать туда-сюда, вспоминая, какой файл редактировал последним — утомительно, а «монстры» синхронизации излишни ввиду примитивности задачи, ведь рекурсивная синхронизация директорий и прочие навороты мне ни к чему.

Решил набросать простейший скрипт на Perl (поскольку перл есть у меня и дома, и на работе, в отличие от баша например), который бы проходил по указанным мной файлам и синхронизировал их опираясь на дату последнего изменения, иными словами — более свежие файлы будут заменять устаревшие.

(далее…)