php微信调用天气api,微信公众号接口开发--snoweek测试
注意:
前期的準備工作,我是參照的微信公眾平臺開發入門教程,我自己認為講解的還是很詳細的。
對于將要使用的天氣接口,我是在聚合數據里找的。
完整的代碼,可以前往我的github中,weixin_kaifa中download。
snoweek測試是一個基于php開發的微信公眾號,最初的目標是做成一個校園公眾號,可以完成以下功能 :
查詢學生成績:回復成績,會返回一個包含成績結果的鏈接
查詢城市天氣:回復天氣加城市,會返回當前天氣實況,相關天氣指數,未來幾天天氣預報
查詢當前時間:回復時間,則返回當前時間
發送一張圖片,識別后返回信息"你發送了一張圖片"
回復天氣,返回"請按提示輸入【天氣查詢】請輸入天氣加城市;如:天氣北京"
回復此公眾號還未實現的功能,則會返回"抱歉,還未提供此功能。
項目結構
index.php:微信接口文件
weather.php:天氣預報接口文件
grade_functions.php:學生查詢成績時,需要用到的相關函數
數據庫user表信息
user
CREATE TABLE `user` (
`user_id` mediumint(9) NOT NULL AUTO_INCREMENT,
`open_id` varchar(30) NOT NULL,
`student_id` varchar(12) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
表user包含三列,user_id記錄用戶綁定學號的順序,同時用作主鍵;open_id記錄用戶在此公眾號下唯一標識;student_id記錄學生的學號。
grade_list
CREATE TABLE `grade_list` (
`grade_id` mediumint(9) NOT NULL,
`course` text NOT NULL,
`grade` int(11) NOT NULL,
`student_id` varchar(12) NOT NULL,
PRIMARY KEY (`grade_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
表grade_list包含四列,grade_id用于記錄成績的條數;course用于記錄課程名稱;
grade記錄成績;student_id記錄學生的學號。兩個表之間以student_id來連接。
功能詳細介紹
查詢學生成績
若用戶還未綁定學號,則返回提示信息:"對不起,你還沒有綁定學號,請輸入成績加學好;如:成績199434040086"。
check_user()函數
function check_user($submit_open_id){
$db=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
$dbc=mysql_select_db(SAE_MYSQL_DB, $db);
$q="select student_id from user where open_id='$submit_open_id'";
$r=mysql_query($q);
if(mysql_num_rows($r)==1){
while($user=mysql_fetch_array($r)){
$result=$user['student_id'];
}
}else{
$result=0;
}
return $result;
}
此函數通過發送者帳號$open_id在user表中進行查詢。
若用戶已綁定學號,但grade_list表中沒有其學生信息,則返回提示信息:"你沒有成績記錄"。
若用戶已綁定學號,且grade_list表中有其成績信息,則返回一個鏈接,學生通過點擊該鏈接查詢自己的成績。
search_grade()
function search_grade($submit_student_id){
$db=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
$dbc=mysql_select_db(SAE_MYSQL_DB, $db);
$q="select course,grade from grade_list where student_id='$submit_student_id'";
$r=mysql_query($q);
$grade_list=array();
if(mysql_num_rows($r)!=0){
while($g=mysql_fetch_array($r)){
$grade=array();
$grade['course']=$g['course'];
$grade['grade']=$g['grade'];
$grade_list[]=$grade;
}
$result=$grade_list;
}else{
$result=0;
}
return $result;
}
若用戶進行綁定學號行為,即輸入成績加學號
function insert_user($submit_open_id,$submit_student_id){
$db=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
$dbc=mysql_select_db(SAE_MYSQL_DB, $db);
$q="insert into user(open_id,student_id)values('$submit_open_id','$submit_student_id')";
$r=mysql_query($q);
$rows=mysql_affected_rows();
return $rows;
}
用戶可以對學號進行解綁,即輸入“解綁即可”
function delete_user($submit_open_id){
$db=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
$dbc=mysql_select_db(SAE_MYSQL_DB, $db);
$q="delete from user where open_id='$submit_open_id'";
$r=mysql_query($q);
$rows=mysql_affected_rows();
return $rows;
}
查詢城市天氣:回復天氣加城市,會返回當前天氣實況,相關天氣指數,未來幾天天氣預報
直接在聚合函數里找的天氣接口,weather.php里包含多種查詢天氣的函數。
調用天氣接口的代碼如下:
include 'weather.php'; //引入天氣請求類
$appkey = 'f67769dc51bfad1c06bb09312b873176'; //您申請的天氣查詢appkey
$weather = new weather($appkey);
$cityname=mb_substr($keyword,2,5,'utf-8');
$cityWeatherResult = $weather->getWeather($cityname);
if($cityWeatherResult['error_code'] == 0){
$data = $cityWeatherResult['result'];
$msgType = "text";
$contentStr = "==當前天氣實況==\n溫度:".$data['sk']['temp']."\n"."風向:".$data['sk']['wind_direction']."(".$data['sk']['wind_strength'].")"."\n濕度:".$data['sk']['humidity'];
$contentStr.="\n\n==相關天氣指數=======\n"."穿衣指數:".$data['today']['dressing_index']." , ".$data['today']['dressing_advice'];
$contentStr.="\n\n==未來幾天天氣預報==\n";
foreach($data['future'] as $wkey =>$f){
$contentStr.="日期:".$f['date']." ".$f['week']." ".$f['weather']." ".$f['temperature']."\n";
}
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
$msgType = "text";
$contentStr = "【".$cityname."】".$cityWeatherResult['reason'].",請確保城市信息輸入有效";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
查詢當前時間
$msgType = "text";
$contentStr = date("Y-m-d H:i:s",time());
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
發送一張圖片
if($msgtype=="image"){
$msgType = "text";
$contentStr = "你發送了一張圖片";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
回復此公眾號還未實現的功能
$msgType = "text";
$contentStr = "【".$keyword."】抱歉,還未提供此功能。";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
總結
以上是生活随笔為你收集整理的php微信调用天气api,微信公众号接口开发--snoweek测试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7-3 IP地址转换分数 20
- 下一篇: 动态规划算法php,php算法学习之动态