ZebroidФорумПубличный разделПредложенияАрхивПродвинутый автопостинг.

Продвинутый автопостинг.

28 октября 2009, 11:28
Зарегистрирован: 18 октября 2009, 10:46
Добрый вечер, господа.

В новой версии была введена замечательная функция, которую я ну никак не ожидал увидеть в Зеброиде. Это функция настраиваемого автопостинга. По идее, это подразумевает настраиваемый постинг чего угодно, куда угодно. Так уж получилось, что эта тема мне очень близка. Настолько близка, что я каждый раз пишу для себя всякие авто-постеры в-комментарии, в-форумы, и пр. и пр. Каждый раз начинаю с белого листа проекта Borland C++. Нужно ли говорить, что на это уходит значительное количество времени.

Что же я вижу здесь? На первый взгляд — удобный Delphi-like язык, который позволяет совершать базовые операции над сайтом, при том, что он исполняется "на лету". Впрочем, рекомендую вам ознакомиться с ним самим, попробовав создать другой шаблон.

Я вижу в этом мощный инструмент, который при должных способностях стоит больших денег.

А пока, вопросы к adminу:

Я очень хотел бы увидеть полный список поддерживаемых функций, хотя бы с минимальным описанием.(В принципе, многое понятно из названий) И список $Макросов, которые можно использовать, а так так же узнать некоторые детали всего механизма.. Вы используете стандартный компонент WebBrowser ? Каким образом интерпретируется содержание шаблона, в каком порядке это происходит сейчас?

Вопросов, если честно, много — но думаю, что многие из них отпадут, когда я увижу то, что просил выше.

Почему в предложениях? Уверен, что предложений будет много, и чтобы не переносить тему создал её здесь.



28 октября 2009, 12:23
Зарегистрирован: 10 апреля 2012, 00:00
Полный перечень доступных функций будет описан в этой теме: viewtopic.php?f=11&t=203 (постараюсь уже сегодня сделать)

Механизм такой:

1. Сначала вызывается функция логин;

2. Потом функция захода в админку добавления категорий;

3. Далее запускается цикл категорий, который каждый раз запускает функцию добавления категории, только меняет служебные переменные (в данном случае название категории);

4. Далее запускается скрипт добавления постов по аналогии с категориями, так же в цикле.

Решение в лоб, но лучшего алгоритма мне придумать не удалось.

Да, используется стандартный WebBrowser, так что на порно сайты постить не рекомендую ;)

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



28 октября 2009, 17:26
Зарегистрирован: 18 октября 2009, 10:46
Да, по всей видимости вы мне рассказываете про то, что написано в шаблоне ucoz. Но мне, например, Укоз не интересен абсолютно.

Под механизмом я имел в виду другое. Впрочем, многое я понял на опыте. Но есть и неясные моменты. Как, к примеру, происходит поочередный постинг в тот же Укоз? Я не нашел в скрипте цикла. Это заложено в макросы вида $POST_TITLE, они меняются на следующие после использования?

Непонятно, к чему жесткая привязка по функциям? Скрипт не выполняется, если отстутствуют процедуры АддКат(), и т.д. Это ни к чему, я считаю. Сейчас всё, что мне нужно я добавил в конец Логин() — остальные процедуры висят мёртвым грузом.

Вопрос — на какое событие вы поставили выполнение следующей процедуры? Иногда начинается выполнение след. проц. до загрузки целевой страницы.

Первый опыт:

Конструкция такого вида:

Navigate('$POST_TITLE', true); Не обрабатывается. Почему, интересно? Тип данных-то одинаковый.

Для списка адресов Использовал доп.поля — не очень удобно. Если уж на то пошло, то хотелось бы иметь многострочную переменную, и обрабатывать её содержимое циклом.

Так же, из IE не передаются параметры относительно показа изображений, АктивХ, использования стилей, и пр. Тем не менее — прокси работает.

На сегодня, думаю, закончил эксперименты.

Думаю, если не забрасывать разработку, можно сделать весьма мощный инструмент..



29 октября 2009, 08:56
Зарегистрирован: 10 апреля 2012, 00:00
Да, по всей видимости вы мне рассказываете про то, что написано в шаблоне ucoz. Но мне, например, Укоз не интересен абсолютно.


Я рассказал вам общий механизм. Если вы знаете движок, по который такой порядок действий не подходит, то укажите мне на него.

