procedure TForm1.Button1Click(Sender: TObject);
begin
WeatherQuery('上海');
end;
function TForm1.WeatherQuery(const aCity: string): boolean;
var
url, url1, url2, tmpstr: string;
stream: TStringStream;
stream1: TMemoryStream;
stream2: TMemoryStream;
i: integer;
nodeList: IXMLNodeList;
node: IXMLNode;
num: integer;
begin
fBaiduKey := '74c27c8c6c623cfbe0bc80aa0940038f';
url := IdHTTP1.url.URLEncode
('http://api.map.baidu.com/telematics/v3/weather?location=' + aCity +
'&output=xml&ak=' + fBaiduKey);
stream := TStringStream.Create('', TEncoding.UTF8);
IdHTTP1.HTTPOptions := [hoKeepOrigProtocol];
IdHTTP1.Request.Connection := 'Keep-Alive';
try
IdHTTP1.Get(url, stream);
Result := (stream.Size > 0);
except
on e: exception do
begin
Result := false;
fLastError := '[' + e.ClassName + ']-' + e.Message;
end;
end;
IdHTTP1.Disconnect;
if Result then
begin
tmpstr := stream.DataString;
tmpstr := StringReplace(tmpstr, 'utf-8', 'gb2312', [rfReplaceAll]);
self.XMLDoc.Active := false;
self.XMLDoc.Xml.Text := tmpstr;
self.XMLDoc.Active := true;
nodeList := XMLDoc.DocumentElement.ChildNodes[3].ChildNodes;
num := nodeList.Count;
node := nodeList[1];
for i := 0 to 23 - 1 do
begin
Memo1.Lines.Add(node.ChildNodes.Get(i).Text);
end;
url1 := 'http://api.map.baidu.com/images/weather/day/zhenyu.png';
stream1 := TMemoryStream.Create;
IdHTTP2.HTTPOptions := [hoKeepOrigProtocol];
IdHTTP2.Request.Connection := 'Keep-Alive';
IdHTTP2.Get(url1, stream1);
Image1.Bitmap.LoadFromStream(stream1);
url2 := 'http://api.map.baidu.com/images/weather/night/zhenyu.png';
stream2 := TMemoryStream.Create;
IdHTTP3.HTTPOptions := [hoKeepOrigProtocol];
IdHTTP3.Request.Connection := 'Keep-Alive';
IdHTTP3.Get(url2, stream2);
Image2.Bitmap.LoadFromStream(stream2);
end;
FreeAndNil(stream);
FreeAndNil(stream1);
FreeAndNil(stream2);
end;
end.