Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/29: Рейтинг темы: голосов - 29, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 15

Парсинг характеристик товара с Яндекс.Маркета

21.05.2012, 23:07. Показов 6260. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте...
Не уверен, правильно ли выбран раздел. Если ошибся, то извиняюсь заранее.

Мой вопрос заключается в следующем:
Хочу сделать простенький парсер для товаров с яндекс.маркета, т.е. чтобы можно было закинуть в программку ссылку на товар, а на выходе получить характеристики товара в виде таблицы на HTML.

На пример:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<div id="zhead">Технические характеристики:</div>
<table id="zebra">
<colgroup><col class="firstcol"></col>
</colgroup>
<tbody>
<tr class="odd">
<td class="leftcol">Модель</td>
<td class="ritecol">Thermaltake VL70001W2Z V5</td>
</tr>
<tr class="nodd">
<td class="leftcol">Форм-фактор</td>
<td class="ritecol">ATX, mATX</td>
</tr>
<tr class="odd">
<td class="leftcol">Типоразмер</td>
<td class="ritecol">Midi-Tower</td>
</tr><!---->
<tr class="nodd">
<td class="leftcol">Блок питания</td>
<td class="ritecol">нет</td>
</tr>
<tr class="odd">
<td class="leftcol">Габариты (ШхВхГ), Вес</td>
<td class="ritecol">223x508x490 мм, 7.1 кг</td>
</tr>
<tr class="nodd">
<td class="leftcol">Материал корпуса</td>
<td class="ritecol">сталь</td>
</tr>
<tr class="odd">
<td class="leftcol">Толщина стенок</td>
<td class="ritecol">0.7 мм</td>
</tr><!--
<tr class="nodd">
<td class="leftcol">Число внешних отсеков 3,5"</td>
<td class="ritecol">1</td>
</tr>
<tr class="odd">
<td class="leftcol">Число внутренних отсеков 3,5"</td>
<td class="ritecol">5</td>
</tr>-->
<tr class="nodd">
<td class="leftcol">Число отсеков 5,25"</td>
<td class="ritecol">9</td>
</tr>
<tr class="odd">
<td class="leftcol">Слоты расширения</td>
<td class="ritecol">7, безвинтовое крепление</td>
</tr>
<tr class="nodd">
<td class="leftcol">Встроенные вентиляторы</td>
<td class="ritecol">1 x 120x120 мм</td>
</tr>
<tr class="odd">
<td class="leftcol">Места для доп. вентиляторов</td>
<td class="ritecol">2 x 120x120 мм</td>
</tr>
<tr class="nodd">
<td class="leftcol">Возможность установки системы жидкостного охлаждения</td>
<td class="ritecol">нет</td>
</tr>
<tr class="odd">
<td class="leftcol">Разъемы на лицевой панели</td>
<td class="ritecol">USB x2, наушники, микрофон, eSATA</td>
</tr>
<tr class="nodd">
<td class="leftcol">Цвет корпуса</td>
<td class="ritecol">черный</td>
</tr>
<tr class="odd">
<td class="leftcol">Расположение блока питания</td>
<td class="ritecol">горизонтальное</td>
</tr>
<tr class="nodd">
<td class="leftcol">Дополнительная информация</td>
<td class="ritecol">200 мм вентилятор сверху, съёмная корзина для 3,5-дюймовых накопителей, ручка для переноски на верхней панели, защелки для 5.25” устройств, один отсек 2.5” конвертируется из 5.25” отсека</td>
</tr>
<tr class="odd">
<td class="leftcol">Сайт производителя</td>
<td class="ritecol"><a href="http://ru.thermaltake.com/" target="_blank">Thermaltake Россия</a></td>
</tr>
</tbody>
</table>
Решил спросить сначала тут, может кто-нибудь подскажет с чего начать хотя бы, т.к. в программировании я разбираюсь хреново. Интересует, как работать с сайтом на Си++ ну и может есть уже не сложные готовые решения для подобного рода вещей, чтобы не изобретать свой велосипед...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.05.2012, 23:07
Ответы с готовыми решениями:

Парсинг отзывов о магазине с Яндекс-Маркета
Подскажите как организовать сбор данных о отзывах магазина, с Яндекс-Маркета. Реализация нужна на PHP. Ключ доступа имеется.

