2 место Познакомься, это C# . Просто, быстро, удобно! + подборка сниппетов внутри.

LightWood

Moderator
Регистрация
04.11.2010
Сообщения
2 382
Реакции
917
Баллы
113
ZennoPoster очень гибок и легок в освоении, но для легкости освоения часть функциональности по умолчанию отсутствует, некоторые не часто встречающиеся вещи нельзя реализовать стандартным функционалом или они реализуются в несколько шагов хотя действие "типично" или приходится заниматься размножением кубиков в ряде случаев.
Но все эти решить участки быстро и удобно нам может помочь C#.
Выделите час времени и Вы уже начнете ориентироваться в сниппетах и поймете, как написать свой первый C# сниппет.

C# (произносится «си шарп») — объектно-ориентированный язык программирования.
Подробнее - https://ru.wikipedia.org/wiki/C_Sharp

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

Сниппет (в программировании) — небольшой фрагмент исходного кода или текста, пригодного для повторного использования. Т.е. обособленный кусочек кода, который может использоваться отдельно.
В нашем случае это кусок кода который будет заменять 1 или несколько обычных Zenno-кубиков

Шаг сниппета в проекте:
nKr9Q9.png
LYLPVK.png


Пример сниппета попавшегося первым мне на глаза:
Код:
Развернуть Свернуть Копировать
string acc_full = project.Variables["account_source"].Value;
var account = acc_full.Split('|').ToList();
project.Variables["login"].Value = account[0];
project.Variables["pass"].Value = account[1];
project.Variables["hz"].Value = account[2];


Часто для сниппетов нужна актуальная версия ZennoPoster. Многие сниппеты используют методы добавленные в последних версиях. На старых версиях ZennoPoster сниппет может валиться с ошибкой.

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

Каждый сниппет часто состоит из 3х вещей:
1.
Присваиваем значение переменым
2. Выполняем ряд методов над этими перемеными или другими объектами
3. Выводим полученный результат после обработки методами

Это не обязательная последовательность и уже тем более не обязательные составляющие.


В C# коде, все что идет после // и до переноса строки игнорируется, т.е. после символов // как правило пишут пояснения к строке кода.
При ошибке в сниппете Вам в логах ZennoPoster сообщат номер строки и где эта ошибка.

О переменных:
-Переменые внутри сниппета, отдельны от переменых внутри нашего шаблона. Их можно связать неким образом, но это ни одно и тоже.
-Переменые в C# бываю разного типа. (основы C# это, просто загуглите для понимания: "Типы переменых(данных) в C#"). Одни методы работают только с перемеными чисел, другие с текстом и т.д.
т.е. это не как в стандартных кубиках шаблона, где мы переменой присваиваем все что угодно.

Вот пример обозначения переменых в сниппете с комментариями к ним:
Код:
Развернуть Свернуть Копировать
var list = project.Lists["BlackList"]; //project.Lists["BlackList"]; - в таком формате пишется наш обычный лист в проекте с именем BlackList, т.е. в это строке C#-ной переменой типа var именем list  мы присваиваем значение нашего списка с именем BlackList.
string id = project.Variables["it"].Value; // тут мы C#-ной переменой типа string и именем id присваиваем значение нашей переменой из проекта с именем it.
project.Variables["text"].Value = "LightWood пишет шаблоны на заказ и консультирует по ZennoPoster"; //Здесь мы изнутри C# кода присваиваем переменой проекта текст указанный в кавычках. Тут также можно присваивать, значение C#-ной переменой или результат выполнения метода, но в этих случаях уже не надо использовать кавычки. По обилию примеров готовых сниппетов на форуме все поймете)

О методах:
Что такое методы мы разобрались выше.
Метод может взаимодействовать на переменую, а может на любой другой объект.
т.е. например вот такая строка очистит куки инстанса:
Код:
Развернуть Свернуть Копировать
instance.ClearCookie();

А такая, разобьет строку по разделителю |
Код:
Развернуть Свернуть Копировать
string acc_full = project.Variables["account_source"].Value;
var account = acc_full.Split('|').ToList(); // Split('|').ToList(); - вот непосредственно метод разделения

