這個API是第三方API,第三方API的工作原理大都基于此,本文主要起一反三之作用,代碼的不處周之還望及時指出。
開發環境:WinServer2012 + php7.0 + Apache2.4.8
思路:向官方查詢界面傳遞參數,使用curl抓取結果網頁,分析網頁取出關鍵數據,將關鍵數據規則化后返回。
基本思路
抓取網址:http://www.chsi.com.cn/cet/ 通過顯式傳參方式傳遞姓名,學號等信息。
關鍵代碼:
curl會話
初始化一個curl會話,訪問請求的網址(保存在變量$_url中),獲取網頁源代碼后關閉會話,其中第三行代碼作用為偽造訪問來路,防止傳參失敗。
運行成功后$contents內容為網頁源代碼,若第四行代碼參數為FALSE則直接將網頁源碼抓取后顯示,TRUE為不顯示(此處不顯示,做數據分析用)。
使用正則表達式抓取數據,查詢成功時頁面會顯示相應學校,成績,個人信息等。查詢失敗時會顯示姓名錯誤或者考號長度有問題等,根據不同的關鍵字使用正則表達式抓取關鍵數據。
正則表達式
preg_match_all使用方法:參數1:正則表達式,參數2:目標字符串,參數3:匹配結果。將contents變量中的匹配結果保存在type變量中。
每次匹配后檢測type變量值,以判斷查詢是否成功。以及決定各種狀態的返回代碼。
錯誤碼返回示例
其余的錯誤碼返回方式如下:
參數檢測的錯誤碼返回
錯誤信息處理,返回Json格式打包后的錯誤代碼以及錯誤信息(字符串數組為對象格式)
strip_tags($array); 去掉變量array中的HTML標簽,此處的作用為去掉正則表達式匹配后遺留下來的標簽等
trim($array); 去掉變量array兩邊的空白符
使用strip_tags去掉正則表達式匹配結果中的html標簽,然后用trim去掉結果兩邊的空格,最后將數組打包并轉化為對象,然后轉化為Json格式后輸出。
$arr_return=(object)array((object)array(0,"success"),(object)array(trim(strip_tags($type_1[0][0])),trim(strip_tags($type_1[0][1])),trim(strip_tags($type_1[0][2])),trim(strip_tags($type_1[0][4]))),(object)array(trim(strip_tags($type_2[0][1])),trim(strip_tags($type_2[0][2])),trim(strip_tags($type_2[0][3]))));
打包格式如上,使用二維數組,第一維中放返回碼及查詢狀態,第二維中放返回的各種信息等。若查詢失敗則第一維中放返回碼以及查詢狀態,第二維為空。