Под механизмом я имел в виду другое. Впрочем, многое я понял на опыте. Но есть и неясные моменты. Как, к примеру, происходит поочередный постинг в тот же Укоз? Я не нашел в скрипте цикла. Это заложено в макросы вида $POST_TITLE, они меняются на следующие после использования?


Я это уже писал:

3. Далее запускается цикл категорий, который каждый раз запускает функцию добавления категории, только меняет служебные переменные (в данном случае название категории);

4. Далее запускается скрипт добавления постов по аналогии с категориями, так же в цикле.


Т.е. процедура каждый раз выполняется наново для нового поста/категории, иными словами её выполнение стоит в цикле.

Я мог бы конечно все эти заморочки повесить на юзера, но вообще была идея максимально упростить скрипт, чтобы люди которые не имеют опыта программирования посмотрев на несколько примеров и инструкцию могли сами составить рабочий скрипт

Непонятно, к чему жесткая привязка по функциям? Скрипт не выполняется, если отстутствуют процедуры АддКат(), и т.д. Это ни к чему, я считаю. Сейчас всё, что мне нужно я добавил в конец Логин() — остальные процедуры висят мёртвым грузом.


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

Вопрос — на какое событие вы поставили выполнение следующей процедуры? Иногда начинается выполнение след. проц. до загрузки целевой страницы.


Думаю вы имеете ввиду процедуру Navigate. К сожелению я не успел вчера написать инструкцию, тогда бы вопроса у вас не возникло.

Второй параметр в процедуре Navigate (тот что булевская переменная) это и есть ждать окончания загрузки страници или нет. В связи с тем, что укоз построен на аяксе, то браузер иногда не может коректно понять когда закончилась загрузка страници и замирает до истичения таймаута (по умолчанию около 30 сек). Поэтому в скрипте для укоза я использовал короткие паузы как гарантию загрузки страницы. В иных случаях всё же рекомендуется указывать параметр как истина.

Первый опыт:

Конструкция такого вида:

Navigate('$POST_TITLE', true); Не обрабатывается. Почему, интересно? Тип данных-то одинаковый.


В чём проявляется "не обрабатывается"? Ошибка выскакивает? Скорее всего браузер матерится на запрещённые символы

Для списка адресов Использовал доп.поля — не очень удобно.


Для какого списка адресов, пример ситуации наведите?

Если уж на то пошло, то хотелось бы иметь многострочную переменную, и обрабатывать её содержимое циклом.


В принципе вам ничто не мешает завести такую переменную в теле скрипта, но над многостраничными параметрами я подумаю.

Так же, из IE не передаются параметры относительно показа изображений, АктивХ, использования стилей, и пр. Тем не менее — прокси работает.


Я так понимаю вы знакомы с этими параметрами и где их искать, если подскажите, то я обязательно введу новые процедуры/переменные



29 октября 2009, 09:31
Зарегистрирован: 18 октября 2009, 10:46
Да, вчера немного сумбурно всё описал.. Постараюсь впредь яснее формулировать мысли.

Что я старался сделать вчера:

Чтобы избежать неудобных вопросов, представим следующую абстрактную ситуацию.

У меня есть сеть сайтов, к постам на которых можно оставлять комментарии. Предположим, этих сайтов 10.

Вчера я старался автоматизировать этот процесс с помощью Зеброида. То есть, в Зеброиде создавал посты, соответствующим образом их оформлял, и с помощью шаблона отправлял эти посты в комментарии на каждый сайт из сети.

Немного изучив шаблон Укоза, сначала я попробовал применить следующий метод:

Создаём опр.кол-во постов = кол-ву комментариев, причем в теле поста — сам комментарий, в заголовке — адрес, куда постить. Это было бы удобно, все можно было бы уложть в 2 строчки:

Navigate('$POST_TITLE', 1), Fill(pole, '$POST_BODY') - (точные названия не помню, это сейчас не важно).

К сожалению, как я писал выше, интерпретатор не переварил такой Navigate и выдал ошибку.

Далее, я задавал все адреса в доп.переменные, и поочередно делал Navigate('$ADD[1..n]',1) — этот способ сработал, но он несоизмеримо более трудоёмкий, чем первый. Ещё легче было бы, если бы я задал просто массив адресов(1 строка — 1 адрес, или через спец.символ, как угодно) и просто работал бы с одной переменной. Как задать её в теле скрипта — я не знаю. Расскажите, пожалуйста. Это пример задачи, которую я решал вчера. Впрочем, если выражаться немного по-другому, то её можно сформулировать так: автоматический постинг в большое количество сайтов с одинаковой структурой, в условиях отсутствия капчи.

