Каждый, кому приходилось работать с социальной сетью «Одноклассники» знает, что разобраться в ней — та ещё задача. Поэтому я решил рассказать, как можно программно приглашать друзей в сообщество, поскольку в Интернете об этом информации практически нет.
Для работы нам необходима учётная запись на Одноклассниках и cURL (не обязательно, но с его помощью отправлять GET и POST запросы значительно проще).
Авторизация
Итак, перед началом работы с сообществами нужно авторизоваться. Через полную версию сайта сделать это проблематично, поэтому на данном этапе будем использовать мобильную версию сайта.
Для авторизации необходимо отправить POST запрос на
http://m.odnoklassniki.ru/dk?bk=GuestMain&st.cmd=main&_prevCmd=main&tkn=7963
с такими полями
fr.posted=set&fr.needCaptcha=&fr.login=%LOGIN%&fr.password=%PASS%&button_login=Войти
Чтобы проверить, выполнен ли вход, проверяем полученные данные на наличие строки userFeeds
Вступление в группу
Для дальнейшей работы нам понадобиться идентификатор группы (постоянно меняется). Для этого загружаем код мобильной версии группы и ищем поле groupId
. После этого посылаем POST запрос на
http://m.odnoklassniki.ru/dk?bk=AltGroupJoin&st.cmd=altGroupJoin&st.groupId=%GROUPID%&_prevCmd=altGroupJoin&tkn=8737
с полями
fr.posted=set&button_join=Присоединиться
Если до того пользователь не вступил в группу, то он присоединится к сообществу. В противном случае никаких изменений не будет.
Приглашение друзей в сообщество
Получение списка друзей
Для получения списка друзей отправляем POST запрос без полей на
http://www.odnoklassniki.ru/%GROUPNAME%?cmd=PopLayer&st.cmd=altGroupMain&st.layer.cmd=InviteFriendsToGroupOuter&st.layer.groupId=%GROUPID%&st.groupId=%GROUPID%&st._aid=AltGroupTopCardButtonsInviteFriends&st.layer._bh=638&st.layer._bw=1280&gwt.requested=350ca8c8&p_sId=-4564357003538151028
(открываем окно со списком друзей)
Потом в цикле отправляем запрос на
http://www.odnoklassniki.ru/%GROUPNAME%?cmd=InviteFriendsToGroup&gwt.requested=350ca8c8&st.cmd=altGroupMain&st.groupId=%GROUPID%
с полями
st.layer.groupId=%GROUPID%&fetch=false&st.layer.page=%NUMBER%&st.loaderid=1576664431
В ответе ищем блоки <td> </td>
. Внутри этих блоков проверяем содержимое тега <div class="ifInvited"> </div>
. Если он пустой — этого пользователя можно пригласить. Идентификатор друга извлекаем из параметра value
поля selid
(Between("selid"+Chr(34)+" value="+Chr(34), Chr(34))
)
Если в ответе нет тега <td></td>
— цикл можно прекратить.
После этого отсылаем GET запрос (закрываем вызванное окно)
http://www.odnoklassniki.ru/%GROUPNAME%?st.cmd=altGroupMain&st.groupId=%GROUPNAME%&st.layer.cmd=PopLayerClose
Приглашение друзей в группу
Теперь к самому главному. Чтобы пригласить друга в сообщество, нужно послать POST запрос на
http://www.odnoklassniki.ru/%GROUPNAME%?st.cmd=altGroupMain&st.groupId=%GROUPID%&cmd=InviteFriendsToGroup&tkn=1278&st.layer.cmd=InviteFriendsToGroupOuter&st.layer.groupId=%GROUPID%&gwt.requested=350ca8c8&p_sId=-4564354890414541426
с такими полями
gwt.requested=350ca8c8&st.layer.posted=set&st.layer.query=&selid=%USERID%&button_invite=clickOverGWT
В одном запросе можно передать сразу несколько selid
, приглашая тем самым несколько человек. Важно! За день в одну группу можно пригласить ограниченное число человек, и это ограничение динамическое. Чем чаще пользователь приглашает друзей в сообщество — тем строже ограничение. Если за один запрос приглашается больше человек, чем можно — запрос не будет обслужен. На этот запрос сервер не отвечает, поэтому проверить факт приглашения не получится.
Деавторизация
Если Вы собираетесь использовать несколько учётных записей (что весьма логично, если Вам понадобился данный алгоритм), то Вам необходимо знать, как деавторизоваться. Для этого необходимо отправить POST запрос на
http://m.odnoklassniki.ru/dk?bk=Logoff&st.cmd=logoff&_prevCmd=logoff
с полями
fr.posted=set&button_logoff=Выйти
Примечания
%LOGIN% — логин
%PASS% — пароль
%GROUPID% — идентификатор группы (groupId)
%GROUPNAME% — короткое имя группы
%NUMBER% — номер страницы списка друзей (счётчик цикла)
%USERID% — идентификатор пользователя, которого приглашаем в сообщество
Запросы должны отправляться в кодировке UTF-8
Автор: Sungmaster
Как получить значение переменной st.layer._bw=1280 оно меняется. В вебстранице коде я его что-то не нахожу