К каждому виду объекта можно использовать только определенные методы. т.е. чистить куки у переменой или пытаться разбить инстанс нельзя.)

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

Методы ZennoPoster расписаны тут - http://zennolab.com/wiki/en:zennoposter:macros-documentation. Выбираете свою версию Zenno. (только на английском языке, но даже со скудным английским все будет понятно при желании разобраться)

Вывод результата C# шага:
В значении переменой выполненного C# шага по умолчанию будет текст "OK", но если в коде сниппета есть строка:
Код:
Развернуть Свернуть Копировать
return [...] ;
где [...] может быть переменой, текстом и т.д., т.е например (return name; или return "finish";)
то в значение переменой C# шага будет равно значению того, что указано в return строке.

По введению в основы это всё. Дальше Вам нужно чуть всмотреться и вчитаться в готовые сниппеты и в комментарии к ним.


* Раздел по сниппетам на форуме, тут можно найти готовые сниппеты и задать вопросы - http://zennolab.com/discussion/forums/snipety.136/
* Попросить написать сниппет можно в этой теме - http://zennolab.com/discussion/threads/besplatnye-snipety-na-zakaz.23450/

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

Официально вам никто не должен писать сниппет по просьбе, даже если у Вас pro версия ZennoPoster'а. Это не входит в область поддержки саппорта, но если корректно составлен вопрос, то вопрос врятли останется без внимания со стороны Zenno сообщества.

p.s. Я не C# кодер, если выразился где-то неверно, то будьте добры сообщить в теме.)





Подборка сниппетов которые я чаще всего использую:
(сниппеты мои, знакомых кодеров и наших форумчан)


Вывести количество эелементов на странице
Код:
Развернуть Свернуть Копировать
return instance.ActiveTab.FindElementsByAttribute("тэг","имя атрибута","значение","тип поиска").Count;


Присваиваем значение перемменной, исходя из значения другой переменной
Если переменная month нашего проекта будет равна "янв", то результат сниппета будет = 1, если "фев", то результат выполнения сниппета будет = 2 и т.д.
В лучшем виде заменяет switch шаг+установку значения переменой.
Код:
Развернуть Свернуть Копировать
return "янв|1,фев|2,март|3,апр|4,май|5,июн|6,июл|7,авг|8,сен|9,окт|10,ноя|11,дек|12".Split(',').First(s=>s.Contains(project.Variables["month"].Value)).Split('|')[1];


Меняем размер инстанса
Код:
Развернуть Свернуть Копировать
instance.SetWindowSize(800,600);


Замена с "донором", по регулярному выражению
Код:
Развернуть Свернуть Копировать
return Regex.Replace(project.Variables["text"].Value,"([a-zA-Zа-яА-Я; ])","$1*",RegexOptions.None); //после каждой буквы в переменной text поставит *.
// т.е.если было аб123вг, то результат выполнения а*б*12в*г*


Разбиваем строку (т.е. сплитуем) по разделителю | и раскидываю полученные части по переменным.
Код:
Развернуть Свернуть Копировать
string acc_full = project.Variables["account_source"].Value;
var account = acc_full.Split('|').ToList();
project.Variables["login"].Value = account[0];
project.Variables["pass"].Value = account[1];
project.Variables["hz"].Value = account[2];


Проверка наличия строки в списке. С учетом регистра и т.д., т.е. текст в переменной и строка списка должны быть идентичны. Если нашлась строка то выводит true, а иначе false.
Код:
Развернуть Свернуть Копировать
var list = project.Lists["BlackList"];
string id = project.Variables["id"].Value;
if(list.Contains(id))
{
  return "true";
}
else
{
  return "false";
}


Ищем и выводим из списка строку которая содержит текст из переменной. Без учета регистра.
Код:
Развернуть Свернуть Копировать
List<string> list = new List<string>();
list.AddRange(project.Lists["all"]);
string myString = project.Variables["recipient"].Value;
var matchingvalues = list
.FindAll(x => x.IndexOf(myString, StringComparison.OrdinalIgnoreCase) != -1);
return matchingvalues.First();


