1 место ZennoPoster: Кладезь безграничных идей и возможностей. Часть 1 (JS+Mysql)

  • Автор темы Автор темы lexone
  • Дата начала Дата начала

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Реакции
726
Баллы
93
==========================

Вторую часть я буду дописывать уже 23-24 числа.

==========================

В этой же части, я вас познакомлю с JS + Mysql

imag3e.png

Те, кто еще работают с браузером - советую познакомится с этой темой.

При работе в браузере, вас это будет мало волновать... Но стоит вам познакомится с post/get запросами, как эта проблема станет достаточно серьезной и опасной.

im22age.png

Ты роешь исходник каждого запроса с ног до головы, НО НЕ МОЖЕШЬ НАЙТИ ЭТО ПАРАМЕТР!!!!!!!


И тогда уже начинаешь понимать, кто тут замешан
image.png



Я?
t3humb.png.gif





До недавнего времени самым эффективным способом борьбы с этим было
946204954.gif

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


Но как бы это не было печально .... в будущем нас ждет еще больше этого @#$%^&* .

Далеко ходить не надо..
Яндекс, рамблер , Mail - три девицы у окна, код писали до поздна.

  • 1- ая : регистрировать себя дает, но письма хрен отправишь.. Фильтр (на тебя мало данных, браток).

Так как регистрацию мы проводлили с помощью post запроса, то от себя не передавали событий в виде: click, focus, смещения мыши, event_собитыя.

Маил это с легкость видит и ограничивает твои права (спасибо говорите, что хоть письма дает принимать.. Старшая сестра яша и это отнимает :dl: ).

  • 2-ая: Яндекс. Утро.. 9:00 . Ничего не предвещало беды... Рядовой Вася садится за панель управления и НАЧИНАЕТ СИДЕТЬ ПРЯМО НА ГЛАЗАХ!!!
Еще бы... (КТО не в курсе, А-парсер в тот момент выпустил новый функционал: Регер Яндекс акков.)

Скорость регистрации была просто ужасающая !!!! За день регистрировалось до 100-200к яндекс почт. (спс тебе ripкапча, за предоставленную возможность уходить в - 10$ баланса :D ).

Вообщем, Вася для себя решил:

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

б) даем и дальше работать этому монстру, но баним отправку / принятия писем с них (+ усложняем капчу с циферок до буковок). :ay:
----------------------------------------------------------------

НО!! Пришел второй монстр - КАПЧА МОНСТР !!!

Тут то нервишки у Васи не выдержали, и приступил он к ПЛАНУ A.

  • 3-ая: Рамблер. Собственного мнения у младшей сестры не было, то решила повторить за старшей. (но так как тупенькая, обходится ее новая защита на раз, два).


-----------------------------------------------------------------------------

Но оставим сей длинный пролог , и перейдем к практики :bz:



С 2011 года Gmail нас балует вечно не меняющиеся формой входа.
833da2662b8.jpg
При попытки войти в аккаунт, наш сниффер вот что словил:

GALXSPZiuXlijCg
hlru
_utf8
bgresponse!FBdCdh6ASgU0x5ZEXYI3gXIlIdoCAAAAjFIAAAQlKgD7w1iGlpznAg7-tXqivNtS7QWZDqBx0JdUWMMQeIP9N2_rhnpwFA4JqIRZODfhi6IikUkZKsKEv5BGTBsLMTjv_cuKHA7CM8cJpXAJuJACYGxxZOV1hl-XH6Iv8KuUD_1f8gAS09tiEZHSrGM9S5ucI8uHIo11RNuwfvEa2nwf423UaojDtXprXD-sxl3Mxm7_U-gvncl4Eqc0QK1mIKqrkJYz8ViXuiXEY8-69jp5d2oTEk7drSGCii7q_sc23_QuY7yb8-scZaYrSSVUMy-TycEIPFLoWPVM5NZM0ZwQhMA5_vXIA0r7ChixuOumr-z5EWH3MmS4zohIPHM
pstMsg1
dnConn
checkConnectionyoutube:479:1
checkedDomainsyoutube
Email3_konkurs_statie
Passwdwin
signInВойти
PersistentCookieyes
rmShown1
[TBODY] [/TBODY]
Из всех возможных параметров, единственный не подвластный нашему взору был - bgresponse.

Для этого, мы идем в Google Chrome и устанавливаем плагин - Visual Event

