Бесплатные снипеты на заказ

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 794
Благодарностей
2 466
Баллы
113
спасибо Юрик так все работает, я просто в референс не добавил ссылку, только в юзинги добавил вот и косяк был.
Как теперь в таблицу то все пихнуть разом?
сделал кубиками в 3 кубика получилось в таблицу запихнуть.
Скрипт полезный, для раскидывания по рубрикам для БД вообще то, что нужно.
Писалась эта штука под парсинг через API интернет магазинов с забросом в базу данных.
Получается, когда на главной страничке есть товары, в рубриках есть товары, в подрубриках есть товары - тогда нужно как-то отделить эти рубрики от подрубрик.
А в API не продумано, что категории разных уровней вложенности должны бы как-то отличаться - вот и приходится придумывать как этот нестандартный код разобрать....
Сначала день прошел в чтении документации, потом ночь в попытках сформировать желаемое (основная проблема была не в том, чтобы циклы построить, а в том, в каком конкретно месте какая переменная какое принимает значение и когда конкретно её нужно обнулять). В стандартных случаях таких проблем нет (если теги/узлы отличаются - то беды в переборе нет совсем).
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
Писалась эта штука под парсинг через API интернет магазинов с забросом в базу данных.
Получается, когда на главной страничке есть товары, в рубриках есть товары, в подрубриках есть товары - тогда нужно как-то отделить эти рубрики от подрубрик.
А в API не продумано, что категории разных уровней вложенности должны бы как-то отличаться - вот и приходится придумывать как этот нестандартный код разобрать....
Сначала день прошел в чтении документации, потом ночь в попытках сформировать желаемое (основная проблема была не в том, чтобы циклы построить, а в том, в каком конкретно месте какая переменная какое принимает значение и когда конкретно её нужно обнулять). В стандартных случаях таких проблем нет (если теги/узлы отличаются - то беды в переборе нет совсем).
))) а я в другом месте применю мне как раз подходит и теперь это можно применять уже не только в интернет магазине !
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 794
Благодарностей
2 466
Баллы
113
))) а я в другом месте применю мне как раз подходит и теперь это можно применять уже не только в интернет магазине !
Ты точно проверь пожалуйста тот результат который ты будешь получать - так как если нужно просто получить список без сдвигов по вложенности - то данный вариант не подходит - тут как раз фишка в том, что сдвигаются значения по столбикам таблички в зависимости от уровня вложенности тега.
 
  • Спасибо
Реакции: masterLomaster
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
Ты точно проверь пожалуйста тот результат который ты будешь получать - так как если нужно просто получить список без сдвигов по вложенности - то данный вариант не подходит - тут как раз фишка в том, что сдвигаются значения по столбикам таблички в зависимости от уровня вложенности тега.
))) да я внимательно посмотрел, у тебя в xml то что мне и нужно, такой же сдвиг и вложенность!
 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 994
Благодарностей
787
Баллы
113
Зачем вообще общаться?
Можно просто прийти, молча скопипастить то, что другие сказали/написали и уйти также молча даже "Спасибо" не сказав и никого, никуда не послав.
вот именно, что на форуме можно и пообщаться, и спасибо сказать, и создать отдельную ветку для своего конкретного вопроса, возможно общего не для всех, удобно историю просматривать и тд - чаты всего этого лишены.. может дело вкуса просто. может я упускаю момент, что чаты как то сближают и интереснее общаться, но что мешает на форуме общаться так же свободно как в чате.. у нас тут итак почти все дружные)
 

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83

aloneslamer3

Новичок
Регистрация
28.04.2017
Сообщения
20
Благодарностей
4
Баллы
3

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с aloneslamer3 какие-либо сделки.

Ищу сниппет который будет в многопотоке делать запросы на определенный юрл.
На юрл нужно парсить значение. Если оно появилось то нужно остановить все потоки спарсить из текста другой кусок.
И выдать значение которое нашлось в переменную.
 

aloneslamer3

Новичок
Регистрация
28.04.2017
Сообщения
20
Благодарностей
4
Баллы
3

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с aloneslamer3 какие-либо сделки.