Код поиска частичного совпадения в списке. Если какая-то из строк списка включает в себя значение переменной, то выводим yes, иначе no.
Код:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо искать
var textContains = project.Variables["tmp_city"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["city"];
// ищем в каждой строчке в списке
lock(SyncObjects.ListSyncer)
{
  for(int i=0; i < sourceList.Count; i++)
  {
  // читаем строку из списка
  var str = sourceList[i];
  // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
  if (str.Contains(textContains))
  return "yes";
  }
}
// если ничего не нашли возвращаем "no"
return "no";


Ищет в таблице в укзанном столбце ячеку которая содержит переменную, если находит то выводит true, а иначе false.
Код:
Развернуть Свернуть Копировать
var table = project.Tables["base"];
for(int i = 0; i < table.RowCount; i++)
{
    int col_num = 0; //порядковый номер колонки
    string cur_string = table.GetCell(col_num,i); //текущая строка которую обрабатываем
    //project.SendInfoToLog(cur_string);
    if(cur_string.Contains(project.Variables["partSite"].Value))
    {
      
        return "true";
    }
}
return "false";


Меняем тип переменной, для работы внутри методов C#
Код:
Развернуть Свернуть Копировать
// Переводим переменную проекта mailDays типа стринг, в тип инт
int mailDaysC = int.Parse(project.Variables["mailDays"].Value);

//Переводим переменную проекта useSSL типа стринг, в тип bool
bool mailDaysC = bool.Parse(project.Variables["useSSL"].Value);


Ставим значение 0 всем чекбоксам на странице
Код:
Развернуть Свернуть Копировать
HtmlElementCollection hecol = instance.ActiveTab.FindElementsByAttribute("input:checkbox", "fulltagname", "input:checkbox", "regexp");
for(int i = 0; i< hecol.Count; i++)
{
    hecol.Elements[i].SetValue("0", instance.EmulationLevel, false);
}


Делаем клик по всем чекбоксам на странице
Код:
Развернуть Свернуть Копировать
HtmlElementCollection hecol = instance.ActiveTab.FindElementsByAttribute("input:checkbox", "fulltagname", "input:checkbox", "regexp");
    for(int i = 0; i< hecol.Count; i++)
    {
        hecol.Elements[i].Click();
    }


Получаем размер файла в байтах
Код:
Развернуть Свернуть Копировать
var length = new System.IO.FileInfo(@"C:\img.png").Length;
return length;


Получаем количество символов в значении переменной
Код:
Развернуть Свернуть Копировать
return project.Variables["var1"].Value.Length;


Разбить файл на мелкие по разделителю внутри текста. 11111 - разделитель в тексте. Файлы сохраняются в папку с шаблоном.
текст изначально выглядит так:
a
b
c
11111
d
e
f
11111
g
h
i

Код:
Развернуть Свернуть Копировать
string data = File.ReadAllText(project.Directory+"\\"+ "data.txt");
string separator = "11111";
string[] text = data.Split(new string[] { separator }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < text.Length; i++)
   {
      File.WriteAllText(project.Directory+"\\"+ i + ".txt", text[i].Trim());
   }


Помещает значее переменной var1 в буфер обмена и делает вставку нажатием ctrl+v
Код:
Развернуть Свернуть Копировать
var descr = project.Variables["var1"].Value;
System.Windows.Forms.Clipboard.SetText(descr);
instance.ActiveTab.KeyEvent("v","press","ctrl");
 
Номер конкурса статей
  1. Пятый конкурс статей
Тема статьи
  1. Нестандартные хаки
Последнее редактирование:
ахаха LightWood молодец, давай 10 статей напиши, время еще есть)
 
  • Спасибо
Реакции: i6nake9
Метод (в C#) — это функция или процедура, принадлежащая какому-то классу или объекту.
Ха -ха - ха ))) Прочитал и ничего не понял ))) Но Visual Studio 2015 уже поставил ) Без неё как понимаю никак ...

Подскажи понятные и простые для понимания материалы (видеокурсы и тп.) по C# Что можешь рекомендовать ?

И объясни зачем это всё вообще ? Почему многие разработчики шаблонов рано или поздно переходят на использование C# ?
 