Плагин позволяет нам наблюдать все event-собитыя , которые происходят на странице при клике, вводе символов, и других ajax событий.

aa611cbf03.jpg


Прекрасно..
Мы с первой же попытки нашли js-события , где генерируется наше значения - bgresponse.



chrome _ настало твое время.
  1. Открываем браузер
  2. Жмем F12
  3. Попадаем на вкладку Sources (
1.gif

В самом конце мы видим скрипт, который Visual Event изначально для нас поймал.
Наши действия:

  1. Ставим бряки на скрипт, чтобы в дальнейшим отловить его действия в отладчике хрома.
  2. В scope variables выглядываем значения переменных, которые генерирует наш js скрипт.
  3. Идем в консоль и проверяем работу скрипта


3.gif



Код:
Развернуть Свернуть Копировать
 try {
  document.bg.invoke(function(response) {
  document.getElementById('bgresponse').value = response;
  });
  } catch (err) {
  document.getElementById('bgresponse').value = '';
  }



Благодаря отладчику, мы нашли скрипт, который генерировал значения - "bgresponse".



HTML:
Развернуть Свернуть Копировать
!oqFCFTd6Lc3imBxE8ytflUhyo8sCAAAAMlIAAAAKKgEAwzkrxLJGWOEBXZTxWeT9dS4Fx432yUwYYppJSspeR4BlvGbZ5iuljw6H_4ZAaxijcm6FEIqsObcJ3egZ5G-NhH-66_5-wzAry9E0vKVhq8-gax3EakkzswE9QgH6WOUgJhrReBlBxer1W2M7x1OQYaoGUkJlzuG4mYlkTRnLCpO-mRYbXL5cZUwqLk28GBUWn2S-EAk3RykYy51wDN2Om8Z9eOS6zCtxxA-6-9Bsc9-FLSjcgGmTiVn0316cISXcwTD0Gz2LqsooazA0QgAfdkfr7gUGcOoRsGpUyC-coXoEDsxR7gYVwFkkK-BLGaOYwrTGwaRRHTRvd6kOrUJQ3A


Хоть мои познания в JS и скудны, даже я могу наблюдать что скрипт маловат для такого куска кода) . По моему мнению, за - " document.bg.invoke(function(response) " - спрятан еще один js , который генерирует сей длинный код. А маленький кусок кода (см.выше), скорее всего передает в переменную (bgresponse) тот длинный хеш.

===================

Какие наши дальнейшие действия?


  1. Обратно заходим в откладчик.
  2. Ищем колонку Call Stack (стеки вызовов,куда отправляют друг-другу информацию js скрипты между собой).
  3. Просматриваем их и находим на наше мнения подходящий кусок кода .

4.gif



БИНГО!

7d12413df7.jpg

Мы нашли js, который вопроспроизвод такой длинней хеш-код. (помимо md5, производится подмешка соли)


Если вы не знаете js или c# , то скорее всего вам придется прибегнуть к помощи фрилансеров. На руках у вас будет вся информация, какие js-ки использует сайт и каким образом... Это очень ускорит процесс переноса кода на c# сниппет зеннопостера.


im11age.png

 
Номер конкурса статей
  1. Третий конкурс статей
Тема статьи
  1. Нестандартные хаки
Последнее редактирование:
Удаленное управление зеннопостером + Админка
(статиситка, процесс выполнения, добавления заданий).

image.png




Во второй части нашей статьи, мы убьем сразу двух зайцев:

1)
Избавимся от наболевших текстовых логов .

J2bJ64XfR3nw26.jpg


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

Когда я наконец достиг точки кипения, было РЕШЕНО! Я ищу PHP кодера и мы пишем админку.

Благодаря Voldemar -у, поиск кодера и раздумий над внешним видом админки не заставил себя ждать.

Решение было принятно: Крадем админку с его сайта и переделываем в универсальный шаблон на любую тематику.

9bU6Nfw.png


(прежний вид)


Теперь задача стояла таким боком: научить зеннопостер массово брать данные с mysql таблицы.

==========================
Давайте рассмотрим , как мы решали эту проблему.

get-connected.jpg

1) Берем аккаунты с mysql таблицы.
(если ваши данные хранятся локально, то можно пропустить этот пункт).

Код:
Развернуть Свернуть Копировать
var result = String.Empty;
var table = project.Tables["Data"];
var command = new MySql.Data.MySqlClient.MySqlCommand();
command.CommandText = "SELECT * FROM projects WHERE active=0;";  \\ Команда на поиск аккаунтов, где в таблице "projects" ищем аккаунты , в которых есть "0" в столбце "active"
var connectionSTring = "server=mysql.blablabla.myjino.ru;user=pashalka;database=win/no;port=3306;password=12345;";  \\ Авторизация

try
{
    command.Connection = new MySql.Data.MySqlClient.MySqlConnection(connectionSTring);
}
catch (Exception e)
{
    result = "Mysql ошибка подключения";
}
if (result!=String.Empty)
{
    return result;
}
try
{
    command.Connection.Open();
    var read = command.ExecuteReader();
    while (read.Read())
    {
        table.AddRow(
        read["acc"].ToString()+"\t");  \\ экспортируем полученные данные в таблицу "acc"
    }
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
    result = "Mysql ошибка "+e.Message;
}
finally
{
    command.Connection.Close();
}
return result;

2) Узнаем, что случилось с аккаунтами благодаря Api ВК.

e0995b08eb.jpg

3) Учим зенннопостер импортировать полученные данные обратно в таблицу

Код:
Развернуть Свернуть Копировать
var result = String.Empty;
var command = new MySql.Data.MySqlClient.MySqlCommand();
var connectionSTring = "server=mysql.myname.myjino.ru;user=lexone;database=lexone;port=3306;password=parol;";
try
{
    command.Connection = new MySql.Data.MySqlClient.MySqlConnection(connectionSTring);
}
catch (Exception e)
{
    result = "Mysql ошибка подключения";
}
if (result!=String.Empty)
{
    return result;
}
try
{
    command.Connection.Open();
    string request = "INSERT INTO vk1 (avatar, Data, group1, post) VALUES (@avatar, @Data, @group1, @post);";  \\ ищем в таблице vk1 столбцы, куда будем добавлять данные с лога.

    MySql.Data.MySqlClient.MySqlCommand com = new MySql.Data.MySqlClient.MySqlCommand(request, command.Connection);
    string avatar = project.Variables["avatar"].Value;
    string Data = project.Variables["Data"].Value;
    string group1 = project.Variables["group1"].Value;
    string post = project.Variables["post"].Value;

       \\   ищем столбцы и добавляем в них данные из выше перечисленных переменных

    com.Parameters.AddWithValue("@avatar", avatar);
    com.Parameters.AddWithValue("@Data", Data);
    com.Parameters.AddWithValue("@group1", group1);
    com.Parameters.AddWithValue("@post", post);
    com.ExecuteNonQuery();
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
    result = "Mysql ошибка "+e.Message;
}
finally
{
    command.Connection.Close();
}
return result;


---------------------------------------------------------------------------------------------------
Скачать шаблон: https://yadi.sk/d/ZtWdVBfLgo4wF
Скачать админку: https://yadi.sk/d/8MzAzJkWgo5Ab
---------------------------------------------------------------------------------------------------
imag1e.png

---------------------------------------------------------------------------------------------------

> ТЕПЕРЬ ДАВАЙТЕ ПЕРЕЙДЕМ КО ВТОРОЙ ПРОБЛЕМЕ <

٩(̾●̮̮̃̾•̃̾)۶





Проблема в виде "входных настроек" особо набирала обороты, когда приходилось по 100 раз на день переключатся между:

Удаленным сервером ⇐ ⇒ рабочей машиной.


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

За основу был взят первый опыт с базой данных (админка со статистикой).

i2mage.png

Сниппет берет данные из mysql таблицы и кладет в переменные
для дальнейшей работы шаблона

-----------------------------------------------------------​

Чтобы данные появились в mysql базе, нам нужно их туда добавить.

Для этого, biohan любезно подготовил по моей просьбе новую админку.

im3age.png



-----------------------------------------------------------------------------------------------------------


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

---- ----​

Для этого нам нужно

  1. Планировщик зеннопостера (выставляем выполненеия проекта каждую минуту).
  2. Сигнал для зеннопостера, какие акки он должен брать, какие нет.
  3. Обмен данными в режиме реального времени (сервер + зеннопостер). Так как зенка любит сбоить, мы должны на каждую итерацию отправлять. сколько мы уже запостили сообщений .