Чуть не так написал вот ссылка
https://export.yandex.ru/last/last20x.xml ее нужно в многопотоке дергать и искать слово например дрель.
Нужен именно сниппет. Желательно что бы он был на xnet.
Если находим слово дрель то парсим всю строку с этим словом.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 126
Баллы
113
Чуть не так написал вот ссылка
https://export.yandex.ru/last/last20x.xml ее нужно в многопотоке дергать и искать слово например дрель.
Нужен именно сниппет. Желательно что бы он был на xnet.
Если находим слово дрель то парсим всю строку с этим словом.
C#:
string protocol = project.Variables["Protocol"].Value; // http:// или socks5://
string proxy = project.Variables["Proxy"].Value; // ip:port или login:pass@ip:port
string userAgent = project.Variables["UserAgent"].Value;
string referer = "";
string cookies = "";
string url = "https://export.yandex.ru/last/last20x.xml";
string str = project.Variables["Text"].Value;

// Определение типа прокси
ProxyClient proxyClient = null;
if (proxy != string.Empty)
{
    string[] split = proxy.Split('@');
    if (split.Length == 1) {
        string ip = split[0].Split(':')[0];
        int port = int.Parse(split[0].Split(':')[1]);
  
        if (protocol == "socks5://")
            proxyClient = new Socks5ProxyClient(ip, port);
        else
            proxyClient = new HttpProxyClient(ip, port);
    }
    else
    {
        string ip = split[1].Split(':')[0];
        int port = int.Parse(split[1].Split(':')[1]);
        string user = split[0].Split(':')[0];
        string password = split[0].Split(':')[1];
  
        if (protocol == "socks5://")
            proxyClient = new Socks5ProxyClient(ip, port, user, password);
        else
            proxyClient = new HttpProxyClient(ip, port, user, password);
    }
}

// HTTP запрос
string response = null;
try
{
    HttpRequest request = new HttpRequest(url);
    request.Proxy = proxyClient;
    request.EnableEncodingContent = true;
    request.ConnectTimeout = 15000;
    request.UserAgent = userAgent;
    request.AllowAutoRedirect = true;
    request.MaximumAutomaticRedirections = 5;
    request.KeepAlive = true;
    request.Referer = referer;
    request["Cookie"] = cookies;
    request["Accept"] = "*/*";
    request["Accept-Language"] = "ru-RU";

    response = request.Get(url).ToString();
    request.Close();
}
catch (HttpException e)
{
    string answer = string.Empty;
    switch (e.Status)
    {
        case HttpExceptionStatus.Other:
            answer = "Неизвестная ошибка";
            break;

        case HttpExceptionStatus.ProtocolError:
            answer = "Код состояния: " + (int)e.HttpStatusCode;
            break;

        case HttpExceptionStatus.ConnectFailure:
            answer = "Не удалось соединиться с HTTP-сервером";
            break;

        case HttpExceptionStatus.SendFailure:
            answer = "Не удалось отправить запрос HTTP-серверу";
            break;

        case HttpExceptionStatus.ReceiveFailure:
            answer = "Не удалось загрузить ответ от HTTP-сервера";
            break;
    }
    // Вывод в лог сообщения об ошибке HTTP-сервера
    project.SendErrorToLog(answer);
    return null;
}

// Проверка на пустой ответ HTTP-сервера
if (response == string.Empty) {
    project.SendErrorToLog("Пустой ответ HTTP-сервера");
    return null;
}

// Парсинг
Match match = Regex.Match(response, str);
if (!match.Success) {
    project.SendErrorToLog("Ничего не найдено по регулярному выражению");
    return null;
}
return Regex.Match(response, "(?m)^.*" + str + ".*$" ).Value;
Данный код так же можно использовать как шаблон-заготовку для GET запроса на xNET.
Как подключать сторонние библиотеки, хорошо описано здесь.
Проект и библиотека xNET во вложении.
 

Вложения

Последнее редактирование:

aloneslamer3

Новичок
Регистрация
28.04.2017
Сообщения
20
Благодарностей
4
Баллы
3

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с aloneslamer3 какие-либо сделки.

C#:
string protocol = project.Variables["Protocol"].Value; // http:// или socks5://
string proxy = project.Variables["Proxy"].Value; // ip:port или login:pass@ip:port
string userAgent = project.Variables["UserAgent"].Value;
string referer = "";
string cookies = "";
string url = "https://export.yandex.ru/last/last20x.xml";
string str = project.Variables["Text"].Value;

