zoukankan      html  css  js  c++  java
  • 微信公众平台消息接口开发(3)

    转自:微信公众平台消息接口开发(3)

    上面那篇讲了翻译宝宝,调用有道翻译的接口,现在开发天气宝宝,调用的接口是中国气象网的,这个返回给用户的信息是图文信息。

    效果如下:

    豌豆荚截图20130319003400

    先了解下中国气象网的api,其实只是一条url,即http://m.weather.com.cn/data/城市代码.html,如http://m.weather.com.cn/data/101280101.html,其中的101280101是城市代码,可以在浏览器输入这条url,看看返回什么数据。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    {
     "weatherinfo": {
     "city": "广州",
     "city_en": "guangzhou",
     "date_y": "2013年2月27日",
     "date": "",
     "week": "星期三",
     "fchh": "11",
     "cityid": "101280101",
     <!-- 从今天开始到第六天的每天的天气情况,这里的温度是摄氏温度 -->
     "temp1": "25℃~19℃",
     "temp2": "24℃~19℃",
     "temp3": "25℃~13℃",
     "temp4": "22℃~11℃",
     "temp5": "16℃~9℃",
     "temp6": "20℃~11℃",
     <!-- 从今天开始到第六天的每天的天气情况,这里的温度是华氏温度 -->
     "tempF1": "77℉~66.2℉",
     "tempF2": "75.2℉~66.2℉",
     "tempF3": "77℉~55.4℉",
     "tempF4": "71.6℉~51.8℉",
     "tempF5": "60.8℉~48.2℉",
     "tempF6": "68℉~51.8℉",
     <!-- 天气描述 -->
     "weather1": "阴",
     "weather2": "阴",
     "weather3": "阴转小雨",
     "weather4": "小雨",
     "weather5": "阴转晴",
     "weather6": "晴",
     <!-- 天气描述图片序号 -->
     "img1": "2",
     "img2": "99",
     "img3": "2",
     "img4": "99",
     "img5": "2",
     "img6": "7",
     "img7": "7",
     "img8": "99",
     "img9": "2",
     "img10": "0",
     "img11": "0",
     "img12": "99",
     "img_single": "2",
     <!-- 图片名称 -->
     "img_title1": "阴",
     "img_title2": "阴",
     "img_title3": "阴",
     "img_title4": "阴",
     "img_title5": "阴",
     "img_title6": "小雨",
     "img_title7": "小雨",
     "img_title8": "小雨",
     "img_title9": "阴",
     "img_title10": "晴",
     "img_title11": "晴",
     "img_title12": "晴",
     "img_title_single": "阴",
     <!-- 风速描述 -->
     "wind1": "微风",
     "wind2": "微风",
     "wind3": "微风转北风4-5级",
     "wind4": "北风4-5级转3-4级",
     "wind5": "微风",
     "wind6": "微风",
     <!-- 风速级别描述 -->
     "fx1": "微风",
     "fx2": "微风",
     "fl1": "小于3级",
     "fl2": "小于3级",
     "fl3": "小于3级转4-5级",
     "fl4": "4-5级转3-4级",
     "fl5": "小于3级",
     "fl6": "小于3级",
     <!-- 今天穿衣指数 -->
     "index": "舒适",
     "index_d": "建议着长袖T恤、衬衫加单裤等服装。年老体弱者宜着针织长袖衬衫、马甲和长裤。",
     <!-- 48小时穿衣指数 -->
     "index48": "舒适",
     "index48_d": "建议着长袖T恤、衬衫加单裤等服装。年老体弱者宜着针织长袖衬衫、马甲和长裤。",
     <!-- 紫外线及48小时紫外线 -->
     "index_uv": "最弱",
     "index48_uv": "最弱",
     <!-- 洗车 -->
     "index_xc": "较适宜",
     <!-- 旅游 -->
     "index_tr": "适宜",
     <!-- 舒适指数 -->
     "index_co": "舒适",
     "st1": "26",
     "st2": "18",
     "st3": "25",
     "st4": "18",
     "st5": "26",
     "st6": "9",
     <!-- 晨练 -->
     "index_cl": "较适宜",
     <!-- 晾晒 -->
     "index_ls": "不太适宜",
     <!-- 过敏 -->
     "index_ag": "极不易发"
     }
     }

    返回的是json格式的数据,至少返回的数据是什么意思,我也已注明。

    在根目录下建立一个weather_code.php文件,里面主要是存储各城市的城市名和对应的城市代码,是一个数组,下面只显示部分数据:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!--?php $weather_code = array(     '北京' =--> 101010100,
        '重庆' => 101040100,
        '上海' => 101020100,
        '天津' => 101030100,
        '澳门' => 101330101,
        '香港' => 101320101,
        '合肥' => 101220101,
        '蚌埠' => 101220201,
        '芜湖' => 101220301,
        '淮南' => 101220401,
        '马鞍山' => 101220501,
        '安庆' => 101220601,
        '宿州' => 101220701
    );

    在index.php文件里,新建一个获取天气信息的方法,如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    /**
     * getWeather
     * @param $keyword
     * @return unknown
     */
    function getWeather($keyword) {
        include 'weather_code.php';
        $code=$weather_code[$keyword];
        $url="http://m.weather.com.cn/data/".$code.".html";
     
        $file=file_get_contents($url);
        $obj=json_decode($file);
        $weatherinfo = $obj -> weatherinfo;
        $city = $weatherinfo -> city;
        $temp1=$weatherinfo->temp1;
        $temp2=$weatherinfo->temp2;
        $temp3=$weatherinfo->temp3;
        $img1=$weatherinfo->img1;
        $img2=$weatherinfo->img3;
        $img3=$weatherinfo->img5;
        $weather1=$weatherinfo->weather1;
        $weather2=$weatherinfo->weather2;
        $weather3=$weatherinfo->weather3;
        $wind1=$weatherinfo->wind1;
        $wind2=$weatherinfo->wind2;
        $wind3=$weatherinfo->wind3;
        $index=$weatherinfo->index;
        $index_d=$weatherinfo->index_d;
        $date_y=$weatherinfo->date_y;
        $week=$weatherinfo->week;
        $array = array(
                array("title"=>$city."  ".$week."  ".$temp1."  ".$weather1,"des"=>"testdes","pic"=>"http://api.itcreating.com/weather/image.jpg"),
                array("title"=>$index_d,"des"=>"testdes"),
                array("title"=>date("Y年m月d日")."  ".$temp1."  ".$weather1."  ".$wind1,"des"=>"testdes","pic"=>"http://api.itcreating.com/weather/images/".$img1.".png"),
                array("title"=>date("Y年m月d日",strtotime("+1 day"))."  ".$temp2."  ".$weather2."  ".$wind2,"des"=>"testdes","pic"=>"http://api.itcreating.com/weather/images/".$img2.".png"),
                array("title"=>date("Y年m月d日",strtotime("+2 day"))."  ".$temp3."  ".$weather3."  ".$wind3,"des"=>"testdes","pic"=>"http://api.itcreating.com/weather/images/".$img3.".png"),
     
        );
        return $array;
    }

    这方法很简单,通过传入城市名,然后获取该城市的城市代码,接着通过中国气象网api发送请求,再将中国气象网返回的数据通过PHP的JSON解析函数json_decode将JSON格式的数据解析为PHP的关联数组,最后将我们需要的信息取出来再封装成数组。

    注释掉$wechatObj->responseMsg();

    在$wechatObj->responseMsg()下面加入$wechatObj->responseImgMsg();并新建一个responseImgMsg方法,如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    public function responseImgMsg()
        {
            //get post data, May be due to the different environments
            $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
            //extract post data
            if (!empty($postStr)){
                $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
                $textHaderTpl = "
                        <![CDATA[%s]]>
                        <![CDATA[%s]]>
                        %s
                        <![CDATA[news]]>
     
                        %d
     
                        ";
                $textContentTpl = "
    <![CDATA[%s]]>
                        <![CDATA[%s]]>
                        <![CDATA[%s]]>
                        <![CDATA[%s]]>
     
                        ";
                $textFooterTpl = "
     
                        1
     
                        ";
                if(!empty( $keyword ))
                {
                    $msgType = "news";
                    // 判断是否首次关注
                    if ( $keyword == "Hello2BizUser" ) {
     
                    }else {
                        $array = getWeather($keyword);
                        $resultHaderStr = sprintf($textHaderTpl, $fromUsername, $toUsername, $time, count($array));
                        foreach ($array as $key => $value) {
                            $resultContentStr .= sprintf($textContentTpl, $value['title'], $value['des'], $value['pic'], $value['url']);
                        }
                        $resultFooterStr = sprintf($textFooterTpl);
                        echo $resultStr = $resultHaderStr,$resultContentStr,$resultFooterStr;
                    }
                }else{
                    echo "Input something...";
                }
            }else {
                echo "";
                exit;
            }
        }

    要返回图文消息的,就要使用数组这种方式将将消息输出。
    源码已在github上托管,可以上去下载,地址:https://github.com/hxxy2003/Weather-weixin

     欢迎关注天气宝宝和翻译宝宝:
    qrcode_for_gh_64423d947dbe_430 qrcode_for_gh_9bf953886ba5_430
  • 相关阅读:
    sql server将多条数据,通过指定列拼接成一条数据
    sql server游标demo
    C# 使用HttpCilent请求接口,传递表单数据(可上传图片)
    sql server 把日期时间类型 转为字符串
    Http请求失败,获取返回状态码和消息
    url
    解决基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。
    MD5 加密
    C# 读取txt文件内容
    微信小程序 图片转为base64
  • 原文地址:https://www.cnblogs.com/hxxy2003/p/2970535.html
Copyright © 2011-2022 走看看