Если с планировщиком все понятно, то вот с сигналом уже становится сложнее.

Мой выбор пал на такой вариант:

96aeba115e.jpg

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


Теперь же при нажатии "НАЧАТЬ", в mysql таблце изменяется столбец "active" с нуля на единицу

В этом случае , при прошествии минуты в планировщике зеннопостера .. наш c# сниппет подхватит все аккаунты со значением "1" в стобце active и обратно заменит его на НОЛЬ.

Почему? А чтобы другие потоки не взяли этот аккаунт :P (да.. наш проект работает многопоточно).

Код:
Развернуть Свернуть Копировать
// блокируем выполнение, чтобы другие потоки не испортили

lock(SyncObject)
{

   var result = String.Empty;
   var command = new MySql.Data.MySqlClient.MySqlCommand();
   command.CommandText = "SELECT * FROM projects WHERE active=1 LIMIT 1 ;";
   var connectionSTring = "server=mysql.test.myjino.ru;user=test;database=test;port=3306;password=test;";

try
{
    command.Connection = new MySql.Data.MySqlClient.MySqlConnection(connectionSTring);
}
catch (Exception e)
{
    result = "Mysql ошибка подключения";
}
if (result!=String.Empty)
{
    return result;
}
try
{
    command.Connection.Open();
    var read = command.ExecuteReader();
    while (read.Read())
    {
        project.Variables["id"].Value = read["id"].ToString();
        project.Variables["acc"].Value = read["acc"].ToString();
        project.Variables["image"].Value = read["img"].ToString();
        project.Variables["title"].Value = read["header"].ToString();
        project.Variables["col_vo"].Value = read["max"].ToString();
        project.Variables["count"].Value = read["done"].ToString();
        project.Variables["pause"].Value = read["pause"].ToString();
    }
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
    result = "Mysql ошибка "+e.Message;
}
try
{
    command.Connection.Close();
    command.Connection.Open();
    var request = "UPDATE projects SET active = 0 WHERE id="+Convert.ToInt32(project.Variables["id"].Value)+";";
    MySql.Data.MySqlClient.MySqlCommand com = new MySql.Data.MySqlClient.MySqlCommand(request, command.Connection);
    com.ExecuteNonQuery();
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
result = "Mysql ошибка "+e.Message;
}
finally
{
    command.Connection.Close();
}
return result;

}




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



Код:
Развернуть Свернуть Копировать
var result = String.Empty;
var command = new MySql.Data.MySqlClient.MySqlCommand();
var connectionSTring = "server=mysql..myjino.ru;user=;database=;port=3306;password=;";
try
{
command.Connection = new MySql.Data.MySqlClient.MySqlConnection(connectionSTring);
}
catch (Exception e)
{
result = "Mysql ошибка подключения";
}
if (result!=String.Empty)
{
return result;
}
try
{
command.Connection.Open();
string request = "UPDATE projects SET done  = '"+
    project.Variables["Counter2"].Value+
    "' WHERE id = '"+
    project.Variables["id"].Value+
    "'";
MySql.Data.MySqlClient.MySqlCommand com = new MySql.Data.MySqlClient.MySqlCommand(request, command.Connection);
com.ExecuteNonQuery();
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
result = "Mysql ошибка "+e.Message;
}
finally
{
command.Connection.Close();
}
return result;



Если же произошел какой-то сбой, то не беда) Создаем Экшн BAD_END и ставим на него этот сниппет.



Код:
Развернуть Свернуть Копировать
var result = String.Empty;
var command = new MySql.Data.MySqlClient.MySqlCommand();
var connectionSTring = "server=mysql..myjino.ru;user=;database=;port=3306;password=;";
try
{
command.Connection = new MySql.Data.MySqlClient.MySqlConnection(connectionSTring);
}
catch (Exception e)
{
result = "Mysql ошибка подключения";
}
if (result!=String.Empty)
{
return result;
}
try
{
command.Connection.Open();
string request = "UPDATE projects SET active  = '1' WHERE id = '"+
    project.Variables["id"].Value+
    "' ";
MySql.Data.MySqlClient.MySqlCommand com = new MySql.Data.MySqlClient.MySqlCommand(request, command.Connection);
com.ExecuteNonQuery();
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
result = "Mysql ошибка "+e.Message;
}
finally
{
command.Connection.Close();
}
return result;


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


4c09aa4806.jpg

