现在的位置: 首页 > 综合 > 正文

基于百度搜索开放平台的天气查询

2012年11月30日 ⁄ 综合 ⁄ 共 3403字 ⁄ 字号 评论关闭

思路: 利用百度搜索开放平台,简单分析百度搜索URL参数,请求查询页面,再利用正则表达式,提取相关内容实现。

效果如下: 

protected void On_Submit(object sender, EventArgs e)
    {
        
string city = Request.Params["txtcity"].ToString();
        
string tqyb = "天气预报";
        tqyb = HttpUtility.UrlEncode(tqyb, System.Text.Encoding.GetEncoding("gb2312"));
        city = HttpUtility.UrlEncode(city, System.Text.Encoding.GetEncoding("gb2312"));
        
string url = string.Format("http://www.baidu.com/s?bs={0}+{1}f=8&wd={0}+{1}", tqyb, city);
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("GB2312"));
        
string html = reader.ReadToEnd();
        
string pattern = "<\\s*TABLE cellspacing=\"0\" cellpadding=\"0\" class=\"al_wt\">([\\s\\S]*?)<\\s*\\/TABLE\\s*>";
        Regex reg = new Regex(pattern, RegexOptions.IgnoreCase);
        MatchCollection item = reg.Matches(html);
        
foreach (Match m in item)
        {
            html = m.Value;
        }
        Div_html.InnerHtml = html;
    }

 当city为空时,查询是你所在城市的天气,你所在城市计算方法应该是根据你的机子的IP来算的,这个具体百度是怎么做的,还有待研究。

 百度搜索用的是GB2312编码,所以利用HttpUtility.UrlEncode要做一个简单转换。

 代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title>天气预报</title>
    
<style type="text/css">
        .al_wt
        
{
            margin-top
: 5px;
        
}
        .al_wt td
        
{
            font-size
: 14px;
            line-height
: 22px;
            text-align
: center;
            vertical-align
: top;
        
}
        .al_wt td img
        
{
            margin
: 5px 0;
            width
: 48px;
            height
: 48px;
            border
: none;
        
}
        .al_wt td img.al_il
        
{
            margin-right
: 10px;
        
}
        .al_wt td span
        
{
            font-size
: 13px;
        
}
        .al_wt td div
        
{
            text-align
: center;
            padding
: 0 5px;
            white-space
: nowrap;
        
}
        .al_wt .altime_special
        
{
            white-space
: nowrap;
        
}
        .al_wt .altemp_special
        
{
            font-size
: 15px;
            white-space
: nowrap;
        
}
        .al_wt .altd_normal strong
        
{
            font-weight
: normal;
            font-size
: 14px;
        
}
        .al_wt .altd_normal .altime_special, .al_wt .altd_normal .altemp_special
        
{
            white-space
: normal;
        
}
        .al_wt td.al_tr
        
{
            padding-right
: 20px;
        
}
        .al_wt td.al_tl
        
{
            padding-left
: 20px;
            border-left
: 1px solid #e2e9fc;
        
}
        .al_wlink
        
{
            font-size
: 12px;
            color
: #666;
            padding
: 5px 0;
            line-height
: 20px;
        
}
        .al_wlink a
        
{
            color
: #77c;
            margin
: 0 5px;
        
}
    
</style>
</head>
<body>
    
<form id="form1" runat="server">
    
<div>
        城市:
        
<input type="text" id="txtcity" runat="server" />
        
<input type="button" runat="server" id="Submit" value="查 询" onserverclick="On_Submit" />
    
</div>
    
<div id="Div_html" runat="server">
    
</div>
    
</form>
</body>
</html>

 

 

 

 

抱歉!评论已关闭.