- Регистрация
- 9 Май 2015
- Сообщения
- 1,562
- Баллы
- 155
Часто мы сталкиваемся с ситуациями, когда в программе используются не статические данные, а постоянно изменяющиеся. Откуда взять эту информацию?- спросите вы. Конечно же из сети! Но тут встает вопрос:"Как достать данные с сайта?". Вы открываете вожделенную страничку и видите на ней нужную информацию, но как получить ее для своей программы - не знаете.
Мы рассмотрим этот вопрос на простейшем примере получения данных о температуре г.Москва с "Яндекс погоды".
Для начала нам нужно получить html код страницы(благо Delphi позволяет), и сделаем мы это с помощью компонентов:1.button 2.idHTTP(indyclients) 3.memo
Свойство Handleredirects компонента idHTTP нужно перевести в положение true. Далее, напишем код для кнопки:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add((IdHTTP1.get('http://pogoda.yandex.ru/moscow?ncrnd=7940')));//записываем html в мемо для дальнейшей работы
end;
Открываем наш сайт , тыкаем правой кнопкой мыши на погоду сейчас "0°C"(нужную нам информацию) и выбираем "Просмотр кода элемента".
Далее видим строчку кода, содержащую нужные для нас 0°C:
<div class="b-thermometer__now"> - эту часть копируем в буфер обмена, так как именно ее мы и будем искать в memo для извлечения информации.
"Необходимый кусок кода" найден, возвращаемся к нашей программе.
Кидаем на форму еще одну кнопку и компонент Label(в него выведем температуру). Код новой кнопки:
Код:
procedure TForm1.Button2Click(Sender: TObject);
var tag,tnow,Cels:integer;//переменные для поиска
wether:string;//переменная в которой будет содержаться строка с температурой
begin
Tag:=Pos('<div class="b-thermometer__now">', Memo1.Text);//ищем вхождение строки с температурой в нашем memo
if Tag>0 then wether:=Copy(Memo1.Text,Tag,40);//копируем строку <div class="b-thermometer__now">0 °C</div> в переменную
tnow:=pos('>',wether);//этими двумя строками мы определяем с какого по какой символ переменной
cels:=pos('°C',wether);//копировать погоду. От знака '>' до "°C"
if tnow>0 then label1.caption:=copy(wether,tnow+1,cels-tnow+1);//копируем данные из нашей переменной
end;