// Определение типа прокси
ProxyClient proxyClient = null;
if (proxy != string.Empty)
{
    string[] split = proxy.Split('@');
    if (split.Length == 1) {
        string ip = split[0].Split(':')[0];
        int port = int.Parse(split[0].Split(':')[1]);
 
        if (protocol == "socks5://")
            proxyClient = new Socks5ProxyClient(ip, port);
        else
            proxyClient = new HttpProxyClient(ip, port);
    }
    else
    {
        string ip = split[1].Split(':')[0];
        int port = int.Parse(split[1].Split(':')[1]);
        string user = split[0].Split(':')[0];
        string password = split[0].Split(':')[1];
 
        if (protocol == "socks5://")
            proxyClient = new Socks5ProxyClient(ip, port, user, password);
        else
            proxyClient = new HttpProxyClient(ip, port, user, password);
    }
}

// HTTP запрос
string response = null;
try
{
    HttpRequest request = new HttpRequest(url);
    request.Proxy = proxyClient;
    request.EnableEncodingContent = true;
    request.ConnectTimeout = 15000;
    request.UserAgent = userAgent;
    request.AllowAutoRedirect = true;
    request.MaximumAutomaticRedirections = 5;
    request.KeepAlive = true;
    request.Referer = referer;
    request["Cookie"] = cookies;
    request["Accept"] = "*/*";
    request["Accept-Language"] = "ru-RU";

    response = request.Get(url).ToString();
    request.Close();
}
catch (HttpException e)
{
    string answer = string.Empty;
    switch (e.Status)
    {
        case HttpExceptionStatus.Other:
            answer = "Неизвестная ошибка";
            break;

        case HttpExceptionStatus.ProtocolError:
            answer = "Код состояния: " + (int)e.HttpStatusCode;
            break;

        case HttpExceptionStatus.ConnectFailure:
            answer = "Не удалось соединиться с HTTP-сервером";
            break;

        case HttpExceptionStatus.SendFailure:
            answer = "Не удалось отправить запрос HTTP-серверу";
            break;

        case HttpExceptionStatus.ReceiveFailure:
            answer = "Не удалось загрузить ответ от HTTP-сервера";
            break;
    }
    // Вывод в лог сообщения об ошибке HTTP-сервера
    project.SendErrorToLog(answer);
    return null;
}

// Проверка на пустой ответ HTTP-сервера
if (response == string.Empty) {
    project.SendErrorToLog("Пустой ответ HTTP-сервера");
    return null;
}

// Парсинг
Match match = Regex.Match(response, str);
if (!match.Success) {
    project.SendErrorToLog("Ничего не найдено по регулярному выражению");
    return null;
}
return Regex.Match(response, "(?m)^.*" + str + ".*$" ).Value;
Данный код так же можно использовать как шаблон-заготовку для GET запроса на xNET.
Как подключать сторонние библиотеки, хорошо описано здесь.
Проект и библиотека xNET во вложении.
Отлично спасибо. А как сделать что бы сниппет работал в многопотоке ?
Без использования дополнительных потоков в зенке?
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 126
Баллы
113

aloneslamer3

Новичок
Регистрация
28.04.2017
Сообщения
20
Благодарностей
4
Баллы
3

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с aloneslamer3 какие-либо сделки.

WEISS

Client
Регистрация
11.12.2015
Сообщения
115
Благодарностей
25
Баллы
28
Может кто-нибудь подскажет как последнюю строчку переделать, чтобы результат записывался не в файл а в список
Код:
string[] first = project.Lists["all"].ToArray();
string[] second = project.Lists["secondList"].ToArray();
string[] third = second.AsParallel().Except(first.AsParallel()).ToArray();
File.WriteAllLines(@"D:\event\secondList.txt", third);
Спасибо.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 794
Благодарностей
2 466
Баллы
113
Может так подойдет
Код:
var rezult = project.Lists["rezult_list"];
foreach (string value in third){
rezult.Add(value);
}
 

WEISS

Client
Регистрация
11.12.2015
Сообщения
115
Благодарностей
25
Баллы
28

FreddyKrueger

Client
Регистрация
06.09.2016
Сообщения
702
Благодарностей
614
Баллы
93

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 126
Баллы
113
Нужен сниппет для черного списка, подробнее в теме https://zennolab.com/discussion/threads/chernyj-spisok.37072/
Там в первом сниппете есть ошибка + сравнение идет не по полной строке, а с ее частью.
Второй сниппет рабочий, но можно еще lock сделать для многопотока.
Ща поправлю, но у меня ощущение, что ты реально что-то не то делаешь.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 794
Благодарностей
2 466
Баллы
113