Реальная проблема — некоторые страницы не успевают загрузиться. Navigate я всегда использовал с параметром true, мой вопрос был в другом. Как вы определяете, что загрузка страницы завершена? Вы смотрите событие OnNavigateComplete? Я делал так, и похожих проблем не наблюдал.

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

На этом пока заканчиваю,

сейчас мне пора идти — вечером, думаю, дополню..



29 октября 2009, 09:51
Зарегистрирован: 10 апреля 2012, 00:00


Немного изучив шаблон Укоза, сначала я попробовал применить следующий метод:

Создаём опр.кол-во постов = кол-ву комментариев, причем в теле поста — сам комментарий, в заголовке — адрес, куда постить. Это было бы удобно, все можно было бы уложть в 2 строчки:

Navigate('$POST_TITLE', 1), Fill(pole, '$POST_BODY') - (точные названия не помню, это сейчас не важно).

К сожалению, как я писал выше, интерпретатор не переварил такой Navigate и выдал ошибку.


Попробуйте так:

var

link : string;

begin

link := GetVar('$POST_TITLE');

Navigate(link, true);

...



Navigate я всегда использовал с параметром true, мой вопрос был в другом. Как вы определяете, что загрузка страницы завершена? Вы смотрите событие OnNavigateComplete? Я делал так, и похожих проблем не наблюдал.


OnNavigateComplete я не использую по одной простой причине: эта процедура срабатывает несколько раз до остаточной загрузки документа, а как узнать последний раз чтобы сказать скритпы "продолжай работать" мне узнать не удалось. Но много тестов и помощь со стороны более опытных программистов привели меня к следующему решению:

В процедуре OnDocumentComplete браузреа идёт проверка равности pDisp и ControlInterface браузера. Если они равны - значит страница загрузилась полностью. Но к сожалению это не действует в условиях выполенения ява скриптом. С загрузкой страниц же у меня подобных проблем не наблюдалось. Если вы можете предоставить хотя бы один сайт на котором Navigate так себя ведёт, то я постараюсь улучшить алгоритм поиска окончания загрузки страницы.

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


Мой браузер не сверяется с настройками ИЕ, просто настройки прокси идут немного отдельно и больше относятся к винде чем к браузеру, так что прокси он берёт оттуда.

Но тем не менее возможность отключать графику/звук/флеш сделать не проблематично.



29 октября 2009, 10:50
Зарегистрирован: 10 апреля 2012, 00:00
Написал инструкцию: viewtopic.php?f=11&t=203&p=736#p736



30 октября 2009, 10:33
Зарегистрирован: 18 октября 2009, 10:46
Спасибо, читаю — Буду разбираться, комментарии и всё остальное потом.

p.s.

Подскажите, как мне задать многострочную переменную, или массив в теле скрипта. Было бы здорово таким образом передавать адрес в Navigate(). С циклами постараюсь разобраться сам. Когда-то программировал на Делфи, со справочником ;)

UPD. Интересно, интерпретатор позволит реализовать такую идею: Построчно брать адреса из одного поста, в Navigate, а в Fill подставлять значение другого? Или, механизм таков, что разные посты не отличимы друг от друга с точки зрения автобота Зеброида?



30 октября 2009, 17:26
Зарегистрирован: 10 апреля 2012, 00:00


p.s.

Подскажите, как мне задать многострочную переменную, или массив в теле скрипта. Было бы здорово таким образом передавать адрес в Navigate(). С циклами постараюсь разобраться сам. Когда-то программировал на Делфи, со справочником ;)

UPD. Интересно, интерпретатор позволит реализовать такую идею: Построчно брать адреса из одного поста, в Navigate, а в Fill подставлять значение другого? Или, механизм таков, что разные посты не отличимы друг от друга с точки зрения автобота Зеброида?


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

Думаю это ответ на оба эти вопроса



31 октября 2009, 06:59
Зарегистрирован: 18 октября 2009, 10:46
Ясно, ответ — реализовать это текущими средствами невозможно.

Вы мне подскажите про мою любимую многострочную переменную || массив, с возможностью оперировать каждым элементом в отдельности, с типом данных AnsiString (Если я не ошибаюсь, он используется в Navigate)?

Использовать её в теле скрипта мне было бы очень удобно.

Спасибо!