---------------------------------------------------------------------------------------------------
Скачать шаблон: https://yadi.sk/d/P_VhxTFYgo7Su
Скачать админку: "скоро будет"


---------------------------------------------------------------------------------------------------​


(очень надеюсь, что встану утром ( :cd: ) и начну дописывать 3, 4, 5, 6 [и остальные пункты...... *которые пока остаются в секрете]. )
 
Последнее редактирование модератором:
lexone
у меня часть каринок на отображается. К примеру с ргхост
А статья кулл.
 
  • Спасибо
Реакции: lexone
За креативную подачу материала однозначно лайк. Полезным было бы для меня если бы хоть немного в JS понимал хоть что-то... В силу недостатка своих знаний в этом направлении кроме красивых анимированных картинок полезного для себя не нашел...:ak:
 
  • Спасибо
Реакции: lexone
Сказать - великолепно, ничего не сказать, это новый практический учебник по Яваскриптам и Мускэлю - ЛАЙКнула!!! :dh::dh::dh:
С нетерпением жду продолжения.
 
Печально что пока непонятно по JS ничего. Особенно, что касается импорта. Прочитаем еще пару десятков раз. А лучше сами попробуем повторить =)
Эта часть позновательна.
Вторая часть про админки - вообще классная, особенно с тем, что еще и надавал и шабов и саму админку. Жирный плюс в карму.
Ждем продолжения.
 
  • Спасибо
Реакции: lexone
Про mysql - ну почти мой проект под авиту :)
Только вынеси весь mysql в php, а то палишь логины/пароли к базе по сети :)
 
  • Спасибо
Реакции: lexone
Обновил картинки.

P.S чтобы mysql сниппеты заработали, вам надо...

1) Создать папку ExternalAssemblies ( \ZennoPoster Pro\Progs\ExternalAssemblies )
2) Поместить туда MySql.Data.dll (изначально он в папке :\ZennoLab\ZennoPosterPro\Progs\ )
3) А в шаблоне (который я приложил), найдете как добавлять в Using.
 
Последнее редактирование:
За креативную подачу материала однозначно лайк. Полезным было бы для меня если бы хоть немного в JS понимал хоть что-то... В силу недостатка своих знаний в этом направлении кроме красивых анимированных картинок полезного для себя не нашел...:ak:

Не поверишь... Я В JS тоже полный ноль)

Но отладчик почти все делает за тебя (находит моменты, где генерируется недостающий тебе параметр).
А дальше уже бежишь на фрилансер и заказываешь себе сниппет :dm:
 
  • Спасибо
Реакции: Goodmark
все круто только если мы не используем барузер и нам нужна админка то зачем тут вообще зенка?)
проще написать тот же код на питоне и не устраивать танцы с бубнами вокруг зеннопостера)
 
  • Спасибо
Реакции: lexone
все круто только если мы не используем барузер и нам нужна админка то зачем тут вообще зенка?)
проще написать тот же код на питоне и не устраивать танцы с бубнами вокруг зеннопостера)

Я вот не знаю питон.

С# - на уровне подправить чужой код.

А благодаря зеннопостеру, мне остается вставить c# сниппет на добавления в базу данных и никакой мароки с прокси,потоками, архитектурой проекта и.т.д
Остальная часть работы идет уже со встроенным функционалом зеннопостера.
 
Последнее редактирование:
  • Спасибо
Реакции: goblin2oo8
Я вот не знаю питон.

С# - на уровне подправить чужой код.

А благодаря зеннопостеру, мне остается вставить c# сниппет на добавления в базу данных и никакой мароки с прокси,потоками, архитектурой проекта и.т.д
Остальная часть работы идет уже со встроенным функционалом зеннопостера.
c# тоже можно на серваке пускать, это лично мое мнение но тут зенка костыль
ну а так статья понравилась)
 
  • Спасибо
Реакции: lexone
все круто только если мы не используем барузер и нам нужна админка то зачем тут вообще зенка?)
проще написать тот же код на питоне и не устраивать танцы с бубнами вокруг зеннопостера)
Дельное замечание, ладно если там работа через web идёт (браузер когда нужен), а тут же get запросы к API.
С другой стороны завтра будет работа через web - и тут админка как раз то что нужно.
4 года назад в уме проектировал такой вариант (чтобы избавиться от локальной машины и иметь возможность масштабироваться по дедикам), но никак не возникало сильной потребности в этом. Максимум 2 дедика было в работе всегда, а потом вопрос закрыл питон, увеличив тем самым пропускную способность с 300к постов в день (ZP) до 5kk в день (питон), на том и остановился.
 
  • Спасибо
