1 место ZennoPoster: Кладезь безграничных идей и возможностей. Часть 2 (JSON + API + POST/GET)

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Благодарностей
726
Баллы
93
Приветствую всех!
В этот раз решил обойтись длинным монологом, СРАЗУ ПЕРЕЙДЕМ К ДЕЛУ :bi:


211yjt7v.png



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

Парсить мы будет по слову "Скачать" . Сразу со страницы твиттера мне перехотелось

https://twitter.com/search?q=скачать&src=typd

Api твиттера на поиск тоже не поддавалось (а я то думал, что у дропбокса самое идиотское... наивный :bq: ), но гугл как всегда спешит на помощь :ea: ||| После нудного получасового перебора всех сайтов.. я был вымотан, НО ДОВОЛЕН !!!

HTML:
https://www.twilert.com/twilerts/preview?query=%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C
Теперь все кандидаты в сборе.. (a-parser, зенка, источник инфы) - Пора приступать :dh:

Наша задача:

  1. Спарсить из этой кучи-малы только текст твиттов
  2. Отобрать твитты, которые имеют: (не менее 20 символов && но не больше 55 символов).
  3. Почистить их от мусора
Код:
var contentfinal = project.Lists["contentfinal"]; // обозначим список "contentfinal "
var list = project.Lists["list"];   // обозначим список "list"
string regex = project.Variables["regex2"].Value; // регулярка
string text = project.Variables["nomer2"].Value; // текст
var reg = new System.Text.RegularExpressions.Regex(regex, System.Text.RegularExpressions.RegexOptions.None);
foreach (var match in reg.Matches(text))
{
    list.Add(match.ToString());   // добавляем в цикле все значения в список
}
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < list.Count; i++)  // цикл на Replace, кол-во символов
    {
        // читаем строку из списка
        var str = list[i];
        var output = System.Text.RegularExpressions.Regex.Replace(str,@"http://.+", "");  // первая замена
        var next = System.Text.RegularExpressions.Regex.Replace(output,@"[^\w\d\s]", ""); // вторая замена
        // проверяем на кол-во символов
        if (next.Length > 20 &&  next.Length < 55)
            contentfinal.Add(next); //добавляем результаты в "contentfinal" (список)
     }
}
Далее настраиваем A-parser и его взаимодействия с ЗенноПостером :

1) Создадим пресет "test" и поставим в него формат запроса "!$query"

2) Зарегаем яндекс аккаунтов, чтобы парсить директ
3) Установим прокси
4) Создадим post запрос на API

"parser" : "SE::Yandex;Direct:Frequency", - (парсер частотки) - http://a-parser.com/wiki/se-yandex-direct-frequency/
"password" : "", - пароль от учетки а-парсера
"preset" : "test", - прессет, где я указал антикапчу и юзать прокси / не юзать + формат запроса и и полученного результат.
"threads" : 4, - кол-во потоков.
"queries" : - наши запросы




