В этой статье я расскажу о том, как с помощью XML-RPC получать информацию о комментариях к вашим публикациям в Живом Журнале и даже немного их удалять.
Изначально сценарий был написан в связи с ситуацией в «Живом журнале» Навального, где неизвестный бот тысячами размещал одно и то же сообщение, мешая развитию дискуссии в комментариях.
Я не совсем разделяю его взгляды (и я, конечно, не фанат), но ценю свободу слова в Интернете, поэтому потратил некоторое время на изучение возможностей написания комментариев.
Каждая запись в Живом журнале имеет уникальный идентификатор ( Джитемид ), не повторяющиеся в пределах одного журнала.
Это обычный автоматически увеличивающийся идентификатор, но он не отображается непосредственно в URL-адресе публикации.
Вместо этого он используется дитемид , рассчитывается по следующей формуле: дитемид = 256*житемид + анум Здесь анум — случайное число от 0 до 255, указываемое один раз при создании поста и сохраняемое вместе с информацией о нем.
Тот же прием применим и к комментариям, за исключением того, что они не имеют своего анума, а берутся из поста.
Соответствующие параметры комментария называются jtalkid И dtalkid .
Описан протокол XML-RPC применительно к Живому Журналу.
Здесь .
Использование метода получить события , мы можем получить все записи в журнале (я беру последние n записей, для этого нам нужно указать параметры selecttype=lastn и Howmany=n).
Информация о записях, полученных таким образом, содержит itemid(=jitemid) и anum — именно то, что мы хотели получить.
Также передано ответ_количество — количество комментариев к посту.
Кстати, ясно указывая пользовательский журнал , вы можете получить доступные вам записи из любого журнала (в том числе секретного, если вы включены в список друзей).
Перейдем непосредственно к комментариям.
Здесь нас ждет облом.
Судя по описанию протокола, методов работы с комментариями нет. К счастью, чтение исходного кода позволяет нам найти необходимые методы в код обработчик протокола (используйте силу, читайте исходник!).
Оказывается, там много интересного: my %HANDLERS = (
login => \&login,
getfriendgroups => \&getfriendgroups,
getfriends => \&getfriends,
friendof => \&friendof,
checkfriends => \&checkfriends,
getdaycounts => \&getdaycounts,
postevent => \&postevent,
editevent => \&editevent,
syncitems => \&syncitems,
getevents => \&getevents,
editfriends => \&editfriends,
editfriendgroups => \&editfriendgroups,
consolecommand => \&consolecommand,
getchallenge => \&getchallenge,
sessiongenerate => \&sessiongenerate,
sessionexpire => \&sessionexpire,
getusertags => \&getusertags,
getfriendspage => \&getfriendspage,
getinbox => \&getinbox,
sendmessage => \&sendmessage,
setmessageread => \&setmessageread,
addcomment => \&addcomment,
checksession => \&checksession,
getrecentcomments => \&getrecentcomments,
getcomments => \&getcomments,
delcomments => \&delcomments,
screencomments => \&screencomments,
unscreencomments => \&unscreencomments,
freezecomments => \&unfreezecomments,
editcomment => \&editcomment,
);
Для наших целей они будут полезны получить комментарии И комментарии .
Чтобы получить комментарии к посту с помощью getcomments, мы передаем ему следующее: ditemid (идентификатор нашего поста), журнал (журнал, в котором размещен этот пост, например, Навальный), page (номер страницы комментария).
Если мы не хотим расширять потоки, мы указываемexpand_strategy=mobile_thread. Как и в случае с getevents, мы можем получать любые доступные нам комментарии.
В ответ мы получим массив комментариев первого уровня.
Если на комментарий есть ответы, они прикрепляются к нему в виде массива.
Далее нам останется пройтись по всем страницам комментариев, а на страницах, по всем доступным комментариям, и проверить их.
Я просто использовал стоп-слово, но проверить можно что угодно, вплоть до даты регистрации автора (для каждого понадобится отдельный запрос).
Передаем выбранный dtalkid в метод delcomments (дополнительный рекурсивный параметр позволяет удалить весь тред).
Вуаля! У нас чистый журнал! Исходники PHP-скриптов можно просмотреть по адресу GitHub .
Я благодарен авторам этот И этот за ценную информацию.
Теги: #LiveJournal #XML-RPC #php #фильтрация спама #php
-
Получайте Деньги За Участие В Опросах Онлайн
19 Oct, 24 -
Почему Apple Отказалась От Метеослужбы Yahoo
19 Oct, 24 -
Ваша Операционная Система?
19 Oct, 24 -
Участие В Работе Над Javafx
19 Oct, 24 -
Бытовой Прибор.
19 Oct, 24 -
Акустические Инновации.
19 Oct, 24