1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

HtmlUnit. Постинг в группу на Одноклассниках.

Тема в разделе "Java", создана пользователем alex_xpert, 18 окт 2014.

  1. TopicStarter Overlay
    alex_xpert

    alex_xpert Местный надзиратель Команда форума

    Регистрация:
    10.09.11
    Сообщения:
    891
    Симпатии:
    318
    Баллы:
    575
    Пол:
    Мужской
    Адрес:
    Бугуруслан
    ICQ:
    6210725
    Skype:
    alex_xpert
    Думаю этот вопрос интересен многим админам групп.
    Поскольку зарегистрировать приложение в Одноклассниках можно только через жопу если очень повезёт, и поскольку их API настолько паскудное, что не предусматривает никаких методов, касающихся групп, то единственный способ автоматизировать публикацию записей - эмулировать действия пользователя.
    Собственно, этим мы и займемся.
    Конечно, существуют сервисы, которые предоставляют такую услугу, но их возможности ограничены, к тому же многие из них хотят денежку. Кроме всего прочего, я, например, им просто не доверяю.
    Я использовал библиотеку HtmlUnit для написания этого мини-бота. Да, у нее много зависимостей, но оно того стоит.
    И ещё пару примечаний:
    - пути к прикрепляемым изображениям (массив photos) необходимо указывать относительно рабочей папки приложения;
    - естественно вы должны быть администратором группы;
    - я показал лишь непосредственный механизм постинга, импортировать исходные данные для постов вы можете как угодно: транслировать RSS поток, получать с каких-либо сервисов посредством их API, тупо парсить сайты, выдергивать из БД, принимать посредством ICQ, XMPP, SMS и так далее, этот список ограничивается лишь вашей фантазией и прямотой ваших рук. ;)
    Код:
    package ru.worldjb.ok;
    
    import com.gargoylesoftware.htmlunit.WebClient;
    import com.gargoylesoftware.htmlunit.html.HtmlFileInput;
    import com.gargoylesoftware.htmlunit.html.HtmlForm;
    import com.gargoylesoftware.htmlunit.html.HtmlPage;
    
    /**
    * Постинг в группу в Одноклассниках
    * посредством эмуляции действий пользователя
    * @author alex_xpert
    */
    public class PostToOK {
        private static String login = ""; // Логин
        private static String password = ""; // Пароль
        private static String group_id = ""; // ID группы
        private static String message = "My message"; // Текст поста (ссылки будут активными)
        private static String[] photos = {"1.png", "2.jpg"}; // Картинки для прикрепления к посту
        private static WebClient wc = new WebClient(); // Веб-клиент
        private static HtmlPage page; // Текущая страница
        private static HtmlForm login_form; // Форма входа
        private static HtmlForm add_image_form; // Форма загрузки изображения
        private static HtmlForm post_form; // Форма отправки поста
    
        /**
         * Main Method
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // Отключаем CSS стили и JavaScript
            wc.getOptions().setCssEnabled(false);
            wc.getOptions().setJavaScriptEnabled(false);
            // Заходим в Одноклассники
            login();
            // Публикуем запись
            sharePostToOKGroup();
        }
    
        /**
         * Login in OK
         */
        private static void login() {
            try {
                // Открываем мобильную версию ОК
                page = (HtmlPage) wc.getPage("http://m.ok.ru");
                // Переходим к форме входа
                login_form = page.getForms().get(0);
                // Вводим логин и пароль
                login_form.getInputByName("fr.login").setValueAttribute(login);
                login_form.getInputByName("fr.password").setValueAttribute(password);
                // Жмакаем на кнопку логина
                page = login_form.getInputByName("button_login").click();
            } catch(Exception ex) {
                ex.printStackTrace();
            }
        }
    
        /**
         * Adding photo to post
         * @param photo
         */
        private static void addPhoto(String photo) {
            try {
                // Жмакаем на кнопку добавления изображения
                page = post_form.getInputByName("button_create_media").click();
                // Переходим к форме загрузки изображения
                add_image_form = page.getForms().get(0);
                // Указываем картинку
                HtmlFileInput photoFile = add_image_form.getInputByName("fr.photoFile");
                photoFile.setContentType("image/" + photo.split("\\.")[1]);
                photoFile.setValueAttribute(photo);
                // Загружаем
                page = add_image_form.getInputByName("button_add_photo").click();
            } catch(Exception ex) {
                ex.printStackTrace();
            }
        }
    
        /**
         * Share post to Your OK Group
         */
        private static void sharePostToOKGroup() {
            try {
                // Открываем страницу группы
                page = (HtmlPage) wc.getPage("http://m.ok.ru/group/" + group_id);
                // Переходим к форме отправки поста
                post_form = page.getForms().get(0);
                // Вводим текст
                post_form.getTextAreaByName("fr.msg").setText(message);
                // Прикрепляем картинки (если есть)
                for(String photo : photos) addPhoto(photo);
                // Возвращаемся к форме отправки поста
                post_form = page.getForms().get(1);
                // Жмакаем на кнопку отправки
                post_form.getInputByName("button_save").click();
            } catch(Exception ex) {
                ex.printStackTrace();
            }
        }
    }
    D_Jackas, by_perec, aNeRka2010 и 3 другим нравится это.
  2. cerber

    cerber Местный инквизитор Команда форума

    Регистрация:
    25.02.11
    Сообщения:
    7.927
    Симпатии:
    2.779
    Баллы:
    575
    Пол:
    Мужской
    Адрес:
    АДА
    сань,какую ты библиотеку использовал для данной наработки????
  3. TopicStarter Overlay
    alex_xpert

    alex_xpert Местный надзиратель Команда форума

    Регистрация:
    10.09.11
    Сообщения:
    891
    Симпатии:
    318
    Баллы:
    575
    Пол:
    Мужской
    Адрес:
    Бугуруслан
    ICQ:
    6210725
    Skype:
    alex_xpert

Поделиться этой страницей