[ более подробно по работе с api: http://a-parser.com/wiki/user-api/ ]​

Как видим в примере, нам вместо этих слов нужно подставить спарсенные слова с твиттера.

Для этого делаем сл.шаги:​

s68b8m0j.png


В ответе мы получаем:

HTML:
{"success":1,"data":{"resultString":"\"!Скачать nfs carbon na windovs xp 3\": 0\n\"!Скачать сервер 152 с нужными плагинами для майнкрафт\": 0\n\"!Скачать все серии губка боб через торрент рус\": 0\n\"!Trolhappy скачать для в вконтакте смайлы\": 0\n","logs":{"1":{"1":[[0,1432825525,"Parser SE::Yandex::Direct::Frequency::0 parse query \"!Скачать nfs carbon na windovs xp 3\""],[0,1432825525,"Wait for proxy"],[0,1432825525,"Use proxy socks://91.214.71.16:7103"],[0,1432825525,"GET(1): https://direct.yandex.com/public?cmd=ajaxGetSuggestion&csrf_token=&geo=225&get_stat=1&promo=spros&srcPhrases=%22!%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C%20nfs%20carbon%20na%20windovs%20xp%203%22 - 200 OK (0.11 KB)"],[0,1432825525,"Parse response: 1"],[3,1432825525,1],[0,1432825527,"Thread complete work"]]},"0":{"1":[[0,1432825525,"Parser SE::Yandex::Direct::Frequency::0 parse query \"!Скачать сервер 152 с нужными плагинами для майнкрафт\""],[0,1432825525,"Wait for proxy"],[0,1432825525,"Use proxy http://185.31.160.178:7073"],[0,1432825526,"GET(1): https://direct.yandex.com/public?cmd=ajaxGetSuggestion&csrf_token=&geo=225&get_stat=1&promo=spros&srcPhrases=%22!%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%20152%20%D1%81%20%D0%BD%D1%83%D0%B6%D0%BD%D1%8B%D0%BC%D0%B8%20%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%20%D0%B4%D0%BB%D1%8F%20%D0%BC%D0%B0%D0%B9%D0%BD%D0%BA%D1%80%D0%B0%D1%84%D1%82%22 - 200 OK (0.16 KB)"],[0,1432825526,"Parse response: 1"],[3,1432825526,1],[0,1432825527,"Thread complete work"]]},"3":{"1":[[0,1432825525,"Parser SE::Yandex::Direct::Frequency::0 parse query \"!Скачать все серии губка боб через торрент рус\""],[0,1432825525,"Wait for proxy"],[0,1432825525,"Use proxy http://62.76.75.165:7142"],[0,1432825527,"GET(1): https://direct.yandex.com/public?cmd=ajaxGetSuggestion&csrf_token=&geo=225&get_stat=1&promo=spros&srcPhrases=%22!%D0%A1%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C%20%D0%B2%D1%81%D0%B5%20%D1%81%D0%B5%D1%80%D0%B8%D0%B8%20%D0%B3%D1%83%D0%B1%D0%BA%D0%B0%20%D0%B1%D0%BE%D0%B1%20%D1%87%D0%B5%D1%80%D0%B5%D0%B7%20%D1%82%D0%BE%D1%80%D1%80%D0%B5%D0%BD%D1%82%20%D1%80%D1%83%D1%81%22 - 200 OK (0.15 KB)"],[0,1432825527,"Parse response: 1"],[3,1432825527,1],[0,1432825527,"Thread complete work"]]},"2":{"1":[[0,1432825525,"Parser SE::Yandex::Direct::Frequency::0 parse query \"!Trolhappy скачать для в вконтакте смайлы\""],[0,1432825525,"Wait for proxy"],[0,1432825525,"Use proxy http://94.142.142.52:7272"],[0,1432825527,"GET(1): https://direct.yandex.com/public?cmd=ajaxGetSuggestion&csrf_token=&geo=225&get_stat=1&promo=spros&srcPhrases=%22!Trolhappy%20%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C%20%D0%B4%D0%BB%D1%8F%20%D0%B2%20%D0%B2%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%B5%20%D1%81%D0%BC%D0%B0%D0%B9%D0%BB%D1%8B%22 - 200 OK (0.14 KB)"],[0,1432825527,"Parse response: 1"],[3,1432825527,1],[0,1432825527,"Thread complete work"]]}}}}

После обработки:

HTML:
"!Скачать nfs carbon na windovs xp 3": 0
"!Скачать сервер 152 с нужными плагинами для майнкрафт": 0
"!Скачать все серии губка боб через торрент рус": 0
"!Trolhappy скачать для в вконтакте смайлы": 0

ИТОГО:
1) Запускаем а-парсер на серваке
2) Закцикливаем парсер на 10 попыток (раз в 6 сек)
3) Ставим шаблон на планировщик "1 запуск - раз в минуту"


На выходе получаем более +- 50к кеев в сутки по слову "скачать" с прочеканной частоткой".

Многие меня спросят.. ДЫК ЭТО МОЖНО И НА ЗЕНКИ СДЕЛАТЬ!!!?
А ответ на вопрос (почему мы вообще подключили А-парсер?) ждите в 3 части моей статьи по а-парсеру :dz:

[это был только разогрев]....


Скачать шаблон: https://yadi.sk/d/JL6_DLJQgvj8p




zr2l10v6.png


1) Идем сюда - http://json2csharp.com/
2) Вставляем наш JSON - http://pastebin.com/xvAZynYL
3) Получаем структурированный класс на разбор JSON

HTML:
public class LastSeen
{
    public int time { get; set; }
    public int platform { get; set; }
}

public class Response
{
    public int uid { get; set; }
    public string first_name { get; set; }
    public string last_name { get; set; }
    public int online { get; set; }
    public string home_phone { get; set; }
    public string facebook { get; set; }
    public string facebook_name { get; set; }
    public string instagram { get; set; }
    public LastSeen last_seen { get; set; }
    public string online_app { get; set; }
    public int? online_mobile { get; set; }
    public string twitter { get; set; }
    public string skype { get; set; }
    public int? hidden { get; set; }
    public string livejournal { get; set; }
}

public class RootObject
{
    public List<Response> response { get; set; }
}
4) Выкидываем ненужные параметры и обворачиваем все в namespace JSOND (для подключение нашего класса из общего кода в using)

Код:
namespace JSOND
{

public class Response
{
    public int uid { get; set; }
    public string first_name { get; set; }
    public string last_name { get; set; }
    public int online { get; set; }
}

public class RootObject
{
    public List<Response> response { get; set; }
}


}
5) Подключаем библиотеку Newtonsoft.Json.dll (скачать)




7) Прописываем код из пункта "4", в новую фичу зеннопостера - "ОБЩИЙ КОД" . Она позволяет нам переносить все классы кода , заменяя прежние костыли (генераций dll с нашими классами в Devel Studio).

+ Добавляем в USING

using Newtonsoft.Json;
using JSOND;

8-) Добавляем этот код в c# сниппет

Код:
string json = project.Variables["json"].Value;  // тут наш json
var table = project.Tables["table"]; // Имя таблицы
RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);

//перебираем все елементы обьекта
for (int i = 0; i < obj.response.Count; i++)
{
    //формируем строку
    string str = String.Format("{0};{1};{2};{3}", obj.response[i].uid, obj.response[i].first_name, obj.response[i].last_name, obj.response[i].online);
    //{0};{1};{2};{3}  и obj.response[i].uid, obj.response[i].first_name, obj.response[i].last_name, obj.response[i].online  можно менять (это наш рабочий черновик)
    table.AddRow(str);
    //пишем в таблицу строку
}

return 1;

s68b8m0j.png

Как итог, все данные записались в таблицу. Кто хорошо знаком с c# .. может сразу Replace-ом заменить 1/0 - (оффлайн , онлайн). И дальнейшие манипуляции.

Кто еще не работает с новым зеннопостером, то ему подойдет этот вариант разбора JSON.
 
Тема статьи
Парсинг
Номер конкурса статей
Третий конкурс статей

Вложения

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

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

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Благодарностей
726
Баллы
93
Изначально я не планировал этот пункт в моей конкурсной статье.. Думал, что всем все понятно про post запрос еще с первой статьи (C# Sharp vs WebBrowser).
НО!!! как оказалось, многие не до конца разобрались...

Давайте начнем


За пример будет взят сервис фрихостинга - http://www.webservis.ru/registr.phtml .

Почему?

1) Рега не сложная (идеальный подопытный)!
2) Есть своя фишка (капча наоборот ) - обойдем это c# сниппетом .
3) Быстро кидает подтверждение на почту ( хорошо работает с mail.ru) .



Скачать шаблон можно тут.
 

capturis

Client
Регистрация
21.12.2013
Сообщения
41
Благодарностей
19
Баллы
8
Формат запроса в апарсере не верно задан. Вместо такой конструкции
Код:
"!$query"
на до использовать конструктор результатов: есть спец функция "Add ! before each word", которая подставляет "!" перед каждым словом.
 

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Благодарностей
726
Баллы
93
Формат запроса в апарсере не верно задан. Вместо такой конструкции
Код:
"!$query"
на до использовать конструктор результатов: есть спец функция "Add ! before each word", которая подставляет "!" перед каждым словом.
Мне сам форб это посоветовал :D все вопросы к нему.....
Я очень давно не работал с а-парсером, приходилось все вспоминать на лету.
 

capturis

Client
Регистрация
21.12.2013
Сообщения
41
Благодарностей
19
Баллы
8
Мне сам форб это посоветовал все вопросы к нему.....
Я очень давно не работал с а-парсером, приходилось все вспоминать на лету.
Видимо он тоже давно не работал:D
 

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Благодарностей
726
Баллы
93
Сегодня постараюсь закончить третью часть, где будут показаны основные возможности а-парсера. (с зенкой вы так далеко не уедете ...)

Там будет:

  • Парсим 100к ключевых слов через гугл
  • Извлекаем из серпа гугла ссылки * из пункта 1
  • Через сторонний сервис парсим чистенькие статьи по ссылкам из пункта 2
  • Определяем релевантность статьи к запросу через API мегаиндекса (ее оптимизация)
А от куда возьмем кеи для парсинаг? Догадайтесь сами :D
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
785
Баллы
113
работа с джейсоном
тоже самое без сторонних либ (System.Web.Extentions есть у всех)
C#:
var json = project.Variables["json"].Value;
var keys = "first_name,last_name,online".Split(',');
var djson = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<dynamic>(json);
return string.Join("\r\n", ((IEnumerable<dynamic>)djson["response"]).Select(d=>string.Join(";", keys.Select(k=>d[k]))));
для выбора других параметров нужно поменять только 2-ую строчку
 
Последнее редактирование:

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Благодарностей
726
Баллы
93
работа с джейсоном
тоже самое без сторонних либ (System.Web.Extentions есть у всех)
Код:
var json = project.Variables["json"].Value;
var keys = "first_name,last_name,online".Split(',');
var djson = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<dynamic>(json);
return string.Join("\r\n", ((IEnumerable<dynamic>)djson["response"]).Select(d=>string.Join(";", keys.Select(k=>d[k]))));
Тоже отличный вариант :ay:

Я больше хотел продемонстрировать новые возможности "общего кода"))
 

LexxWork

Client
Регистрация
31.10.2013
Сообщения
1 190
Благодарностей
785
Баллы
113
Я больше хотел продемонстрировать новые возможности "общего кода"))
Самой удачно демонстрацией оwn кода будет какая нибудь минипрожка записаная в классы, реализованая в кубике и зашифрованая в подпроект )))
 

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Благодарностей
726
Баллы
93
Самой удачно демонстрацией оwn кода будет какая нибудь минипрожка записаная в классы, реализованая в кубике и зашифрованая в подпроект )))
Это уже оставим 7make . Я доверяю такой важный бета-тест только ему :D
 

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Благодарностей
726
Баллы
93
up: подправил некоторые картинки (а то ФШ криво сохранил).
 

lexone

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

alekwuy

Client
Регистрация
06.04.2013
Сообщения
1 631
Благодарностей
461
Баллы
83
lexone а что в этих кеях такого класного?)
я это тот же пустухов я софтом за день по 2 ляма чекал на частотку
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 538
Баллы
113
работа с джейсоном
тоже самое без сторонних либ (System.Web.Extentions есть у всех)
Код:
var json = project.Variables["json"].Value;
var keys = "first_name,last_name,online".Split(',');
var djson = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<dynamic>(json);
return string.Join("\r\n", ((IEnumerable<dynamic>)djson["response"]).Select(d=>string.Join(";", keys.Select(k=>d[k]))));
для выбора других параметров нужно поменять только 2-ую строчку
Прописал using System.Web.Extentions;
Но у меня вываливается ошибка при исполнении кода:
2015-05-29_13-33-15.jpg


Пробовал добавлять и ссылки из GAC на System.Web.Extentions и System.Web (хотя не уверен, что это было необходимо).
Вылетает такая же ошибка. В чем косяк?
 

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Благодарностей
726
Баллы
93
System.Web.Extentions
lexone а что в этих кеях такого класного?)
я это тот же пустухов я софтом за день по 2 ляма чекал на частотку
Очень много попадается интересных экземпляров, которые снимаются с ТДС и опять идут в твиттер на повторную индексацию..
+ парсю еще саму ссылку дора и граблю все кеи (за недельку до 100к можно насобирать).

Прописал using System.Web.Extentions;
Но у меня вываливается ошибка при исполнении кода:
Посмотреть вложение 8477