Последнее редактирование:
И объясни зачем это всё вообще ? Почему многие разработчики шаблонов рано или поздно переходят на использование C# ?
Иногда попадаются такие вещи, которые невозможно сделать стандартными средствами Zennoposter, а использование С# кода снимает это ограничение.
Для примера - иногда нужно кликнуть по элементу на странице, маленькому попапу, в котором находится ссылка, который очень трудно поймать стандартными средствами. А в коде это можно сделать.
Работа со списками и таблицами - иногда просто невозможно что-то сделать на стандартных экшенах, либо решение получится ну очень громоздкое. В коде же без проблем можно решить задачу.
Да и само решение, проекты выглядят гораздо элегантнее, в нескольких кубиках C#, нежели столбы стандартных экшенов. Я в своих проектах очень часто прибегаю к коду, когда со временем пришло понимание программирования на C#. Обучался по видеоурокам от CBS - http://edu.cbsystematics.com/ru/
 
  • Спасибо
Реакции: AlexGoodWeb
Не забываем что у многих кубиков есть функция перевода в c#.
Данный вариант больше соответствует изначальным ожиданиям к возможностям ZP (т.е. создание любых шаблонов без знаний кода) и если разработчики доведут данное начинание до полной успешной реализации, чего я им искренне желаю, то будет просто отлично !
На данный момент перевод в C# работает только на некоторых экшенах, к сожалению.
 
Последнее редактирование:
  • Спасибо
Реакции: Marcelo
Которая толком не работает.
Лучше сразу писать на сишарпе. Логика будет стройнее.
Для начинающих получается долго и трудно ... это если хорошо знаешь C# или опыт программирования на других языках есть легко и быстро.
 

Но насколько понял курс устарел и на сегодня версия C# и Visual Studio уже отличаются ...
Версия Visual Studio - это всего лишь версия Visual Studio. Просто в новые версии разработчики пихают функционал, который по их мнению будет радовать кодеров. Можно кодить на любой версии, насчет этого не парься. Если еще не программировал - самое главное понять принципы, а потом уже приходит понимание, что к чему. На складчике есть полные курсы от этих ребят.
 
  • Спасибо
Реакции: AlexGoodWeb
И объясни зачем это всё вообще ? Почему многие разработчики шаблонов рано или поздно переходят на использование C# ?

Просто сравни, как всё выглядит на моём скрине. 1.0 - первая версия шаблона, где всё было на кубиках, там было выполнение 3х действий для одного сайта накрутки. 2.0 - вторая версия, там всё сделано на C#, причём действий уже не 3, а 5.
То что код существенно расширяет функционал зенно это да, но я ещё ни разу не делал в коде функции, которые зенно бы не выполнял, уж такие задачи для шаблонов. А вот из-за красоты, удобства и лаконичности я как раз-таки это всё и юзаю.
wTY9gfwzBFQ.jpg

Которая толком не работает.
Лучше сразу писать на сишарпе. Логика будет стройнее.
А у меня вот довольно-таки неплохо работает. Всё что можно конвертировать конвертирую, логику пишу сам, остальное гуглю. Если бы всё писал сам, то остановился бы на 1 версии (скрин выше), ибо C# знаю очень поверхностно.
 
Последнее редактирование:
  • Спасибо
Реакции: AlexGoodWeb
Всё бы хорошо, но там изучение идёт на английском языке причём техническом IT ... был бы русский перевод тогда да.
Имхается мне, в такой сфере как IT, английский язык далеко не самый бесполезный навык.
 
  • Спасибо
Реакции: andrwork и Juror
А у меня вот довольно-таки неплохо работает. Всё что можно конвертировать конвертирую, логику пишу сам, остальное гуглю. Если бы всё писал сам, то остановился бы на 1 версии (скрин выше), ибо C# знаю очень поверхностно.
Частность подтвеждает целое.
Надеюсь, вы не остановитесь в тот момент, когда весь проект будет помещаться в один экшен своего кода на сишарпе.

Visual Studio можно пользоваться абсолютно бесплатно и без ограничений, например, по потокам.
 

