WoWHead Data parser
Вложений: 2
Представляю вам свой WoWHead Data parser, который я пишу уже довольно долго, когда только появляется свободное время.
Ссылка на репозиторий: https://github.com/Lordron/WoWHead-data-parser Бинарники в аттаче (.NET 4.0 Client Profile) Парсер поддерживает 4 вида парсинга: -По одному Id -По диапазону Id -По списку Id -По фильтру вовхеда (только некоторые парсеры) Хочу обратить внимание, что список Id я получил с вовхеда, а не брал его из головы. http://filebeam.com/d0439975dbb3fb96...b992ba73f9.jpg В первом выпадающем меню выбирается локализация и, соответственно, сервер. Во втором выпадающем меню выбирается парсер Single, Multiple, List, WoW Head Filter - вид парсера, я описывал выше. (Если вы выбрали тип List, то в выпадающем меню в этой вкладке выбирайте ту строку, которая похожа на парсер. Т.е для парсера тренеров - trainer.welf, а для книжек - page.welf) Программа поддерживает следующие парсеры http://filebeam.com/354fad0c6d8357cc...f284dca6c6.jpg С версии 2.1 добавлен конфиг файл, в котором мы можете настроить вывод sql запросов http://filebeam.com/9a4ec1dd71be3db5...1b1c0ab0d4.jpg Welf format Пожалуйста тестируйте и отписывайтесь о том, что не исправно и чего не хватает. Очень жду ваших отзывов! Changelog |
Цитата:
add: 1,2,4,5 - готово! сделал сохранение последнего выбранного парсера и языка файл добавил жду еще предложений! add: 6.Он заблокирован) + так выходит значительно быстрее, чем каждый раз преобразовывать число в текст 7.Не думаю что это нужно 8.Сделаю, как с локализациями разберусь. Тогда все сообщения и интерфейс переведу |
|
Почему, варианта. Просто в случае с нумерикАпДаун-ом мы увеличиваем каждый раз число на 1 - просто и быстро. А в случае с лейблом надо сначала нужно перевести число в строку, и уже поставить ее лейблу, что значительно медленнее.
Жду дальше предложений и багов! |
очень долго загружается 15-20 сек на очень мощных машинах (release/debug)
вопрос что так долго подгружает и нельзя ли вынести в отдельный поток *? |
Хм и правда. Я бы подумал, что дело в дб2 файлах, но тут на них тратиться 36мс. Сейчас покопаю
Нашел! Вся задержка из-за загрузки welf файла. При запуске он автоматом грузит первый файл из списка, и получается так, что этот файл как-раз item.welf, а там 60к записей. Можно попробовать вынести загрузку в отдельный поток, но может произойти так(как раз таки на такой файле), что он еще будет грузиться, а вы уже будете его использовать. Так что думаю это не вариант. Думаю надо придумывать какой нибудь другой способ хранения, уже вроде и структуру придумал Код:
struct MainHeader Код:
struct Block |
https://github.com/Lordron/WoWHead-d...a6718dd6e4bfa4
Исправил, пока welf-ы не переделывал. Думаю та проверка и вовсе не нужна была. Если генерировать файлы welf креатор (надо будет кстати его переписать основательно), то даблов вообще быть не может |
Почему бы у пользователя при надобности не спросить загрузить или нет?
или при первом вызове?* |
Смысла нету. Сейчас уже загрузка идет меньше чем за секунду, по этому никто этого не заметит
|
https://github.com/Lordron/WoWHead-d...bf1ad6d5a46206
Обновил юзер агенты, и увеличил их кол-во до 20. Взял теперь новые юзер агенты для новых браузеров (сафари, мозила, опера, хром) + фиксы по мелочи |
Неплохо, пару недель я хотел написать что-то похожее на Delphi, но решил изучать c++.
Насчет проги: 1) хотелось бы видеть русскую прогу; 2) прога немного тормозит, хотя машина у меня не слабая. |
1.Сделаю, как только пойму как сделать локализацию нормально
2.Что именно? Знаю парсеры почему-то тормозят дойдя до опр. уровня. Например вендор парсер всегда почему-то тормозит на 950-980 ентри (если использовать список), не знаю даже почему. |
а если локализацию пихать в отдельный файл, к примеру lang/russian.xml? Далее в настройках пользователь сам будет выбирать нужный ему язык. Правда наверное это увеличит нагрузку, при передачи значений в опции формы. Я наверное так и сделал бы.
|
Тут есть и стандартные средства. Я начал локализацию потихоньку, но что-то не пойму как программно сменить язык.
|
Сделал! Смотрите последние коммиты. Жду отзывов.
Пока нашел только 1 баг: после смены локализации консоль очищается, но в лог файл все пишеться |
Вложений: 1
Обновил библиотеку Newtonsoft.Json.dll с 4.0.8.14612 до 4.5.5.14917
Как видно разница большая. Вы почувствуйте уменьшенную нагрузку на процессор при парсинге. Также новые бинарники 2.3.1 2.3.1 -Обновление библиотеки Newtonsoft.Json.dll, что даст множество улучшений -Локализация приложений -Сохранение последнего использованного парсера и локаля -Исправлено 2 краша -Добавлена About окошко -Исправлены найденные баги -Небольшая оптимизация |
Что-то вовхед тупит последнее время, работает медленно. Сильно мешает в разработке npc parser-а. У меня одного такая проблема? А то вдруг они мне что-то сделали, за то что я постоянно парсю вовхед)
|
Открыл, нажал List, выбрал item.welf, нажал Start.
И уже часа как полтора Parsing на 64750 |
Вот и я о том же. вовхед тупит жестко. Надо будет сделать максимальное время ожидания. Если больше N минут, то останавливать
+ надо будет Abort кнопку переделать, чтобы не ожидать завершения всех операций, а самому их завершать. Придется тогда при создании реквеста помещать его в массив, а после удалять. И после остановки приложения останавливать все существующих на данный момент реквесты |
Цитата:
|
Угу. Там вовхед глючит, и не отправляет ответ. А пока ответ не придет так и будет весеть 64750). Хз почему так, всмысле почему вовхед не отдает.
64750 - это не ласт ИД, это последний Ид в списке под номером 64750. На самом деле последний Ид - 79062 |
Обновил DBFilesClient.NET.dll
https://github.com/Lordron/WoWHead-d...18c494471f7244 благодаря новой версии парсинг вендоров теперь не так сильно нагружает процессор |
Просматривал кол-во открытых соединений и выяснил причину висяков. Я про те висяки, когда прога бесконечно ожидала данные. Когда висела на 2599 из 2600 например.
Причина такого бага в том, что из-за какой-то неизвестной х**ни кол-во открытых соединений равно 0, в то время как программа еще работает. По какой-то причине новые подключения больше не создаются или же уже были закрыты раньше. Программа ждет пока все семафоры будут освобождены. Семафоры я освобождаю вместе с закрытием подключения. По этому я думаю, что программа перестает создавать подключения. Только в такой случае может быть такое разногласие, когда семафоры не высвобождаются из-за того, что новые соединения не создаются. add: да, все верно |
Цитата:
я с ним не работаю уже много лет, поэтому знания относятся ко временам WinXP, но думаю ничего не изменилось. количество доступных для процесса сокетов в винсоке - величина динамическая, и вовсе не равна FFFF-(число открытых), ее надо запрашивать спец. методом, и заранее предполагать что число более 1024 - скорее всего неверное... в реальности проще вести счетчик в софтине самостоятельно, закладываясь на ограничение 256 для клиентской винды и 1024 для серверной. |
У меня максимальное кол-во подключений - 100
|
Вложений: 1
Вот бинарники свежие, версию пока не менял.
|
Цитата:
|
Сижу мучаюсь уже 2 вечер. Выслушаю любые предложения и идеи по оптимизации. За 2 вечера ничего толкового не получилось
|
После долгих опытов и тестов выяснил, что основной висяк идет из-за блокировки
Код:
lock (_threadLock) |
Цитата:
Этим занимается библиотека Wininet, которая является более высокоуровненвой по сравнению с winsock и включает в себя функции для работы по http и ftp протоколам. |
Сделал пару изменений, пока не пушал. Уже 2 дня тестирую стабильность и вроде крашей нету. Тестировал на вендорах (2.6к записей). Сейчас начал тестировать на item-ах. Там 64750 записей, как раз протестирую полностью
Вот список запланированных изменений для следующей версии -Автоматически загружать welf файл при выборе парсера. Если используется кастомный файл, то его можно будет потом поменять. -Перенос парсинга юнитов и квестов с фильтра на обычный лад -В связи с предыдущей пунктом расширю возможности парсинга юнитов и квестов. Буду вытягивать побольше данных |
Набросал кошерный npc парсер, не использующий вовхед фильтры. Удалось вытащить следующие поля
Data: -Level -Money -Currency -Type -Quotes Locale: -Name К сожалению SubName вытащить пока не удалось |
Я так вытаскиваю name и subname:
Код:
<div class="text">(?:(?!<h1>).+?)<h1>\s*((?!<^;|</h1>).+?)\s*(?:<^;((?!>^;).+?)>^;)?< Пишу на Parser 3.4.1, поэтому спецсимволы экранирую символом ^ |
Вот предварительный вариант скула для Лорда Ребрада (36612)
Хочу еще вытащить ХП Код:
-- Dump of 6/29/2012 2:06:48 PM (00:00:02.0161153), Total object count: 1 |
По тому же нпц результаты моего скрипта (может, что-то еще доставать будешь):
Код:
INSERT INTO `creature_template_stat` SET `entry`=36612, `Health_N10`=6972500, `Health_N25`=23706500, `Health_H10`=10458750, `Health_H25`=31376250 ON DUPLICATE KEY UPDATE `entry`=36612, `Health_N10`=6972500, `Health_N25`=23706500, `Health_H10`=10458750, `Health_H25`=31376250; |
1.Тебе удобнее, на C# нету такого парсера html
Хп я пока не могу достать, а имя и под_имя - дело локаль парсера, благо он у меня пашет 2.Как ты определил фракцию только по цвету? Не думаю что это верно, есть же куча других factionId которые дают такую же враждебность как и 14 фракция, хотя если фракции вообще нету то как затычка до сниффа сойдет. Для зеленых и жолтых какие factionId юзаешь? |
Цитата:
|
Добавил Health парсер. Поставил парситься. Результат будет через пол часа, надеюсь все предусмотрел
add: Спарсил, обнаружил 9к + мобов у которых я не получил ХП. Проблема вы том что у большенства и правда на вовхеде нету ХП, а у остальных я и не знаю как проверить наличие хп, все 9к страниц я не просмотрю. Также нашел еще 1 проблему. Я то думал что максимум на вовхеде будет ХП для 4 уровней сложности, а там еще у некоторых есть ХП для поиска рейда, + у некоторых вообще 7 ХП (нормал, героик, 4 сложности + поиск рейда) http://ru.wowhead.com/npc=14337 Сейчас вроде придумал как распределять ХП Если кол-во хп = 1, то это обычное ХП Если кол-во хп = 2, то это обычное и героическое ХП Если кол-во хп = 4, то это 4 уровня сложности Если кол-во хп = 5, то это 4 уровня сложности + рандом_рейд Если кол-во хп = 6, то это нормал, героик + 4 уровня сложности Если кол-во ХП = 7, то это нормал, героик, 4 уровня сложности + рандом_рейд Нет, я ошибка. Может быть и так, что если у моба 6хп, то это нормал, героик, 3 сложности + рандом_рейд http://ru.wowhead.com/npc=32345 Так что тут придется извратиться |
Какой может быть уровень сложности у non combat петов и рем бота инженерского? Вы о чем вообще?
|
Текущее время: 06:46. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS