Вход

Просмотр полной версии : кто знает дельфи, прошу помочь


LegeN
13.08.2008, 16:47
хочу чтобы программа сохраняла исходник php страницы в формате txt. как сделать? нужно для одной своей программы :)

п.с. ссылка например вот так www.какой-то-сайт.ru/блабла/нужная_страница.php

Googleman
13.08.2008, 17:01
для этого наверное все в ручняк придется делать. тоесть HTTP-заголовки попробуй.

LegeN
13.08.2008, 18:11
вот нашол на Delphi Russian Knowledge Base, думаете прокатит? чо то ваще не понял, куда он сохраняет, как сохраняет и.т.д.




Как скачать любой URL используя стандартные настройки сети?

Начиная с Internet Explorer 3, Microsoft поддерживает очень полезные API, Wininet. Эти функции позволяют использовать все возможности IE, такие как настройки прокси, кэширование файлов и т.д.
Ниже приведён пример использования этих функций для скачивания файла с нужного URL. Это может быть любой доступный URL, ftp://, http://, gopher://, и т.д.
Более подробную информацию об этих функция можно посмотреть в MSDN - Win32 Internet API Functions.

Code:

function DownloadFile(const Url: string): string;
var
NetHandle: HINTERNET;
UrlHandle: HINTERNET;
Buffer: array[0..1024] of char;
BytesRead: cardinal;
begin
Result := '';
NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(NetHandle) then
begin
UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
if Assigned(UrlHandle) then
{ UrlHandle правильный? Начинаем загрузку }
begin
FillChar(Buffer, SizeOf(Buffer), 0);
repeat
Result := Result + Buffer;
FillChar(Buffer, SizeOf(Buffer), 0);
InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
until BytesRead = 0;
InternetCloseHandle(UrlHandle);
end
else
begin
{ UrlHandle неправильный. Генерируем исключительную ситуацию. }
raise Exception.CreateFmt('Cannot open URL %s', [Url]);
end;
InternetCloseHandle(NetHandle);
end
else
{ NetHandle недопустимый. Генерируем исключительную ситуацию }
raise Exception.Create('Unable to initialize Wininet');
end;

©Drkb::03577 Взято из http://forum.sources.ru

LegeN
16.08.2008, 15:27
ну ладно, сам нашол что делать, исходник php сохраняет через webbrowser, минусы, долго грузится ie6.0, зато код простой ;)

теперь еще одна проблема: как дельфи дать понять что загрузка страницы в webrowser окончена? delphi используется 7

Googleman
23.08.2008, 19:17
попробуй использовать событийную модель виндоус. имхо самое простое.

LegeN
23.08.2008, 19:18
и как это сделать? можеш подсказать? ;)

wchk
23.08.2008, 21:07
если тег <html> закрылся значит страница кончилась.

LegeN
23.08.2008, 21:47
не, не в том смысле. просто прога при нажатии на кнопку "вычислить" делает порядок действий:
1) в спрятанном webbrowser, открывает там нужную страницу,
2) |и нужно узнать тут что загрузка страницы закончилась|,
3) и сохраняет его исходник в txt или в спрятанный memo или в переменную какую нибудь,
4) потом ищет там данные в исходнике,
5) выводит на экран результат :).

самое обломное чтобы проверить что там чтото есть, если например соед. с инетом нету, там пусто окажется и программа выдаст ошибку, если не успеет ничего не загрузить, то тоже ошибка... если сделать через определенное время, например после нажатия на кнопку 10секунд, возможно тоже нету соед с инетом, или не успеет ничего загрузить (всякое может быть, нагруженный инет, медленная скорость, и т.п.)...

Googleman
24.08.2008, 02:27
property OnDocumentComplete: TWebBrowserDocumentComplete;

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

LegeN
24.08.2008, 09:53
спасибо. а блин, много там фреймов кажется... а пофигу, можно их и посчитать :))) сегодня вечером буду пытать и отпишусь о результатах!

LegeN
25.08.2008, 00:31
пытал пытал, ничо не получилось с этим %(. решил подругому сделать, и почти получился желаемый результат, через try и except ;) если не успеет загрузить страницу в течение 5 сек, то прога выдает, "повторите попытку позднее" :) еще сделаю чтоб настраивалась эта опция, типа увеличить время в настройках или добавить "повторить попытку сейчас".
.
.
.
.
АП

VladiT
26.08.2008, 10:38
хочу чтобы программа сохраняла исходник php страницы в формате txt. как сделать? нужно для одной своей программы :)

п.с. ссылка например вот так www.какой-то-сайт.ru/блабла/нужная_страница.php

Почем иммено для страницы с расширением *.php? Всеравно будь это *.php или *.html данные однинаковы.