社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 道具中心
主题 : 怎么从一个网站上获取天气预报啊?
secondsen 离线
级别: 总版主
显示用户信息 
10  发表于: 2012-09-29   
网页代码一直没弄下来。。。我用的是KMP字符串匹配,先估计一下起始的位置,匹配第一个,然后,后边只要加固定的值,再匹配一下就可以了。我用libcurl用的不给力啊,我看教程就是那么整的,我就不成功,是因为我没有编译ssl和zlib的缘故么
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
拖后腿的人发勋章!
shawind 离线
级别: 分版主
显示用户信息 
11  发表于: 2012-09-30   
与ssl、zlib半毛钱的关系都没有的说
复制代码
  1. #include <string>
  2. #include <fstream>
  3. #include "curl.h"
  4. #pragma comment(lib, "libcurl.lib")
  5. using namespace std;
  6. int writer(char* data, size_t size, size_t nmemb, string* writerData)
  7. {
  8.     size_t sizes =size*nmemb;
  9.     if(writerData == NULL) return 0;
  10.     writerData->append(data, sizes);
  11.     return sizes;
  12. }
  13. int main()
  14. {
  15.     CURL* curl = NULL;
  16.     string buffer;
  17.     curl = curl_easy_init();
  18.     if(curl)
  19.     {
  20.         curl_easy_setopt(curl, CURLOPT_URL, "http://www.weather.com/weather/5-day/CHXX0046");
  21.         curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
  22.         curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
  23.         curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
  24.         curl_easy_perform(curl);
  25.         curl_easy_cleanup(curl);
  26.     }
  27.     if(buffer.size())
  28.     {
  29.         ofstream fout;
  30.         fout.open("temp.html");
  31.         fout << buffer;
  32.         fout << flush;
  33.         fout.close();
  34.     }
  35.     return 0;
  36. }


取到的html文件中,包含有需要的气象信息。只不过默认是华氏温度的。
我也试过加cookie,来自动获取摄氏的温度,不过失败了。
原因可能是,控制切换显示华氏、摄氏的功能是javascript+css来实现的,libcurl对非html都统一无视了。
不过取到华氏也就够了,摄氏度(℃)=(华氏度(℉)-32)÷1.8  很简单的。
え~え~お!!!
shawind 离线
级别: 分版主
显示用户信息 
12  发表于: 2012-09-30   
libcurl是mit风格的开源库, 可以静态编译后嵌入程序,而不需多带一个dll文件。
静态编译也很简单,官方提供的下载都是带dll的,而且还是老版本。
下载新的代码包后,解压,启动msvc的命令行,来到源代码的目录
复制代码
  1. cd winbuild
  2. nmake -f makefile.vc mode=staitc ENABLE_IDN=no

编译好后,就可以在源代码的目录下看到builds目录,编译好的结果就在里面了。
使用时,还要加编译开关/DCURL_STATICLIB,或者干脆手动在curl.h里加上一行#define CURL_STATICLIB
え~え~お!!!
secondsen 离线
级别: 总版主
显示用户信息 
13  发表于: 2012-10-05   
搞好了,我泪流满面啊
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
拖后腿的人发勋章!
描述
快速回复

认证码:

验证问题:
22-5=?,答案:17 正确答案:17
按"Ctrl+Enter"直接提交