起步
最近直播答題火熱,群里也經??吹奖绕次⑿判〕绦颉?a style='color:#0000CC;' href='http://m.dszhyy.com/show-19-24973-1.html' title="小程序頭腦王者題庫 「頭腦王者」小程序暫停服務,問題又出在題目上" target='_blank'>頭腦王者》。我比較笨,憑純答題只到了黑金段位。鑒于本周剛剛點亮了收集抓包的技能,于是想試著通過這個來做一個輔助工具。
抓包
我使用的是 抓的,網上關于抓app包的教程很多,可自行查閱,這里不贅述。根據抓包發現出題目的接口:
數據格式是一個 json 字符串,如下所示:
{"data":{"quiz":"我國的根本大法指的是?","options":["刑事訴訟法","刑法","婚姻法","憲法"],"num":3,"school":"理科","type":"地理","typeID":9,"contributor":"孫悅悅","partner":0,"endTime":1516447448,"curTime":1516447433,"myBuff":{}},"errcode":0}
解決了題目的獲取小程序頭腦王者題庫,接下來就是想辦法把題目傳遞到其他程序,利用 就可以了:
點擊 然后選擇 進入該函數內,寫下如下代碼:
這部分就是將題目發到自己寫的一個程序上:
if (oSession.fullUrl.Contains("question.hortor.net/question/bat/findQuiz"))
{
? ?//把內容通過ajax http發送其它地方
? ?var _xhr = new ActiveXObject('Microsoft.XMLHTTP');
? ?var url = 'http://localhost:8000/api/brain_king/';
? ?//不需要返回值所以設置為空回調
? ?_xhr.onreadystatechange = function() {}
? ?_xhr.open('POST', url, true);
? ?_xhr.setRequestHeader("Content-Type", "application/json");
? ?_xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
? ?_xhr.send(oSession.GetResponseBodyAsString());
}
解答問題
得到問題后如何答題就見仁見智了,最簡單的一個方式就是把問題提交到百度上,進行詞頻統計,大多數情況下詞頻多的為正確答案,于是我及其簡單的做了處理:
class BrainKing(generics.GenericAPIView):
? ?def post(self, request):
? ? ? ?question_dict = request.data.get("data")
? ? ? ?question_text = question_dict["quiz"]
? ? ? ?choices = question_dict["options"]
? ? ? ?content = requests.get('http://www.baidu.com/s?wd=' + question_text, timeout=2).text
? ? ? ?for choice in choices:
? ? ? ? ? ?print(choice + " : " + content.count(choice))
? ? ? ?return Response("")
你以為我會用很高級的語義分析等自然語言處理嗎?其實我也有試,但效果還不是很好,準確率不如詞頻統計,等優化后再說吧。
成果展示
用這個上分確實很快小程序頭腦王者題庫,不過缺點也是比較明顯的,帶一些干擾詞就不行了,但總體上王者還是比較輕松的:
后期如果再加上 adb 命令,就可以實現自動化答題了。
我有個朋友真的靠純答題上的王者,令人敬佩。最后提醒一下,游戲而已,不要為了攀比傷了和氣。
贊賞作者
本文作者
中文社區專欄作者。不會寫程序的浴室麥霸不是好的神經科醫生