catalogloader 2014 belarus minsk dnug
TRANSCRIPT
Николай Кекиш Минск - 2014
Как сделать 1000 парсеров и остаться довольным?
CatalogLoader.com
Слайд 2 из 22
О компании
- 6 продуктов- 30 CMS- 500 проектов- 2500 клиентов
CatalogLoader.com
Слайд 3 из 22
Парсер извлекает
- категории \ продукты- параметры \ комбинации - картинки
Слайд 4 из 22
История
- просто код
- проект- скрипты- версии
Слайд 5 из 22
HtmlAgilityPackvar doc = new HtmlDocument();
doc.Load("file.htm");
var attributes = new List<HtmlAttribute>();
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
{
var att = link["href"];
attributes.Add(att);
}
Слайд 6 из 22
Проект (настройки) <GrabberSettings>
<CategoryLevel1 />
<CategoryLevel2 />
<CategoryLevel3 />
<ShopUrl>http://artans.ru</ShopUrl>
<TypeOfHrefForProducts />
<Charset />
<PaginationTemplate>index.php?page={0}</PaginationTemplate>
<ProductsOnPage>1</ProductsOnPage>
<MaxProductsInCategory>0</MaxProductsInCategory>
<PaginationStartIndex>1</PaginationStartIndex>
Слайд 7 из 22
Проект (каталог)#Men[path]http://www.thehut.com/catalogue/men.list@@1000
##New In[path]http://www.thehut.com/catalogue/men/new-in.list@@1011
###Hoody[path]http://www.thehut.com/catalogue/men/new-in.list?searchFilters=SG9vZHkjQ2xvdGhpbmd0eXBlX2NvbnRlbnQ6SG9vZHkhUmZXN0cmljdGVkOmZhbHNlIQ%3D%3D@@1012
###Jacket[path]http://www.thehut.com/catalogue/men/new-in.list?searchFilters=SmFja2V0I0Nsb3RoaW5ndHlwZV9jb250ZW50OkphY2tldCFSlsdGVyI3Jlc3RyaWN0ZWQ6ZmFsc2Uh@@1013
###Knitwear[path]http://www.thehut.com/catalogue/men/new-in.list?searchFilters=S25pdHdlYXIjQ2xvdGhpbmd0eXBlX2NvbnRlbnQ6S25pdHdlYXIhUmVkOmZhbHNlIQ%3D%3D@@1014
Слайд 8 из 22
Скриптыpublic override void RunProduct(RunProductScriptParameters p)
{
product = p.Product;
category = p.Category;
_hpl = (p.Process as OneProductLoader).State.Proxy.GetHtmlPageLoader("http://mail.ru");
product.ID = Helper.GetHashCodeString(product.Name + product.Url);
if (product.Art == "")
product.Art = _HashCod;
if (_imageNameSku)
product.Image = Helper.MakeImgName2Sku(product.ImageFull);
Версия 1
Версия 2
Версия 3
Версия 4
Слайд 13 из 22
VisualWebGuipublic partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
MyAspxBox a = new MyAspxBox();
a.Dock = DockStyle.Fill;
a.Path = "WebForm2.aspx";
this.Controls.Add(a);
}
}
Слайд 14 из 22
VisualWebGui-2public class MyAspxBox : AspPageBox
{
protected override void FireEvent(IEvent objEvent)
{
if (objEvent.Type == "message")
{
string s = objEvent["messagetext"];
MessageBox.Show(s);
}
else
{
base.FireEvent(objEvent);
}
}
}
Слайд 15 из 22
VisualWebGui-3function SendMessage() {
var strMessage = document.getElementById("TextBox1").value;
var objEvent = VWG.Events.CreateEvent("<%= PageContext.Guid %>", "message");
VWG.Events.SetEventAttribute(objEvent, "messagetext", strMessage);
VWG.Events.RaiseEvents();
}
Слайд 16 из 22
Ext.net<script runat="server">
protected void Button_Click(object sender, DirectEventArgs e)
{
X.Msg.Alert("Server Time", DateTime.Now.ToLongTimeString()).Show();
}
</script>
Слайд 17 из 22
Ext.net-2<ext:ResourceManager runat="server"
DirectEventUrl="default.aspx" />
<h1>ImageButton Control Variations</h1>
<h2>Simple ImageButton</h2>
<ext:ImageButton
runat="server"
ImageUrl="button.gif"
OverImageUrl="overButton.gif"
DisabledImageUrl="disabled.gif"
PressedImageUrl="pressed.gif">
<DirectEvents>
<Click OnEvent="Button_Click" />
</DirectEvents>
</ext:ImageButton>
Слайд 18 из 22
Особенности- тестирование
- кэширование
- работа с БД
- задачи + лог
Слайд 19 из 22
Кэширование- предсказуемая скорость
- управляемость
Слайд 20 из 22
Задачи + лог
public class Runnablepublic class TaskInfoзапуск из CMD
Слайд 21 из 22
Работа с БД
- MSSQL, SQL Compact, MySQL
- Http tunnel