幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: secondsen

[通用编程] 怎么从一个网站上获取天气预报啊?

[复制链接]

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2012-9-29 20:58:12 | 显示全部楼层
网页代码一直没弄下来。。。我用的是KMP字符串匹配,先估计一下起始的位置,匹配第一个,然后,后边只要加固定的值,再匹配一下就可以了。我用libcurl用的不给力啊,我看教程就是那么整的,我就不成功,是因为我没有编译ssl和zlib的缘故么
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2012-9-30 09:01:17 | 显示全部楼层
与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  很简单的。
え~え~お!!!
回复 支持 反对

使用道具 举报

136

主题

1751

帖子

548

积分

版主

Rank: 7Rank: 7Rank: 7

积分
548
发表于 2012-9-30 09:13:33 | 显示全部楼层
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
え~え~お!!!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
 楼主| 发表于 2012-10-5 18:07:21 | 显示全部楼层
搞好了,我泪流满面啊
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-3-29 07:24 , Processed in 0.016689 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表