Реакции: alekwuy и lexone
Подход хороший, но есть моменты которые не раскрыты.

Не раскрыл почему был выбран MySQL(СУБД), а не файлы, скажем JSON?
Что будет если хост с базой упадет?
Не подключимся к базе, что с данными /управлением будет?
Сколько времени теряем на коннектах к базе и Get/Set данных?

Имхо, при 50+ потоках все это упадет.
Нужно все это надежнее и производительнее оформлять.
Лишнее промежуточное звено - удаленный хост с СУБД.

Имхо, потенциал (возможные проблемы ) MySQL избыточен тут.
В этой задаче и схеме заменить его на JSON/XML файлы.
Писать лог в формате JSON/XML и на них уже вешать любой UI.
Раз в минуту пулять на хост через post/get или по фтп.
Если нужно в вебе открыть все это.

Еще лучше не пулять удаленно, а писать локально/в облако.
Писать скажем JSON лог на Dropbox.
На железе оператора развернуть локальный веб-сервер + админку/UI
 
Последнее редактирование:
  • Спасибо
Реакции: steamn, AlisaZ и CSS
- Что будет если хост с базой упадет?
Имхо, при 50+ потоках все это упадет.

Почему у меня на бесплатном джино и в 100 потоков держало базу?

Писать лог в формате JSON/XML и на них уже вешать любой UI.

Спасибо за идею, даже не задумывался об этом :ay:
Но пока и субд хватает с головой)

На железе оператора развернуть локальный веб-сервер + админку/UI

Кто ж мешает) можно и на денвере поднять Mysql...

Писать скажем JSON лог на Dropbox.

А это уже реализовано) но слегка для другой задачи (мб затрону в сл.конкурсе).

\\ напоминаю, я лишь на начальном уровне программирование, в отличии от вас ребят (7make , CSS) .... кручусь с костылями как могу :dm:
 
Подход хороший, но есть моменты которые не раскрыты.

Не раскрыл почему был выбран MySQL(СУБД), а не файлы, скажем JSON?
Что будет если хост с базой упадет?
Не подключимся к базе, что с данными /управлением будет?
Сколько времени теряем на коннектах к базе и Get/Set данных?

Имхо, при 50+ потоках все это упадет.
Нужно все это надежнее и производительнее оформлять.
Лишнее промежуточное звено - удаленный хост с СУБД.

Имхо, потенциал (возможные проблемы ) MySQL избыточен тут.
Mysql более гибкий чем файлы уж поверьте и уж точно в разы быстрее.
Масшатбируемость немного другая у меня одни проекты дергают данные с двух серваков...
Если хост с базой падает, то да проект останавливается... но пока у меня зенка чаще вставала...
P.S. на mysql лимит 1000 коннектов стоит )

Народ вы главную фишку походу не просекли - удобство конечному потребителю - т.е. можно сделать сервис того же постинга в Авиту и предоставлять людям возможность управлять своими заданиями, а с них денежку брать, самому можно уехать отдыхать например :)
Отдельное спасибо за Visual Event - не знал что такое есть хотя дааавно задумывался о такой возможности :)
 
  • Спасибо
Реакции: alexstpm и lexone
Gfoblin,

Я же и говорю, что MySQL на столько гибкий и крутой, что его избыточно юзать для простой передачи на UI пару кило строк. Надежнее писать в JSON разметку которую клиент будет приходить на бэкенд с зенно и забирать, а не наоборот, слать на фронтенд.

Сервис для паблика тоже громко сказано.
Сколько серваков с зенкой/ботами нужно тогда и какая маржа на всем этом будет:-)

Но вопрос даже не в MySQL.
Какую задачу решаем дублированием управления через веб морду?

п.с. продолжу дискус после голосовалки , а то скажете накинулся ))
 
Последнее редактирование:
  • Спасибо
Реакции: lexone
Какую задачу решаем дублированием управления через веб морду?

п.с. продолжу дискус после голосовалки , а то скажете накинулся ))

Ради того, чтобы по 100 раз не заходить на сервак (особо критично, когда интернет медленный).

a4047813bc.jpg