Коменнтарии с Яндекс маркета
Здравствуйте! Как можно добавить комментарии яндекса на свой сайт? Вот например на этом сайте уже установленны комментарии с яндекс...

Парсер Яндекс.Маркета из прайса
Короче попытался навоял скриптец парсера ямаркета, не могу победить следующее 1. не хочет скачивать описание 2. чето не работают...

17
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
21.05.2012, 23:19
Закачать страницу IdHTTP комонентом.
Парсить используя boost/regex. - основная сложность составить регулярное выражение правильно
Выводить в StringGrid можно...

Но опять таки если на сайте будут изменения то возможно придется вносить изменения в программу.

Можно открыть ссылку прямо в программе через WebBrowser и смотреть от туда (если это допустимо)
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.05.2012, 00:56
Вот пример (парсит файл 1.html,вывод в ListView)
Вложения
Тип файла: rar 2.rar (360.4 Кб, 165 просмотров)
0
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 15
22.05.2012, 01:08  [ТС]
Спасибо, не совсем то что нужно, но пример полезный, буду пробовать
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.05.2012, 01:11
А что требовалось?
(Вы не указали сам сайт поэтому я не использовать IdHTTP, но это не проблема...)
0
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 15
22.05.2012, 01:18  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
А что требовалось?
(Вы не указали сам сайт поэтому я не использовать IdHTTP, но это не проблема...)
Сайт - яндекс.маркет, это я указал в начале. Идея - вытаскивать подробные характеристики товара со страницы типа этой. А на выходе получать хтмл-код, желательно сразу в буфер для последующей вставки. Ваш пример мне помог понять, как это реализовать, так что дальше я наверное справлюсь сам.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.05.2012, 01:30
Сайт - яндекс.маркет, это я указал в начале.
Я имел ввиду конкретнуюю страницу которую надо парсить.

На этой странице совсем другой код нежели вы привели в начале, для нее будет другая регулярка
0
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 15
22.05.2012, 01:31  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Я имел ввиду конкретнуюю страницу которую надо парсить.

На этой странице совсем другой код нежели вы привели в начале, для нее будет другая регулярка
Ну да, код что я привел - это предполагаемый результат парсинга.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.05.2012, 14:59
Ну это уже не парсинг, а преобразование....
Т.е то что можно получить используя результат парсинга.

Добавлено через 13 часов 20 минут
А почему бы прото не выдрать имеющуюся таблицу со страници?
0
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 15
22.05.2012, 15:01  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну это уже не парсинг, а преобразование....
Т.е то что можно получить используя результат парсинга.

Добавлено через 13 часов 20 минут
А почему бы прото не выдрать имеющуюся таблицу со страници?
Ну у меня шаблон определенный на сайте, нужно под него подстроить...
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.05.2012, 15:25
Ну вывести под шаблон не проблема...
Проблема отпарсить уже имеющуюся страницу...

Тем более я пердпологаю что нужно будет парсить разные страници а не одну конкретную? - поэтому задача практически не выполнима ( по крайней мере лишена смысла)
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
22.05.2012, 15:31
а разве у яндекс маркета нету своих решений для сайтов партнеров ?
0
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 15
22.05.2012, 15:42  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну вывести под шаблон не проблема...
Проблема отпарсить уже имеющуюся страницу...

Тем более я пердпологаю что нужно будет парсить разные страници а не одну конкретную? - поэтому задача практически не выполнима ( по крайней мере лишена смысла)
Да, страниц будет много, но ведь код таблицы у яндекса везде одинаков, меняются лишь характеристики.
У меня получилось выдернуть нужную таблицу (тут правда две оговорки: 1 - проблема с кодировкой, думаю поправимо, 2 - поскольку делфи мне понятней, сделал это на нем )

