首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

如何从网上获取天气预报信息

2012-04-14 
怎么从网上获取天气预报信息?如题....[解决办法]去某些提供天气预报服务的站点抓HTML数据,然后回来自己分

怎么从网上获取天气预报信息?
如题....

[解决办法]
去某些提供天气预报服务的站点抓HTML数据,然后回来自己分析呗。
D版不是正好有个推荐的帖子,有个大牛写的天气预报工具,有Delphi源码可参考:
http://topic.csdn.net/u/20100911/10/8f36bbc2-7bbd-423d-81c3-4f114a4d40f4.html
[解决办法]
可通过Webserver方式调取,这个是接口地址http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx
[解决办法]
闲来没事,写了一会儿

现在这种接口挺多

以下代码添加到 妖哥的一个源码上即可使用
http://down.ccrun.com/crnd0wn/136//src/GDIPlusWindow.047057.rar

png 可以从这里找到
http://www.zcool.com.cn/gfx/ZNTEzNjg=.html


C/C++ code
TStringList * Split(AnsiString strString,AnsiString strSpliter){    TStringList *psList = new TStringList();    char *cc = strtok (strString.c_str(),strSpliter.c_str());    psList->Clear();    while(cc != NULL)    {    //执行字符串切割,并将结果填入psList中        psList->Add(AnsiString(cc));        cc = strtok(NULL,",");    }    return psList;}void __fastcall TfrmMain::FormShow(TObject *Sender){    //    GetWeatherInfo("101270101"); //这个101270101是成都的。    if (!weatherMap.empty())    {        if (weatherMap["weather1"] == "雷阵雨")        {            SetTransparent(WideString("01.png"), 100);            Invalidate();        }        if (weatherMap["weather1"] == "多云")        {            SetTransparent(WideString("16.png"), 100);            Invalidate();        }        // 接着写吧。    }}//---------------------------------------void __fastcall TfrmMain::GetWeatherInfo(AnsiString id){    IdHTTP1->Request->AcceptCharSet = "UTF-8";    AnsiString weatherInfoT =  Utf8ToAnsi(IdHTTP1->Get("http://m.weather.com.cn/data/" + id + ".html"));    AnsiString wi = weatherInfoT.SubString(17, weatherInfoT.Length() - 18);    // 这个id不好查,你要去分析 weather上的相关数据    // 用这个更好 http://api.liqwei.com/weather/?city=北京  直接改城市名称    TStringList *sl = Split(wi, ",");    weatherMap.clear();    for(int i = 0; i < sl->Count; i++)    {        TStringList *item = Split(sl->Strings[i], ":");        weatherMap.insert(pair<AnsiString, AnsiString>(item->Strings[0].SubString(2, item->Strings[0].Length() - 2), item->Strings[1].SubString(2, item->Strings[1].Length() - 2)));        delete item;    }    delete sl;}
[解决办法]
在头文件 private:中添加 
C/C++ code
    map<AnsiString, AnsiString> weatherMap;    void __fastcall GetWeatherInfo(AnsiString id = "101270101");
[解决办法]
就是用

TIdHTTP 直接将网页GET回来

而且上面的两个接口都为民着想
就是一堆文本,特别是
http://api.liqwei.com/weather/?city=成都 

很容易就分割开,而且还提供了三天的天气情况。


顺便说一个,现在的天气预报已经成了,天气即时报告。。。 预报功能已经废了。
[解决办法]


BCB2010 从妖哥 GDI+代码修改而来

上图湿度不对我没发现接口,还有很多种天气楼主自己去处理。
代码

热点排行