FreddyKrueger

Client
Регистрация
06.09.2016
Сообщения
702
Благодарностей
614
Баллы
93
Там в первом сниппете есть ошибка + сравнение идет не по полной строке, а с ее частью.
Второй сниппет рабочий, но можно еще lock сделать для многопотока.
Ща поправлю, но у меня ощущение, что ты реально что-то не то делаешь.
Полагаю, не работало из-за проблем с синхронизацией. После парса ID через API, я заменял запятые на {-String.Enter-}, чтобы выставить в столбик.
 

sipoku

Client
Регистрация
04.04.2010
Сообщения
266
Благодарностей
138
Баллы
43
Друзья, помогите решить две задачи.

1. Как из списка взять случайную строку длиной до n символов (желательно полное предложение, до знака препинания)?

2. На входе список с кодами стран (может быть только одна строка, а может много: "RU+BY+MD+KZ+AM+UA"...) и таблица со значениями:
AT Австрия Австрийская Республика Austria
AZ Азербайджан Республика Азербайджан Azerbaijan
И нужно получить в итоговом списке или в переменную значения соответствующих столбцов с названиями стран.
 

evgen2208

Client
Регистрация
12.10.2016
Сообщения
130
Благодарностей
162
Баллы
43
Помогите разобраться с get запросом через С#, думаю дело в куках и юзер агенте, мне их как-то надо выдернуть из профиля, но что-то делаю не так. Через кубик работает всё прекрасно.

Код:
otvet = ZennoPoster.HttpGet(
hrefs,
project.Variables["proxy"].Value,
"utf-8",
ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderOnly,
30,
instance.GetCookie("avito.ru",true),
project.Profile.UserAgent,
true,
10,
null,
string.Empty,
false);
Всегда возвращается
Ошибка при выполнении запроса Превышен таймаут ResourceDownloader.GetResult.
 

LaGir

Client
Регистрация
01.10.2015
Сообщения
230
Благодарностей
945
Баллы
93
Через кубик работает всё прекрасно.
Не знаю как в кубике, но в коде таймаут запроса указывается в миллисекундах. То есть, у тебя указано 30 мс (0,03 секунды), и судя по тексту ошибки этого времени слишком мало. С использованием прокси, имхо, как минимум секунд 10 стоит ставить (то есть писать 10000).
 

WEISS

Client
Регистрация
11.12.2015
Сообщения
115
Благодарностей
25
Баллы
28
Еще такой код встречал - проверил - точно работает.

Код:
var rezult = project.Lists["rezult_list"];
rezult.AddRange(third.ToList());
Спасибо, но заработал только вот так
Код:
string[] first = project.Lists["all"].ToArray();
string[] second = project.Lists["secondList"].ToArray();
string[] third = second.AsParallel().Except(first.AsParallel()).ToArray();
project.Lists["secondList"].Clear();
project.Lists["secondList"].AddRange(third.ToList());
 

evgen2208

Client
Регистрация
12.10.2016
Сообщения
130
Благодарностей
162
Баллы
43

keltuzhaknut

Client
Регистрация
24.02.2016
Сообщения
221
Благодарностей
3
Баллы
18
Нужно с помощью с# сделать обрез пробелов и переносов в переменной, в начале и в конце. Будьте любезны, поделитесь снипетом.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 643
Баллы
113

keltuzhaknut

Client
Регистрация
24.02.2016
Сообщения
221
Благодарностей
3
Баллы
18

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 643
Баллы
113

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 803
Благодарностей
1 475
Баллы
113
Нужно с помощью с# сделать обрез пробелов и переносов в переменной, в начале и в конце. Будьте любезны, поделитесь снипетом.
как то так:
C#:
var str = project.Variables["переменная"].Value;
return = str.Trim();
если нужно результат положить в ту же переменную:
C#:
var str = project.Variables["переменная"].Value;
project.Variables["переменная"].Value = str.Trim();
return "ok";
 
Последнее редактирование:
  • Спасибо
Реакции: keltuzhaknut

keltuzhaknut

Client
Регистрация
24.02.2016
Сообщения
221
Благодарностей
3
Баллы
18
Подскажите, а как убрать все спец. символы - скобки, запятые, и прочее? кроме дефиса?
к примеру есть предложение переведенное на транслит, вместо пробелов нужно поставить дефис, а все остальные не нужные знакие - удалить?
 

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