Android開發執行個體-高校錄取分數線應用(一),android高校
本系列文章提供簡單Android應用開發執行個體方法,文章步驟如下所示:
1 擷取應用所需的資料來源
資料來源一般來源於互連網、個人搜集或者其他方式
2 應用UI設計
每個應用軟體都需要有一個簡單的UI設計草圖,便於開發人員更好的實現編碼
3 應用實現
實現完整的Android應用
特此說明:本系列文章的資料來源均採用互連網方式擷取,僅作為樣本示範
應用介紹提供各個高校曆屆的分數線錄取查詢功能,作為高考學子填寫志願的參考應用。
一、 找尋資料來源1 首先開啟百度,輸入“高校錄取分數線”進行搜尋,從結果清單中找尋滿足自己應用需求的資料來源,這裡我們選擇第一條資料:高考各省市錄取分數線匯總_新浪高考2 點擊進入後,我們發現中間提供了單獨的高校分數線查詢方塊
3 點擊搜尋進入高校分數線單獨的查詢介面,並擷取到我們想要找尋資料的連結http://kaoshi.edu.sina.com.cn/collegedb/index.php?_action=more&show=more_score&provid=&wl=1&collegeid=10001
二、分析資料源我們通過瀏覽器進行基本的分析,如果需要更加複雜分析,可以利用常用的抓包軟體完成。1 按F12開啟瀏覽器的抓包介面,chrome在netword欄,IE則進入網路欄開啟。2 通過瀏覽器開啟第一步擷取到的連結http://kaoshi.edu.sina.com.cn/collegedb/index.php?_action=more&show=more_score&provid=&wl=1&collegeid=10001,並擷取到抓包資訊如下:
3 通過連結介面,我們知道查詢條件包括省份資訊、學校資訊以及文理科選擇條件。3-1 省份資訊擷取 通過對Html分析,我們發現省份資訊已經存在於網頁中,如下所示:
<select id="provinceSelect"> <option value="1" label="北京" >北京</option> <option value="2" label="天津" >天津</option> <option value="3" label="上海" >上海</option> <option value="4" label="重慶" >重慶</option> <option value="5" label="河北" >河北</option> <option value="6" label="河南" >河南</option> <option value="7" label="山東" >山東</option> <option value="8" label="山西" >山西</option> <option value="9" label="安徽" >安徽</option> <option value="10" label="江西" >江西</option> <option value="11" label="江蘇" >江蘇</option> <option value="12" label="浙江" >浙江</option> <option value="13" label="湖北" >湖北</option> <option value="14" label="湖南" >湖南</option> <option value="15" label="廣東" >廣東</option> <option value="16" label="廣西" >廣西</option> <option value="17" label="雲南" >雲南</option> <option value="18" label="貴州" >貴州</option> <option value="19" label="四川" >四川</option> <option value="20" label="陝西" >陝西</option> <option value="21" label="青海" >青海</option> <option value="22" label="寧夏" >寧夏</option> <option value="23" label="黑龍江" >黑龍江</option> <option value="24" label="吉林" >吉林</option> <option value="25" label="遼寧" >遼寧</option> <option value="26" label="西藏" >西藏</option> <option value="27" label="新疆" >新疆</option> <option value="28" label="內蒙古" >內蒙古</option> <option value="29" label="海南" >海南</option> <option value="30" label="福建" >福建</option> <option value="31" label="甘肅" >甘肅</option> <option value="32" label="港澳台" >港澳台</option> </select>
3-2 文理科選擇文理科選擇資訊與省份資訊一致,存在於Html網頁中
<select id="wl"> <option value="1" selected="selected">文科</option> <option value="2" >理科</option> <option value="3" >綜合</option> </select>
3-3 學校資訊擷取通過分析發現學校資訊不存在與Html網頁中,我們找到JavaScript代碼,發現學校資訊存在於http://kaoshi.edu.sina.com.cn/js/collegelist_prov_index.js中,其資料格式為:school_option_key[1]['10001'] = '北京大學';其中[1]代表省份id,見3-1省份資訊擷取中的value值;['10001']表示學校code碼我們將資料複製到txt中,並通過Ctrl+F系列替換,將學校資訊轉為1#10001#北京大學格式,便於我們解析使用。最終的學校資料儲存格式如下:1#10001#北京大學
1#10002#中國人民大學
1#10003#清華大學
1#10004#北京交通大學
3-4擷取查詢結果的連結通過抓包分析,我們擷取到實際查詢的地址:http://kaoshi.edu.sina.com.cn/iframe/i_collegescore.php?_action=collegescore&provid=1&collegeid=10001&wl=2&num=0
其中三個重要參數:provid表示省份ID,collegeid表示學校ID,wl表示文理科選擇。
3-5 結果分析
3-4返回的結果為JSON格式,如下所示:
[{"id":"14847","collegeid":"10001","provid":"19","syear":"2013","wl":"2","plan":"19","score_min":"0.00","score_avg":"678.00","score_td":"0.00","score_max":"694.00","batch":"11","batch_diff":"116"},{"id":"13183","collegeid":"10001","provid":"19","syear":"2012","wl":"2","plan":"14","score_min":"640.00","score_avg":"644.00","score_td":"0.00","score_max":"655.00","batch":"11","batch_diff":"126"},{"id":"12455","collegeid":"10001","provid":"19","syear":"2011","wl":"2","plan":"25","score_min":"633.00","score_avg":"651.00","score_td":"0.00","score_max":"690.00","batch":"11","batch_diff":"132"},{"id":"10762","collegeid":"10001","provid":"19","syear":"2010","wl":"2","plan":"25","score_min":"0.00","score_avg":"633.00","score_td":"0.00","score_max":"650.00","batch":"11","batch_diff":"121"},{"id":"8360","collegeid":"10001","provid":"19","syear":"2009","wl":"2","plan":"27","score_min":"623.00","score_avg":"637.00","score_td":"0.00","score_max":"670.00","batch":"11","batch_diff":"139"},{"id":"8359","collegeid":"10001","provid":"19","syear":"2009","wl":"2","plan":"3","score_min":"616.00","score_avg":"618.00","score_td":"0.00","score_max":"620.00","batch":"01","batch_diff":""},{"id":"5693","collegeid":"10001","provid":"19","syear":"2008","wl":"2","plan":"41","score_min":"699.00","score_avg":"703.00","score_td":"0.00","score_max":"737.00","batch":"11","batch_diff":"110"},{"id":"5692","collegeid":"10001","provid":"19","syear":"2008","wl":"2","plan":"2","score_min":"697.00","score_avg":"697.00","score_td":"0.00","score_max":"697.00","batch":"01","batch_diff":""},{"id":"5242","collegeid":"10001","provid":"19","syear":"2007","wl":"2","plan":"53","score_min":"553.00","score_avg":"659.00","score_td":"0.00","score_max":"689.00","batch":"11","batch_diff":"127"},{"id":"2841","collegeid":"10001","provid":"19","syear":"2007","wl":"2","plan":"3","score_min":"656.00","score_avg":"657.00","score_td":"0.00","score_max":"661.00","batch":"01","batch_diff":""},{"id":"5305","collegeid":"10001","provid":"19","syear":"2006","wl":"2","plan":"52","score_min":"656.00","score_avg":"674.00","score_td":"0.00","score_max":"701.00","batch":"11","batch_diff":"114"},{"id":"987","collegeid":"10001","provid":"19","syear":"2006","wl":"2","plan":"3","score_min":"670.00","score_avg":"670.00","score_td":"0.00","score_max":"671.00","batch":"01","batch_diff":""},{"id":"2","collegeid":"10001","provid":"19","syear":"2005","wl":"2","plan":"57","score_min":"614.00","score_avg":"698.00","score_td":"0.00","score_max":"731.00","batch":"11","batch_diff":"103"},{"id":"5274","collegeid":"10001","provid":"19","syear":"2005","wl":"2","plan":"12","score_min":"692.00","score_avg":"695.00","score_td":"0.00","score_max":"697.00","batch":"01","batch_diff":""},{"id":"4788","collegeid":"10001","provid":"19","syear":"2004","wl":"2","plan":"0","score_min":"665.00","score_avg":"0.00","score_td":"0.00","score_max":"0.00","batch":"00","batch_diff":""},{"id":"4384","collegeid":"10001","provid":"19","syear":"2003","wl":"2","plan":"0","score_min":"604.00","score_avg":"0.00","score_td":"0.00","score_max":"0.00","batch":"00","batch_diff":""},{"id":"4009","collegeid":"10001","provid":"19","syear":"2002","wl":"2","plan":"0","score_min":"664.00","score_avg":"0.00","score_td":"0.00","score_max":"0.00","batch":"00","batch_diff":""},{"id":"3562","collegeid":"10001","provid":"19","syear":"2001","wl":"2","plan":"0","score_min":"0.00","score_avg":"652.00","score_td":"0.00","score_max":"0.00","batch":"00","batch_diff":""}]通過與實際展示的表格資訊確定各個欄位的含義,通過查看原有解析JS代碼,發現所有的結果欄位均以Int方式處理,我們在開發中亦如此
三、儲存資料
通過步驟二我們已經擷取到我們所有想要的資料以及實際查詢的連結和結果格式,我們把這些資料存放到Android工程裡
1 將省份資訊存在values.xml中,其中省份ID為item的序號+1
<string-array name="province"> <item>北京</item> <item>天津</item> <item>上海</item> <item>重慶</item> <item>河北</item> <item>河南</item> <item>山東</item> <item>山西</item> <item>安徽</item> <item>江西</item> <item>江蘇</item> <item>浙江</item> <item>湖北</item> <item>湖南</item> <item>廣東</item> <item>廣西</item> <item>雲南</item> <item>貴州</item> <item>四川</item> <item>陝西</item> <item>青海</item> <item>寧夏</item> <item>黑龍江</item> <item>吉林</item> <item>遼寧</item> <item>西藏</item> <item>新疆</item> <item>內蒙古</item> <item>海南</item> <item>福建</item> <item>甘肅</item> <item>港澳台</item> </string-array>
2 將文理科選擇資訊儲存到values.xml中,其中選擇值為item序號+1
<string-array name="type"> <item>文科</item> <item>理科</item> <item>綜合</item> </string-array>
3 學校檔案以ASCII碼(可以用其他編碼,本執行個體就採用簡單的預設編碼)儲存,放到assert/m/data.txt檔案中。
備忘:
在分析過程中,我們發現選擇學校省份以及使用者所在地的下拉框資料僅差一條港澳台,樣本開發中忽略差異,均看成統一的省份列表