C++查询本地天气 VS2005

原创 2013年12月04日 16:38:26

之前看到一篇文章写得很有意思,自己用VS2005尝试着做,发现很多问题尴尬


1、中央气象台API返回的JSON数据(http://m.weather.com.cn/data/101010100.html

2、外网获取IP(http://ip.dnsexit.com/index.php

//3、Sqlite(1中的城市代号利用sqlite3实现查询)

4、C++中GB2312字符串和UTF-8之间的转换(见这篇文章http://blog.csdn.net/lgh1992314/article/details/8579206

5、Jsoncpp(主要是处理1中的数据==见这篇文章http://blog.csdn.net/lgh1992314/article/details/8582179

以上转至http://blog.csdn.net/x_iya/article/details/16834343


http://sourceforge.net/projects/jsoncpp上下载JSon源码,编译得到静态库。

进入jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\makefiles\vs71 打开jsoncpp.sln,右键lib_Json-生成静态库,文件在jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\build\vs71\debug\lib_json文件夹中;

注:右键lib_Json-属性-配置属性-C/C++-代码生成-运行时库-“多线程调试(/MTD)”


接下来建立一个项目来查询天气,暂时只查询本地(深圳天气)未用到Sqlite;

VS2005配置如下:

属性-配置属性-常规-MFC的使用-在静态库中使用MFC
属性-配置属性-常规-字符集-使用多字节字符集
属性-配置属性-C/C++-代码生成-运行时库-多线程调试(/MTD)
属性-配置属性-连接器-输入-附加依赖项-json_vc71_libmtd.lib nafxcwd.lib libcmtd.lib


将json_vc71_libmtd.lib库和jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include\下的json文件夹导入当前工程目录,

在头文件中写入#include "json/json.h"

// testJson.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include "json/json.h"
#include <string>
#include <iostream>
#include <afxinet.h>

std::string GetWeb(const char* _pUrl)
{
CInternetSession session("Httpclient");


CHttpFile* pFile = (CHttpFile*)session.OpenURL(_pUrl);


CString csData;
CString csContent;
DWORD dwStatusCode;
pFile->QueryInfoStatusCode(dwStatusCode);
if (dwStatusCode == 200)
{
while (pFile->ReadString(csData))
{
csContent += csData;
}
}
return std::string(csContent);
}


char* UTF8ToGB2312(const char* _p8Data)
{
int nLen = MultiByteToWideChar(CP_UTF8, 0, _p8Data, -1, NULL, 0);//获取UTF-8编码下多字节数据的长度
wchar_t* pw8Dada = new wchar_t[nLen+1];//+1 给‘\0’
MultiByteToWideChar(CP_UTF8, 0, _p8Data, -1, pw8Dada, nLen);//将UTF-8编码下多字节数据转换成UTF-8编码的宽字节数据


nLen = WideCharToMultiByte(CP_ACP, 0, pw8Dada, -1, NULL, 0, NULL, NULL);//获取ANSI编码下宽字节数据的长度
char* pGB2312Data = new char[nLen+1];//此处还有一个释放问题未解决
WideCharToMultiByte(CP_ACP, 0, pw8Dada, -1, pGB2312Data, nLen, NULL, NULL);//将ANSI编码下宽字节数据转换成ANSI编码的多字节数据


if (pw8Dada)
{
delete []pw8Dada;
}
return pGB2312Data;
}


void JsonWeather()
{
std::string str8Dada = GetWeb("http://m.weather.com.cn/data/101280601.html");
    std::string strGB2312Dada(UTF8ToGB2312(str8Dada.c_str()));
Json::Value Weather;
Json::Reader reader;
reader.parse(strGB2312Dada, Weather);


std::cout<<Weather["weatherinfo"]["city"]<<std::endl;
    std::cout<<Weather["weatherinfo"]["date_y"]<<std::endl;
std::cout<<Weather["weatherinfo"]["week"]<<std::endl;
std::cout<<Weather["weatherinfo"]["cityid"]<<std::endl;
std::cout<<Weather["weatherinfo"]["temp1"]<<std::endl;




}


int _tmain(int argc, _TCHAR* argv[])
{

JsonWeather();
getchar();
return 0;
}




C++获取天气信息

C/C++获取天气,用套接字对HTML进行处理
  • Skying_
  • Skying_
  • 2017年10月08日 14:14
  • 499

c++实现查询天气预报

用到的函数、API等 1、中央气象台API返回的JSON数据(http://m.weather.com.cn/data/101010100.html) 2、外网获取IP(http://ip.dnsex...
  • lgh1992314
  • lgh1992314
  • 2013年02月16日 15:51
  • 3105

vc 调用webservice

snoap下载地址  https://sourceforge.net/projects/gsoap2/?source=typ_redirect 新建vc工程并添加源文件 ./snoap/bin/wi...
  • mp295345033
  • mp295345033
  • 2016年05月23日 14:39
  • 719

c++实现查询天气预报

原地址:http://blog.csdn.net/x_iya/article/details/8583015 用到的函数、API等 1、中央气象台API返回的JSON数据(http...
  • zqf_office
  • zqf_office
  • 2013年11月21日 23:24
  • 6886

vc调用webservice获取天气预报

vc调用webservice步骤: arrayofsting   getWeatherbyCityName(string cityname)函数原型 1:#import      using name...
  • fanzhe2008
  • fanzhe2008
  • 2009年09月09日 15:08
  • 2758

VC++调用天气预报Web services方法

首先需要下载gsoap_2.8.14.zip工具,该工具的主要作用是将服务提供者的WSDL(Web Service描述语言)转化为C++头文件和源文件。 1、生成头文件 使用wsdl2h命令生成头文件...
  • cabmail
  • cabmail
  • 2015年06月28日 13:26
  • 467

VC++6.0实现WebService调用(查询天气)

  • 2009年09月21日 21:45
  • 125KB
  • 下载

VC++调用天气预报Web services方法总结

  • 2015年06月28日 13:29
  • 1.14MB
  • 下载

利用C++调用天气webservice-gSOAP方法

首先需要下载一个gSOAP工具包 下载路径为:https://sourceforge.net/projects/gsoap2/ 至于有关于gSOAP的一些用法和包含的文件的说明可从官网查看:http...
  • zcp0415
  • zcp0415
  • 2016年02月19日 11:28
  • 1551

vc6.0调用webservice天气

首先应该安装soap toolkit3.0 http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=13456 运行...
  • fuyanzhi1234
  • fuyanzhi1234
  • 2011年08月31日 15:51
  • 1941
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++查询本地天气 VS2005
举报原因:
原因补充:

(最多只允许输入30个字)