Delphi天气预报查询

简介:

   现在的很多软件中都内置了天气查看这个功能!其实呢,这个功能的实现并不麻烦!会上网的人,都会查天气情况!其实那些内置天气预报功能的软件的天气预报功能也都是来源于网上!因为也没有哪个软件公司会自己去架一个气象站了哈哈,现在我就来说说如何通过互联网上的信息来获取天气情况!

  目前能查询天气的网站有不少,比较有名的有中国天气网与Google天气,大部分站点与大部分软件的天气预报数据也都是来源于中国天气网!因为中国天气网是中国气象局相关的,所以他的数据会更准确一些!查阅本文信息时,假设读者熟悉http协议与如何模拟网页提交等知识!

  中国天气网有一个连接http://m.weather.com.cn/data/+‘城市编码.html',这个连接可以获取对应的城市的天气情况!返回Json数据,解析Json就能获得该城市的天气!这个问题就在那个城市编码的获取方式上,这个获取方式,网上有代码的!我就不写了,我是直接将城市编码都包到资源文件中去了使用的时候,直接从资源加载就行了!获得天气的Json数据,用的事Http协议,这里只要用可以提交http的数据的控件或者类都可以(比如,indy的idhttp,ics的http控件都行,也可以使用MSxml的IXMLHttpRequest,也可以使用HttpRequest5.1或者使用WinHttp控件),这里我用的事最简单的方式,就用了Delphi直接带的indy的idhttp来获得,详细代码:

复制代码
 
 
unit Unit4;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,msxml,uLkJSON, ExtCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdHTTP;

type
TComboBox
= class (StdCtrls.TComboBox)
private
Values: TStringList;
public
constructor Create(AOwner: TComponent); override ;
destructor Destroy; override ;
procedure LoadFromFile(Filename: string );
procedure LoadFromRes(ResName: string );
end ;

TForm4
= class (TForm)
Memo1: TMemo;
Panel1: TPanel;
ComboBox1: TComboBox;
Button1: TButton;
IdHTTP1: TIdHTTP;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function pro_result(str: string ): string ;
public
{ Public declarations }
List: TStringList;
HttpReq: IXMLHttpRequest;
end ;

var
Form4: TForm4;

implementation
uses DateUtils;

{ $R *.dfm }
{ $R mm.RES }

procedure TForm4.Button1Click(Sender: TObject);
var
url:
string ;
Json: TlkJSONobject;
ChildJson,tmpJson: TlkJSONbase;
begin
url :
= ' http://m.weather.com.cn/data/ ' + Combobox1.Values.ValueFromIndex[ComboBox1.ItemIndex] + ' .html ' ;
HttpReq.open(
' Get ' , Url, False, EmptyParam, EmptyParam);
HttpReq.send(EmptyParam);
// 开始搜索
Url :
= HttpReq.responseText;
Json :
= Tlkjson.ParseText(url) as TlkJSONobject;
ChildJson :
= Json.Field[ ' weatherinfo ' ];
Memo1.Lines.Clear;
if ChildJson.SelfType = jsObject then
begin
// Showmessage(ChildJson.Field[ ' city ' ].Value);
Memo1.Lines.Add(
' 今日天气( ' + Vartostr(ChildJson.Field[ ' date_y ' ].Value) + ' ' + Vartostr(ChildJson.Field[ ' week ' ].Value) + ' ): ' );
Memo1.Lines.Add(
' 温度: ' + Vartostr(ChildJson.Field[ ' temp1 ' ].Value));
Memo1.Lines.Add(
' 天气: ' + Vartostr(ChildJson.Field[ ' weather1 ' ].Value));
// Memo1.Lines.Add( ' 风向: ' + Vartostr(ChildJson.Field[ ' fx1 ' ].Value) + ' ' + Vartostr(ChildJson.Field[ ' wind1 ' ].Value));
Memo1.Lines.Add(
' 风力: ' + Vartostr(ChildJson.Field[ ' wind1 ' ].Value));

Memo1.Lines.Add(
' 明日天气( ' + FormatDateTime( ' YYYY年MM月DD日 ' ,DateUtils.IncDay(now)) + ' ): ' );
Memo1.Lines.Add(
' 温度: ' + Vartostr(ChildJson.Field[ ' temp2 ' ].Value));
Memo1.Lines.Add(
' 天气: ' + Vartostr(ChildJson.Field[ ' weather2 ' ].Value));
// Memo1.Lines.Add( ' 风向: ' + Vartostr(ChildJson.Field[ ' fx2 ' ].Value) + ' ' + Vartostr(ChildJson.Field[ ' wind2 ' ].Value));
Memo1.Lines.Add(
' 风力: ' + Vartostr(ChildJson.Field[ ' wind2 ' ].Value));

