Привет всем! Так как у многих часто возникают вопросы по поводу входа в эту игру и т.д. решил написать эту статью. Что ж, начнем!
Для начала нам понадобится:
Код:
:info: Delphi 2010 (скачать: [Ссылки могут видеть только зарегистрированные пользователи. ]), (через торрент: [Ссылки могут видеть только зарегистрированные пользователи. ])
:info: Библиотека регулярных выражений, очень хороший парсер RegExpr (скачать: [Ссылки могут видеть только зарегистрированные пользователи. ])
:info: Прямые руки! ;)
Все скачали, установили, файлы RegExpr'a закинули в директорию \Embarcadero\RAD Studio\7.0\lib.
Теперь можно запустить Delphi и создать проект, появится форма. На нее кинем 3 Edit'a, 1 Label, 1 Button и самое главное, где мы будем записывать все, что вытащили из страницы ДО - ListBox.
Теперь, настроим форму (это не очень важно), свойство Bordertyle поставим в bsSingle, в BorderIcons впишем [biSystemMenu,biMinimize].
Должно получиться примерно так:
[Ссылки могут видеть только зарегистрированные пользователи. ]
В раздел uses добавим RegExpr и idHTTP. Теперь 2 раза кликнем по кнопке и пропишем код так, как написано ниже:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var Reg: TRegExpr;
Data: TStringList;
S: string;
HTTP: TIdHTTP;
begin
// Проверям заполнены ли поля
if (Edit1.Text = '')or(Edit2.Text = '')or(Edit3.Text = '') then
begin
ShowMessage('Заполните все поля!');
Exit;
end;
// Создаем компоненты
Reg := TRegExpr.Create; // Парсер
Data := TStringList.Create; // Строки для посылки POST запроса
HTTP := TIdHTTP.Create(nil); // HTTP
HTTP.HandleRedirects := True; // Чтобы не выдавало ошибку 302, в Delphi 2010 не важно
// Входим в игру
Data.Clear; // Очистка не помешает ;)
Data.Add('loginForm_default_username='+Edit1.Text);
Data.Add('loginForm_default_password='+Edit2.Text);
Data.Add('loginForm_default_login_submit=Вход');
try
S := HTTP.Post('http://darkorbit.bigpoint.com/?locale=ru&aid=0',Data);
except
ShowMessage('Ошибка при посылке данных!');
Reg.Free;
Data.Free;
HTTP.Free;
Exit;
end;
// Проверяем, правильны ли данные?
if Pos('Выбор сервера',S) = 0 then
begin
ShowMessage('Неверные данные!');
Reg.Free;
Data.Free;
HTTP.Free;
Exit;
end;
// Выбираем сервер
Reg.Expression := '"http://'+Edit3.Text+'\.darkorbit\.bigpoint\.com/GameAPI\.php\?req=(.*?)"';
if Reg.Exec(S) then
begin
try
S := HTTP.Get('http://'+Edit3.Text+'.darkorbit.bigpoint.com/GameAPI.php?req='+Reg.Match[1]);
S := HTTP.Get('http://'+Edit3.Text+'.darkorbit.bigpoint.com/indexInternal.es?action=internalStart');
except
ShowMessage('Ошибка при запросе выбора сервера!');
Reg.Free;
Data.Free;
HTTP.Free;
Exit;
end;
// Сервер выбрали, проверяем данные
if Pos('<title>www.DarkOrbit.com</title>',S) <> 0 then
begin
Reg.Expression := '<div class="userInfo_left fliess10px-white">Ник:</div><div class="userInfo_right">(.*?)</div>';
if Reg.Exec(S) then ListBox1.Items.Add('Ник: '+Reg.Match[1]);
Reg.Expression := '<div class="userInfo_left fliess10px-white">Сервер:</div><div class="userInfo_right">(.*?)</div>';
if Reg.Exec(S) then ListBox1.Items.Add('Сервер: '+Reg.Match[1]);
Reg.Expression := '<div class="userInfo_left fliess10px-white">Ранг:</div><div class="userInfo_right"><img src="(.*?)" style="vertical-align: baseline;"> (.*?)</div>';
if Reg.Exec(S) then ListBox1.Items.Add('Ранг: '+Reg.Match[2]);
Reg.Expression := '<div class="userInfo_left fliess10px-white">Премиум:</div><div class="userInfo_right">(.*?)</div>';
if Reg.Exec(S) then ListBox1.Items.Add('Премиум: '+Reg.Match[1]);
Reg.Expression := '<div class="userInfo_left fliess10px-white">Компания:</div><div class="userInfo_right">(.*?)</div>';
if Reg.Exec(S) then ListBox1.Items.Add('Компания: '+Reg.Match[1]);
// Достаточно, теперь вытащим другую инфу
Reg.Expression := 'cred=(.*?)&xcred=(.*?)&';
if Reg.Exec(S) then ListBox1.Items.Add('Кредитов: '+Reg.Match[1]+' | Уридиума: '+Reg.Match[2]);
ListBox1.items.Add('Информация загружена!');
end else
begin
ShowMessage('Ошибка при входе на выбранный сервер!');
Reg.Free;
Data.Free;
HTTP.Free;
Exit;
end;
end else
begin
ShowMessage('Неудачный выбор сервера!');
Reg.Free;
Data.Free;
HTTP.Free;
Exit;
end;
// Уничтожаем компоненты
Reg.Free;
Data.Free;
HTTP.Free;
end;
На форму можно кинуть IdAntiFreeze с панели Indy Misc, чтобы прога меньше висла.
Еще, RegExpr - отличный инструмент, прочитать про него подробнее вы можете по ссылке скачивания выше.
Исходники программы я выложил на RgHost: [Ссылки могут видеть только зарегистрированные пользователи. ]
Если помог, то от спасибок никогда не отказываюсь
Добавлено через 4 минуты
P.S. Если будут вопросы то пишите в теме
Последний раз редактировалось R-A-Z-O-R; 18.06.2011 в 19:34.
Причина: Добавлено сообщение
gum_classis, не нравится код? Ты вообще ничего не знаешь и не можешь нормально пару строк кода написать, но при этом еще других ругаешь. Нехорошо, да.
R-A-Z-O-R, работа с интернетом в основном потоке - моветон. Сделал бы с BeginThread - всего строк десять бы добавить пришлось, зато аккуратно и никому не мешает. И, да, код ужасен: при ошибках ты выходишь из процедуры нахрен, не освобождая при этом классы, которые инициализировал. Утечка памяти большая, да
Последний раз редактировалось Dinmaite; 18.06.2011 в 16:45.
Флуд в теме = РО на 3 дня.
Оффтопик в теме = РО 3 дня.
Переход на личности в теме = РО 3 дня.
Вопросы класса "Почему у меня такая ошибка?", без указания строки кода и собственно ошибки = красная карта.
________________
Ни одно доброе дело не остается безнаказанным.
помоги перенести куки с одной формы на другую. Стукни в скайп blad56rus или в асю 337438
Извини, но не могу помочь, зарегистрируй свой аккаунт, а этот, который ты украл, отдай его владельцу.
Цитата:
Сообщение от Steam~
использую ХЕ, закинул библиотеку, ругается на RegExpr
Да, на него ругается Delphi 2009 и XE, поэтому я и написал что лучше использовать версию 2010 года
Цитата:
Сообщение от doctor_flasher
R-A-Z-O-R, работа с интернетом в основном потоке - моветон. Сделал бы с BeginThread - всего строк десять бы добавить пришлось, зато аккуратно и никому не мешает. И, да, код ужасен: при ошибках ты выходишь из процедуры нахрен, не освобождая при этом классы, которые инициализировал. Утечка памяти большая, да
Да, спасибо, как-то не обратил внимания
Последний раз редактировалось R-A-Z-O-R; 18.06.2011 в 19:31.
откройте исходный код страницы ДО, нажмите Ctrl+F (поиск), введите UID (ваш ID), и увидите следующее:
uid=67184713&
uid=(.*?)&
UId= //откуда начинать парсить страничку
(.*?) // то, что нам надо спарсить
& // то, на чем заканчиваем парсить
=================================================
Цитата:
а откуда id вытащить? Reg.Expression := 'uid=(.*?)''&'''; вот так пробовал, вытаскивает какуету ерунду. прошу помочь
У вас ошибка была тут: ''&'''
Собственно, не понятно зачем вы поставили кавычки, ведь в коде их нет, а если нет, то при парсере GegExpr их ставить не надо (да и вообще вроде не надо при любых парсерах)....