Вот табличка, выдернутая из яндекса:
HTML5
1
<table class="b-properties"><tbody><tr><th colspan="2" class="b-properties__title">Форм-фактор Рё размеры</th></tr><tr><th class="b-properties__label b-properties__label-title"><span>Форм-фактор</span></th><td class="b-properties__value">ATX, mATX</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Типоразмер</span></th><td class="b-properties__value">Midi-Tower</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Блок питания</span></th><td class="b-properties__value">нет</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Габариты (РЁС…Р’С…Р“)</span></th><td class="b-properties__value">223x508x490 РјРј</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Вес</span></th><td class="b-properties__value">7.1 РєРі</td></tr><tr><th colspan="2" class="b-properties__title">Конструкция</th></tr><tr><th class="b-properties__label b-properties__label-title"><span>Материал РєРѕСЂРїСѓСЃР°</span></th><td class="b-properties__value">сталь</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>РћРєРЅРѕ РЅР° Р±РѕРєРѕРІРѕР№ стенке</span></th><td class="b-properties__value">есть</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Число отсеков 5,25"</span></th><td class="b-properties__value">9</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Слоты расС?ирения</span></th><td class="b-properties__value">7, безвинтовое крепление</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Количество замков</span></th><td class="b-properties__value">1</td></tr><tr><th colspan="2" class="b-properties__title">Охлаждение</th></tr><tr><th class="b-properties__label b-properties__label-title"><span>Встроенные вентиляторы</span></th><td class="b-properties__value">1 x 120x120 РјРј</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Места для РґРѕРї. вентиляторов</span></th><td class="b-properties__value">2 x 120x120 РјРј</td></tr><tr><th colspan="2" class="b-properties__title">Дополнительно</th></tr><tr><th class="b-properties__label b-properties__label-title"><span>Р*азъемы РЅР° лицевой панели</span></th><td class="b-properties__value">USB x2, науС?РЅРёРєРё, микрофон, eSATA</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Цвет РєРѕСЂРїСѓСЃР°</span></th><td class="b-properties__value">черный</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Р*асположение блока питания</span></th><td class="b-properties__value">горизонтальное</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Блок питания РІРЅРёР·Сѓ</span></th><td class="b-properties__value">есть</td></tr><tr><th class="b-properties__label b-properties__label-title"><span>Дополнительная информация</span></th><td class="b-properties__value">200 РјРј вентилятор сверху, съёмная РєРѕСЂР·РёРЅР° для 3,5-дюймовых накопителей, ручка для переноски РЅР° верхней панели, защелки для 5.25” устройств, РѕРґРёРЅ отсек 2.5” конвертируется РёР· 5.25” отсека</td></tr></tbody></table>
Осталось по сути только правильно разобрать ее и подогнать под шаблон из первого поста, так что щас буду думать как это сделать... Ну и кодировка :/

Цитата Сообщение от koldun Посмотреть сообщение
а разве у яндекс маркета нету своих решений для сайтов партнеров ?
Честно говоря не знаю, но даже если так, то мне этот вариант не подойдет, я всего-лишь фрилансер, который должен копипастить эти характеристики, картинки и т.д. )
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.05.2012, 15:45
Да, страниц будет много, но ведь код таблицы у яндекса везде одинаков
Ну если точно одинаковый код то можно браться делать, но я чет сходу не могу пока придумать регулярку.
0
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 15
22.05.2012, 15:53  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Ну если точно одинаковый код то можно браться делать, но я чет сходу не могу пока придумать регулярку.
А не подскажете насчет кодировки, куда копать?
Вот мой корявый код на всякий случай
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
unit yandex;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ActiveX, Vcl.StdCtrls, Vcl.ComCtrls,
  Vcl.ToolWin, Vcl.OleCtrls, SHDocVw, Web.HTTPApp, RegExpr;
 
type
  TForm1 = class(TForm)
    CoolBar1: TCoolBar;
    ComboBox1: TComboBox;
    Button1: TButton;
    Button2: TButton;
    WebBrowser1: TWebBrowser;
    Memo1: TMemo;
    Button3: TButton;
    Memo2: TMemo;
    procedure ComboBox1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
 
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
 
  private
    { Private declarations }
  public
 
  end;
  //procedure Search(Sender: TObject);
 
var
  Form1: TForm1;
  code: string;
 
implementation
 