Пробовал добавлять и ссылки из GAC на System.Web.Extentions и System.Web (хотя не уверен, что это было необходимо).
Вылетает такая же ошибка. В чем косяк?
Как тут добавляй http://joxi.ru/LmG7aypsNWwJml.jpg , только System.Web.Extentions.
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 538
Баллы
113

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 310
Баллы
113

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

из GAC добавлять + using System.Web.Extentions;
 

AZANIR

Client
Регистрация
09.06.2014
Сообщения
405
Благодарностей
196
Баллы
43
У меня такой папки нет.
И файла System.Web.Extentions.dll нет в директории Зенки (прошерстил поиском).
Билд: 5.4.3.0. Неужели несовместимо с моей версией? :(
у него демо , потому и нет , создай директорию.
 

svaminar

Client
Регистрация
21.08.2013
Сообщения
834
Благодарностей
378
Баллы
63

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 538
Баллы
113
из GAC добавлять + using System.Web.Extentions;
Пробовал уже:
Прописал using System.Web.Extentions;
Но у меня вываливается ошибка при исполнении кода:
Посмотреть вложение 8477

Пробовал добавлять и ссылки из GAC на System.Web.Extentions и System.Web (хотя не уверен, что это было необходимо).
Вылетает такая же ошибка. В чем косяк?
у него демо , потому и нет , создай директорию.
Невнимательный Вы :-)
Если директорию создам, там файл сам собой появится?)
 

Petrovich_Z

Client
Регистрация
22.12.2014
Сообщения
3
Благодарностей
1
Баллы
3
Сегодня постараюсь закончить третью часть, где будут показаны основные возможности а-парсера. (с зенкой вы так далеко не уедете ...)

Там будет:

  • Парсим 100к ключевых слов через гугл
  • Извлекаем из серпа гугла ссылки * из пункта 1
  • Через сторонний сервис парсим чистенькие статьи по ссылкам из пункта 2
  • Определяем релевантность статьи к запросу через API мегаиндекса (ее оптимизация)
А от куда возьмем кеи для парсинаг? Догадайтесь сами :D
ждал эту часть или уже не ждать до 4 конкурса?
 
  • Спасибо
Реакции: LightWood

lexone

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

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 538
Баллы
113
работа с джейсоном
тоже самое без сторонних либ (System.Web.Extentions есть у всех)
C#:
var json = project.Variables["json"].Value;
var keys = "first_name,last_name,online".Split(',');
var djson = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<dynamic>(json);
return string.Join("\r\n", ((IEnumerable<dynamic>)djson["response"]).Select(d=>string.Join(";", keys.Select(k=>d[k]))));
для выбора других параметров нужно поменять только 2-ую строчку
Прописал using System.Web.Extentions;
Но у меня вываливается ошибка при исполнении кода:
Посмотреть вложение 8477

Пробовал добавлять и ссылки из GAC на System.Web.Extentions и System.Web (хотя не уверен, что это было необходимо).
Вылетает такая же ошибка. В чем косяк?
из GAC добавлять + using System.Web.Extentions;
Возвращаясь к теме:
В чем моя ошибка, почему не работает?
error.jpg
 

alekwuy

Client
Регистрация
06.04.2013
Сообщения
1 631
Благодарностей
461
Баллы
83

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 538
Баллы
113

lexone

Client
Регистрация
12.10.2012
Сообщения
420
Благодарностей
726
Баллы
93
оставь только system.web (или отпиши мне по контактам.. в тимке глянем).
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 941
Благодарностей
4 331
Баллы
113
Реализация понятна, не понятно зачем нужны эти ключевики из Твиттера?
Если просто нужны НЧ ключи для дорвея, то сейчас все скрипты их сами генерируют.
А если дорвей самописный, то собрать ключи проще средствами инструментов Гугла, Яндекса, да и софта полно где это можно сделать за 5 минут.
 

GAGAn

Client
Регистрация
22.02.2015
Сообщения
37
Благодарностей
4
Баллы
8
Чет не получается у меня json в таблицу перевести.
Вроде делаю все как надо а вот такая ошибка
Тип Время Сообщение
15:06:01 Компиляция кода Ошибка в действии "CS0246" "The type or namespace name 'RootObject' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 2; Cтолбец: 48]

Скиньте пожалуйста рабочий проект с json
 
Последнее редактирование:

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