Memo1.Lines.Add(FormatDateTime(
' YYYY年MM月DD日 ' ,DateUtils.IncDay(now, 2 )) + ' ' );
Memo1.Lines.Add(
' 温度: ' + Vartostr(ChildJson.Field[ ' temp3 ' ].Value));
Memo1.Lines.Add(
' 天气: ' + Vartostr(ChildJson.Field[ ' weather3 ' ].Value));
// if True then

// Memo1.Lines.Add( ' 风向: ' + Vartostr(ChildJson.Field[ ' fx3 ' ].Value) + ' ' + Vartostr(ChildJson.Field[ ' wind3 ' ].Value));
Memo1.Lines.Add(
' 风力: ' + Vartostr(ChildJson.Field[ ' wind3 ' ].Value));

Memo1.Lines.Add(FormatDateTime(
' YYYY年MM月DD日 ' ,DateUtils.IncDay(now, 3 )) + ' ' );
Memo1.Lines.Add(
' 温度: ' + Vartostr(ChildJson.Field[ ' temp4 ' ].Value));
Memo1.Lines.Add(
' 天气: ' + Vartostr(ChildJson.Field[ ' weather4 ' ].Value));
// Memo1.Lines.Add( ' 风向: ' + Vartostr(ChildJson.Field[ ' fx4 ' ].Value) + ' ' + Vartostr(ChildJson.Field[ ' wind4 ' ].Value));
Memo1.Lines.Add(
' 风力: ' + Vartostr(ChildJson.Field[ ' wind4 ' ].Value));

Memo1.Lines.Add(FormatDateTime(
' YYYY年MM月DD日 ' ,DateUtils.IncDay(now, 4 )) + ' ' );
Memo1.Lines.Add(
' 温度: ' + Vartostr(ChildJson.Field[ ' temp5 ' ].Value));
Memo1.Lines.Add(
' 天气: ' + Vartostr(ChildJson.Field[ ' weather5 ' ].Value));
// Memo1.Lines.Add( ' 风向: ' + Vartostr(ChildJson.Field[ ' fx5 ' ].Value) + ' ' + Vartostr(ChildJson.Field[ ' wind5 ' ].Value));
Memo1.Lines.Add(
' 风力: ' + Vartostr(ChildJson.Field[ ' wind5 ' ].Value));
end ;
end ;

procedure TForm4.FormCreate(Sender: TObject);
var
temp,str_
1 ,str_ 2 : string ;
http1:tidhttp;
i:Integer;
begin
http1:
= tidhttp.create(self);
temp:
= HTTP1.Get( ' http://www.ipseeker.cn ' );
http1.free;
// temp: = Mmo1.Text;
i:
= Pos( ' 查询结果 ' ,temp);
str_
1 : = Copy(temp,i, 254 );
str_
2 : = pro_result(str_ 1 );
// Mmo2.Text: = str_ 2 ;
Caption :
= Trim(str_ 2 );
ComboBox1.LoadFromRes(
' CityCode.Data ' );
i :
= Pos( ' ' ,Caption);
if i <> 0 then
temp :
= copy(Caption,i + 1 ,MaxInt)
else temp : = Caption;
i :
= Pos( ' ' ,temp);
if i <> 0 then
temp :
= copy(temp, 0 ,i - 1 );
ComboBox1.ItemIndex :
= ComboBox1.Items.IndexOf(temp);

HttpReq :
= CoXMLHTTPRequest.Create;
Button1.Click;
end ;

function TForm4.pro_result(str: string ): string ;
var
i_
0 ,i_ 1 :Integer;
temp_result:
string ;
begin
temp_result:
= '' ;
while Pos( ' 查询结果 ' ,str) <> 0 do
begin
i_
1 : = Pos( ' </span> ' ,str);
i_
0 : = Pos( ' 查询结果 ' ,str);
temp_result:
= temp_result + Copy(str,i_ 0 ,i_ 1 - i_ 0 ) + # 13 # 10 ;
Delete(str,
1 ,Pos( ' </span> ' ,str));
end ;
result:
= StringReplace(temp_result, ' &nbsp; ' , '' ,[rfReplaceAll]);
i_
1 : = Pos( ' - ' ,Result);
Result :
= copy(Result,i_ 1 + 1 ,MaxInt);
end ;