+ кому не хочется красивого и гибкого управления в браузере :dk:в придачу с удобной статистикой всей проделанной работы.
 
  • Спасибо
Реакции: AZANIR и alexstpm
Но вопрос даже не в MySQL.
Какую задачу решаем дублированием управления через веб морду?

п.с. продолжу дискус после голосовалки , а то скажете накинулся ))
Ну можно в 1 клик скажем так отключить задачи которые были записаны с понедельника по вторник третей недели сентября у которых юзер старше 70 лет и его мыло содержит более 3х цифр при этом в пятницу вечером они запускались более 20 раз :)
А вот если это дело в разных файлах хранится я бы посмотрел ) как это исполнить...
Веб интерфейс решает вопросы удаленного управления с той же мобилы например - если канал странный EDGE или 2г :)
Скажу по секрету что самый первый мой проект сразу юзал mysql - я его подключил к опенкарту и преспокойно лью на авито товар и обновляю там ценники :)
 
Спасибо за труд!
Вещь нужна, например у меян клиенты по другим софтам имеют личный кабинет свой, я бы туда и по ВК сделал сервис. Насчет маржинальности тут тоже мне кажется все ок, сервер под 1 клиента даже если брать = 400 рублей/ в месяц. Вы берите 900 например с него. Уже в плюсе. Если у Вас использование Ваших аккаунтов при рассылках, то включите это в себестоимость 1 сообщения для клиента. Например берет по 70 копеек с клиента за сообщение.
Идея классная, просто у кого какая уже фантазия, а там уже и надобность )
 
Последнее редактирование:
ТС уже 25 число, обещал продолжение) Давай жги. Опиши работу с flash через сниппеты. И если знаешь как сертификаты подделывать и отправлять на сервак.
 
ТС уже 25 число, обещал продолжение) Давай жги. Опиши работу с flash через сниппеты. И если знаешь как сертификаты подделывать и отправлять на сервак.

Ого, у нас гость с другой планеты o_O (вроде как 23 число...)
24 числа я только буду дописывать вторую часть (увы и ах.. но и так работа встала на 2 дня, пока писал первую часть).
Чтобы сэкономить время, скорее всего большую часть перенесу в видео-формат. И сделаю обзор post/get запросов (как снифать ) тоже в видео формате (многие просили).

P.S сам бы подался в ученики, кто хорошо умеет работать с флеш :ap:
 
  • Спасибо
Реакции: Знайка
И сделаю обзор post/get запросов (как снифать ) тоже в видео формате (многие просили).

Да да просветится бы не мешало.
 
24 числа я только буду дописывать вторую часть (увы и ах.. но и так работа встала на 2 дня, пока писал первую часть).
Чтобы сэкономить время, скорее всего большую часть перенесу в видео-формат. И сделаю обзор post/get запросов (как снифать ) тоже в видео формате (многие просили).
Ждем, тогда и проголосую :-)
Посмотрим, как на этот раз будет.
А то в прошлый - обещания так и остались обещаниями :bn:
 
  • Спасибо
Реакции: AlisaZ
Ждем, тогда и проголосую :-)
Посмотрим, как на этот раз будет.
А то в прошлый - обещания так и остались обещаниями :bn:
Я тогда объяснил тебе в личке, из-за чего не смог выложить шаб по ютубу (вначале они поменяли формат api, потом были жуткие баны за автоматизированную заливку).
Спс скажи теме на складчике по ютубу (.. они все убили :am: [софт по массовой заливке видео-дорвеев]

Ну а продолжение будет 100% .. покрайне мере за а-парсер точно (давно обещал форбу, обзор его софта с технической стороны).
 
Последнее редактирование:
  • Спасибо
Реакции: Знайка
Я тогда объяснил тебе в личке, из-за чего не смог выложить шаб по ютубу
lexone: "На днях допишу уже . Мой старый api ключ просто блокнули.. (на днях скинут прогу, ее отснифаю и ключ возьму.. + возможно аннотации там можно будет вставлять)."
(последний ответ)

Так и не дождался, даже ответа на последующие вопросы по процессу.
 
  • Спасибо
Реакции: AlisaZ
ТС уже 25 число, обещал продолжение) Давай жги. Опиши работу с flash через сниппеты. И если знаешь как сертификаты подделывать и отправлять на сервак.
сегодня вроде как 24......
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)