{$R *.dfm}
function WB_SaveHTMLCode(WebBrowser: TWebBrowser; const FileName: TFileName): Boolean;
 var
   ps: IPersistStreamInit;
   fs: TFileStream;
   sa: IStream;
 begin
   ps := WebBrowser.Document as IPersistStreamInit;
   fs := TFileStream.Create(FileName, fmCreate);
   try
     sa := TStreamAdapter.Create(fs, soReference) as IStream;
     Result := Succeeded(ps.Save(sa, True));
   finally
     fs.Free;
   end;
 end;
 
 function WB_GetHTMLCode(WebBrowser: TWebBrowser; ACode: TStrings): Boolean;
 var
   ps: IPersistStreamInit;
   ss: TStringStream;
   sa: IStream;
   s: string;
 begin
   ps := WebBrowser.Document as IPersistStreamInit;
   s := '';
   ss := TStringStream.Create(s);
   try
     sa := TStreamAdapter.Create(ss, soReference) as IStream;
     Result := Succeeded(ps.Save(sa, True));
     if Result then ACode.Add(ss.Datastring);
   finally
     ss.Free;
   end;
 end;
 
 function Pwner (const AInputString : string) : string;
 const
  RE = '<table class="b-properties">(.*?)</table>';
 var
  r : TRegExpr;
 begin
  Result := '';
  r := TRegExpr.Create;
  try 
     r.Expression := RE;
     if r.Exec (AInputString) then
       Result := Result + r.Match [0];
    finally r.Free;
   end;
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   WB_SaveHTMLCode(Webbrowser1, 'c:\test.txt');
 end;
 
 procedure TForm1.Button2Click(Sender: TObject);
 begin
   WB_GetHTMLCode(Webbrowser1, Memo1.Lines);
   Code := Memo1.Lines.Text;
 end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
   Memo2.Lines.Text := Pwner (Memo1.Lines.Text);
end;
 
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key = VK_RETURN then
    WebBrowser1.Navigate(ComboBox1.Text);
end;
 
end.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.05.2012, 15:58
А в выложеном мною проекте есть ф-ция преобразования Utf в Unicode

Добавлено через 2 минуты
К стати у вас нет ссылки на то как пользоваться TRegExpr? в Builder же он тоже работает?
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
22.05.2012, 15:59
в коде все новые записи имеют предшествующий им одинаковый код.

Code
1
b-properties__title
я делал похожее таким способом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TStringList* list = new TStringList;
/*
обьяви глобально гдето 
*/
 
void parser(AnsiString text ){
AnsiString helptext;
 
helptext = text.SubString(text.Pos("b-properties__title"),100500  )
text = text.SubString(text.Pos("b-properties__title") + 10 ,100500  )
list->Add(helpstring); 
if (text.Pos("b-properties__title") > 5){
parser(text);
}
}
в результате получишь StringList с количеством строк равной количству встречающихся записей.
после чего каждую строчку обрабатываешь уже как хочешь, можешь еще раз переразбить ее на кусочки помельце, или напрямую вытаскивать значения...

можт и криво написано, но у меня так работает, нареканий на быстродействие нету.
0
1 / 1 / 0
Регистрация: 21.05.2012
Сообщений: 15
22.05.2012, 16:17  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
К стати у вас нет ссылки на то как пользоваться TRegExpr? в Builder же он тоже работает?
Брал его где-то тут, в архиве есть хелп, да и на сайте инфа разная. У меня в RAD Studio XE2 нормально работает.

Добавлено через 12 минут

Извиняюсь, ссылку забыл вставить ) Брал тут
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.05.2012, 16:17
Помогаю со студенческими работами здесь

Удаление отзывов с Яндекс.Маркета
Всем привет. Реальный клиент пишет нам и говорит, что не размещают отзыв о работе магазина. Он разместил один отзыв после первого...

Переадресация с гугла на go.mail.ru, тулбар яндекс.маркета
Словил вирус, не уверен как, т.к. программ в последнее время не устанавливал, была только передача файлов с зараженного ноутбука на мой...

Спарсить цены Яндекс.Маркета по определенной ссылке
Всех приветствую. Возникла такая задача - по определенной ссылке спарсить первые несколько цен, выдаваемые Яндекс.Маркетом. Вот...

Как можно программно изменить настройки Яндекс.Маркета
Всем привет. Подскажите, плиз, как можно программно изменить настройки Яндекс.Маркета на странице http://market.yandex.ru/settings.xml ...

Как добавить описание характеристик товара?
Доброго дня. Подскажите, возможно ли добавить характеристике товара дополнительное поле Описание? Если да, то как? ocStore 2.1


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru