|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Как получить HTML-код постоянно обновляющейся страницы?
Уважаемые форумчане!
Есть такая задачка - есть сайт, на котором раз в несколько секунд обновляются числа внутри табличек или появляются новые таблички/исчезают старые. Нужно с интервалом, скажем, в 5 секунд получать html-слепок информации и парсить его. С парсингом я как-нибудь и сам управлюсь, пусть через ж... извините, давно не учился программированию, но всё же это решаемо. А вот каким путём лучше идти именно для получения HTML-кода? Я ничего лучше TwebBrowser на форме, и получения его Body не придумал, но как минимум на моем железе (а это старенький Атом с Win XP) интернет эксплорер отказался обновляться выше 8-й версии, а в ней сайт просто не открывается. Вернее открывается, но обновление занимает где-то минут 5, а числа меняются раз в 5-20 секунд. При этом обычный браузер Хром всё показывает в реальном времени. То есть железо не особо "тупит". Пробовал почитать про то, как пользоваться Хромиум эмбеддед (TChromium), но мозг взорвался, а информации очень мало, и я не совсем понимаю, как адаптировать для своего случая. Может кто подсказать кусочек кода, который сначала один раз откроет нужный адрес www.site1.ru (это не реальный адрес, так, для примера), а потом будет 1 раз в 5 секунд извлекать его содержимое в переменную S типа string (подозреваю, что это будет внутри тела Timer1.OnTimer)? |
#2
|
||||
|
||||
что-нибудь из TIdHTTP, WinHTTP, WinINet вполне достаточно будет.
Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Num Lock,
если я правильно уловил, что с помощью Инди мне надо постоянно слать запрос (GET)? Именно так работает браузер со страницами (сайтами), которые сами постоянно инициируют обновление странички? Просто хотелось использовать именно компонент браузера, чтобы не лезть глубже в дебри структуры отправки запросов, инди и т.д. |
#4
|
||||
|
||||
да, периодически делать GET запрос веб-серверу. обычно веб-браузер используют для просмотра веб-страниц (сайтов), использовать его только для получения html-странички (без ее визуализации) излишне.
Пишу программы за еду. __________________ |
#5
|
||||
|
||||
Дружище, прошу прощения, но я правда настолько слаб конкретно в веб-технологиях (последние 15 лет после универа занимаюсь совсем иными задачами из области прикладной электроники). Отниму ещё пару минут твоего времени.
Собственно, сайт: https://www.betmarathon.com/su/live/popular На нём постоянно что-то обновляется. Подскажи, пожалуйста, как получать обновлённый текст с интервалом в 5 секунд? Я не понимаю. Когда я ещё хоть как-то плотно занимался Pascal, он назывался Turbo Pascal 6.0 и Borland Pascal 7.0 b и работал под DOS. Тогда интернет-технологии были в зачатках. Распарсить и обработать данные я соображу как, ибо тот же паскаль, только в профиль, но вот как это получить со странички? Подозреваю, что всего кода будет строчек 10, но я не знаю, каких... |
#6
|
||||
|
||||
Код:
var WinHttp: TWinHttp; ResponseContent: TFileStream; begin WinHttp:=TWinHttp.Create(Self); ResponseContent:=TFileStream.Create('Project1.html', fmCreate); try WinHttp.Get('https://www.betmarathon.com/su/live/popular', ResponseContent); ShowMessage('Ok'); finally ResponseContent.Free; WinHttp.Free; end; end; TWinHttp обертка над WinHTTP, собственный компонент, реализует эту схему: для https вполне подходит, без всяких дополнительных dll. https://yadi.sk/d/dvkP34zriPk8m Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
savage911 (16.08.2015)
|
#7
|
||||
|
||||
Спасибо! Попробую этим воспользоваться в ближайшее время (как получится на часик-другой от семьи избавиться).
|
#8
|
||||
|
||||
Diablo кроется в деталях
Уважаемый NumLock,
я скопировал данный текст в свою программу, и, ожидаемо, оно сказало, что twinhttp неведомый идентификатор. Простое добавление в Uses через запятую winhttp не спасло отца русской демократии. Или эту "обёртку" тоже надо как-то "сексуально" ставить? Кстати, Indy у меня не получилось к этой задачке припилить. Нашёл где-то исходник, который через инди по простому парсил http сайт. Поменял адрес на свой марафоновский https - и ни фига. Хелп дельфи как-то ненавязчиво просит прикрутить правильный IOHandle, чтобы SSL обрабатывался... На этой фразе без примеров (а ведь в старых дельфи 5-7 такой шикарный хелп был, с примерами) я и скис... И кстати, в приложении просто экзешник. Может быть проще залить весь код архивом? Ещё раз авансом спасибо! |
#9
|
||||
|
||||
так в 6-ом сообщении написано все про TWinHttp и выложен тестовый пример с исходным кодом. естественно исходника самого TWinHttp в интернете и быть не может. пример служит лишь для проверки работоспособности данного подхода (через WinHTTP). если у тебя этот пример работает, то можно идти по этому направлению. как уже сказано выше, в отличии от Инди, данному методу не нужны никакие дополнительные dll.
Пишу программы за еду. __________________ |
#10
|
||||
|
||||
Так как мне всё-таки подключить в Uses что-то так, чтобы TwinHTTP работал, а не выдавал полное непонимание методов, которыми ты воспользовался в приведённом фрагменте кода? А то мне он радостно говорит, что такие методы не наличествуют, если я просто пишу в заголовке Uses winhttp или Uses twinhttp
|
#11
|
||||
|
||||
я не могу сказать и никто не может сказать как называется у тебя unit, в котором реализован WinHttp. можно вообще не подключать ничего (кроме Windows естественно) и делать все чисто на вызовах функций.
Пишу программы за еду. __________________ |
#12
|
||||
|
||||
Ммм... не понимаю.
Давай так попробуем: В выложенном тобой куске кода есть всё, что необходимо, кроме поля uses. Присланный тобой exe файл тоже работает (я видел результат). Ты можешь выложить весь текст модуля unit1 того проекта, кусок кода которого ты выложил? Потому что мне дельфа при компиляции говорит, что она не знает класса twinhttp. И я не понимаю, как мне сделать так, чтобы она узнала, что есть такой класс, и у него есть использованные тобой методы. |
#13
|
||||
|
||||
Может так быть, что всё дело в Delphi XE5?
Если да, то придётся возвращаться к Дельфи 7, по видимому? |
#14
|
||||
|
||||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses WinHTTPComponents; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var WinHttp: TWinHttp; ResponseContent: TFileStream; begin WinHttp:=TWinHttp.Create(Self); ResponseContent:=TFileStream.Create('Project1.html', fmCreate); try WinHttp.Get('https://www.betmarathon.com/su/live/popular', ResponseContent); ShowMessage('Ok'); finally ResponseContent.Free; WinHttp.Free; end; end; end. Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
savage911 (16.08.2015)
|
#15
|
||||
|
||||
Большое спасибо, буду пробовать!
|