{ TComboBox }

constructor TComboBox.Create(AOwner: TComponent);
begin
inherited ;
Values :
= TStringList.Create;
end ;

destructor TComboBox.Destroy;
begin
Values.Free;
inherited ;
end ;

procedure TComboBox.LoadFromFile(Filename: string );
var
i: Integer;
begin
Items.Clear;
Values.LoadFromFile(Filename);
for i : = 0 to Values.Count - 1 do
begin
Items.Add(Values.Names[i]);
end ;
ItemIndex :
= 0 ;
end ;

procedure TComboBox.LoadFromRes(ResName: string );
var
stream: TResourceStream;
i: Integer;
begin
stream :
= TResourceStream.Create(HInstance, ' CityCode ' , ' TxtData ' );
Items.Clear;
Values.LoadFromStream(stream);
for i : = 0 to Values.Count - 1 do
begin
Items.Add(Values.Names[i]);
end ;
ItemIndex :
= 0 ;
stream.Free;
end ;

end .
复制代码


相关文章
|
4天前
|
开发工具
查询天气预报案例
这是一个关于如何查询天气预报的步骤指南,包括五个步骤:找到阿里云的天气服务、购买服务、获取AppCode和秘钥、参考SDK调用接口以及使用Hutool工具进行接口调用。提供了详细的操作截图和接口返回的示例数据。完整文档链接可在文中找到。
22 4
|
9月前
|
JavaScript 前端开发 API
python对接API二次开发高级实战案例解析:百度地图Web服务API封装函数(行政区划区域检索、地理编码、国内天气查询、IP定位、坐标转换)
python对接API二次开发高级实战案例解析:百度地图Web服务API封装函数(行政区划区域检索、地理编码、国内天气查询、IP定位、坐标转换)
222 0
|
10月前
|
缓存 数据可视化 前端开发
教程】天气预报应用集成台风信息功能的探讨
通过本教程,我们探讨了如何将台风信息功能集成到天气预报应用中。通过提供台风信息,我们可以帮助用户更好地了解台风的动态和可能影响的地区,提供更全面的天气信息,帮助用户做出明智的决策。希望本教程对你在开发天气预报应用时集成台风信息功能有所帮助!
126 0
|
11月前
|
机器学习/深度学习 小程序 定位技术
「教程」微信小程序获取地理位置信息自动查询天气预报信息(附详细代码)
「教程」微信小程序获取地理位置信息自动查询天气预报信息(附详细代码)
200 0
|
11月前
|
JSON 搜索推荐 数据挖掘
天气预报查询 API 提供个性化的天气服务的设计思路
假设你是一个开发人员或公司,正在考虑开发一款天气应用程序,但你意识到市场上已经有很多竞争者在使用天气预报查询 API 来提供类似的服务,本文将一起探寻一些创新的方法来提高应用程序的竞争力。
216 0
用免费的webservice查询天气
用免费的webservice查询天气
148 0
用免费的webservice查询天气
|
安全 API
天气预报到底有什么作用?
天气预报是气象台(站)预先发出关于未来一定时期内的天气变化和趋势的报告。气象台运用现代科学技术(如卫星、雷达等)收集了全国甚至全世界的气象资料,根据天气演变规律,进行综合分析,科学判断,然后作出大范围的天气预报。气象站、哨根据大范围天气预报,结合本地区地形、天气特点、群众测天经验,作出单站补充预报。可分为短期、中期和长期预报。
346 0
天气预报到底有什么作用?
|
JSON Java API
HarmonyOS实战—天气类卡片设计(一)
HarmonyOS实战—天气类卡片设计(一)
206 0
HarmonyOS实战—天气类卡片设计(一)
|
JSON JavaScript Java
HarmonyOS实战—天气类卡片设计(二)
HarmonyOS实战—天气类卡片设计(二)
152 0
|
程序员 开发工具 C语言
Qt编写自定义控件44-天气仪表盘
一、前言 天气仪表盘控件是所有控件中唯一一个使用了svg矢量图的控件,各种天气图标采用的矢量图,颜色变换采用动态载入svg的内容更改生成的,其实也可以采用图形字体来做,本次控件为了熟悉下svg在Qt中的使用,才采用的svg来绘制。
1498 0