Препод конечно окуеть! Общается с аудиторией как с полными дебилами из детского сада. Лучше изучить "Школа Программирования | C# и .Net Framework (2011)" - есть на всех торрентах. Очень грамотно и быстро рассказывает про ООП в С#.
После 2-х дней изучения я наконец-то впервые заработал первые деньги в интернете (целых 300 руб. за парсинг магазина) - начал писать коммерческие С# программы сначала на фрилансе, потом уже снипеты в Зенке для своих проектов. И путь от офисного планктона, сидящего с 9 до 18 на кривом кресле в open, мать его, space, со вконец заэтовавшими коллегами, с одним очком на 30 человек, наблюдающего радостные и позитивные лица в метро в часы пик, зарплатой 70000 руб., до ИПшника с зарплатой чуть более ) занял примерно полгода. В ближайшее время планирую из Москвы в Тайланд перебраться - очень пальмы и солнце нравятся.
В общем, всем кто хочет писать качественные шаблоны и зарабатывать кучу бабла- C# обязательно изучить! Облегчает и ускоряет создание сложных шаблонов в несколько раз. Это откроет для вас кучу возможностей:
1) Устроится на высокооплачиваемую работу. Данный вариант для тру программеров, которые способны общаться только со своим непосредственным начальником и женщин видят только на специальных сайтах.
2) Для всех остальных, кто не падает в обморок при звонке потенциального/обиженного/контуженного на пол башки клиента, Zennoposter дает массу вариантов заработка:
2.1) Создание крутого шаблона-комбайна и продажа на складчике (см. раздел - авторские складчины). Авторы получают от 100 000 каждый месяц.
2.2) Создание своего сервиса. Куча вариантов! Агрегатор недвижки/авто/сериалов/тренингов, поиск вилок у букмекеров, автоматическое создание прокси, SSH тоннелей, накрутка голосований/просмотров и т.д. и т.п.
2.3) Для тех, кому не дает покоя слава и деньги Парабеллума, Азамата Ушанова, Евгения Попова. Создание своего инфобизнеса. Берем любую тему по заработку в интернете и думаем как это можно автоматизировать и массштабировать с помощью Зеннопостера. Пишем шаблон и продаем на складчике (см. пункт 2.1)
2.4) Пойти по пути многоуважаемого Rostonix и создать серию обучающих курсов по основам Zennoposter, затем добавить обучение созданию снипетов С# в Зенке, затем сделать полный курс по C# (кстати, до сих пор нет нормального курса)
 
Последнее редактирование:
Имхается мне, в такой сфере как IT, английский язык далеко не самый бесполезный навык.
Согласен, однако изучение языка до такого уровня требует массу времени дополнительного.. проще изучать по русскоязычным материалам.

 
  • Спасибо
Реакции: diverfor
Просто сравни, как всё выглядит на моём скрине.
Уверен что и свитч и все 5 кубиков можно было в один запихнуть.
Удобство кубиков в наглядности (недаром сейчас BluePrint кодинг стал развиваться) и в дебаге.
 
  • Спасибо
Реакции: AlexGoodWeb
Кстати, если кто не в курсе - Visual Studio можно скачать на торрентах. Причем, если кто сидит на Windows XP - вам подойдет только Visual Studio 2012
 
Кстати, если кто не в курсе - Visual Studio можно скачать на торрентах. Причем, если кто сидит на Windows XP - вам подойдет только Visual Studio 2012
Зачем бесплатную программу качать на торрентах?
 
  • Спасибо
Реакции: Konrod_m и AlexGoodWeb
Она бесплатна только для студентов, стартаперов и прочих нищебродов ). Причем свою принадлелжность к касте избранных еще доказать надо перед великим и всемогущим Microsoft ом
 
Последнее редактирование:
Уверен что и свитч и все 5 кубиков можно было в один запихнуть.
Удобство кубиков в наглядности (недаром сейчас BluePrint кодинг стал развиваться) и в дебаге.

Можно все в один кубик запихнуть, но искать в нем что-то потом будет проблематично. Кубик С# когда выполняет одно действие гораздо удобней. Тут нужно баланс соблюдать)
 
  • Спасибо
Реакции: andrwork
Еще можно кодить в Visual Studio с нормальным отладчиком, а в зенно писать только содержимое Main.
Закрывать шаблон, добавлять к цене $10 и не париться с тем, что код сольют в паблик.
 

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