2021-07-09

**

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值