**
delphi7读取聚合数据平台免费提供的天气数据(json格式)
1、在聚合数据平台免费申请账号(需要实名认证才能申请免费接口):https://www.juhe.cn/
2、这个是我申请的两个免费API接口(免费接口每天有使用次数限制,所以申请了两个,方便测试)
3、上delphi7的源码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, superobject;
type
TForm1 = class(TForm)
Button1: TButton;
IdHTTP: TIdHTTP;
Label2: TLabel;
Edit1: TEdit;
mmStation: TMemo;
Label1: TLabel;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
function StringToStream(mString : string; var mStream : TStream) : Boolean;
var
I : Integer;
begin
Result := True;
try
mStream.Size := 0;
mStream.Position := 0;
for I := 1 to Length(mString) do
mStream.Write(mString[I] , 1);
except
Result := False;
end;
end;
function HttpEncode(S:AnsiString):string;
var
P:^Byte;
I:Cardinal;
begin
Result:='';
P:=@S[1];
Result:=Format('%%%x',[Ord(P^)]);
for I := 1 to Length(S)-1 do
begin
Inc(P);
Result:=Format('%s%%%x',[Result,Ord(P^)]);
end;
end;
var
i: Integer;
Response: string;
vJson: ISuperObject;
Request: TStrings;
sKey,sCity: string;
tt: TSuperArray;
begin
//汉字转换为网络编码传输
sKey := Trim(Edit1.Text);
sCity := HttpEncode(AnsiToUtf8(Edit2.Text));
//********************
// http://apis.juhe.cn/simpleWeather/query 是聚合数据平台的天气预报的查询接口
// key和city是json格式要求传入的参数,其中key是平台分配申请接口后分配的
//********************
sCity := 'http://apis.juhe.cn/simpleWeather/query?key=' + sKey + '&city=' + sCity;
Response := IdHTTP.Get(sCity);
vJson := SO(utf8decode(Response));
mmStation.Lines.Clear;
mmStation.Lines.Add('=================返回参数如下=================');
mmStation.Lines.Add('error_code=' + inttostr(vJson['error_code'].AsInteger));
mmStation.Lines.Add('reason=' + vJson['reason'].AsString);
mmStation.Lines.Add(' city=' + vJson.O['result'].S['city']);
mmStation.Lines.Add('今天的天气:');
mmStation.Lines.Add(' info=' + vJson.O['result'].O['realtime'].S['info']);
mmStation.Lines.Add(' 温度=' + vJson.O['result'].O['realtime'].S['temperature']);
mmStation.Lines.Add(' 湿度=' + vJson.O['result'].O['realtime'].S['humidity']);
mmStation.Lines.Add(' 风向=' + vJson.O['result'].O['realtime'].S['direct']);
mmStation.Lines.Add(' 风力=' + vJson.O['result'].O['realtime'].S['power']);
mmStation.Lines.Add(' 空气质量指数=' + vJson.O['result'].O['realtime'].S['aqi']);
mmStation.Lines.Add('近5天天气情况的天气情况:');
tt := vJson.O['result'].O['future'].AsArray;
for i := 0 to tt.Length - 1 do
begin
mmStation.Lines.Add(IntToStr(i + 1) + '、date=' + tt.O[i].S['date'] + ',direct=' + tt.O[i].S['direct'] + ',temperature=' + tt.O[i].S['temperature'] + ',weather=' + tt.O[i].S['weather']);
end;
end;
end.
4、注意,需要引用spuerobject单元文件
5、我上传了一个完整的源码demo,可参考:delphi+聚合数据_天气数据_json.rar