1. 程式人生 > >利用Python製作頭腦王者輔助神器

利用Python製作頭腦王者輔助神器

抓包

我使用的是 fiddler 抓的,網上關於抓app包的教程很多,可自行查閱,這裡不贅述。根據抓包發現出題目的介面:

 

 

資料格式是一個 json 字串,如下所示:

{"data":{"quiz":"我國的根本大法指的是?","options":["刑事訴訟法","刑法","婚姻法","憲法"],"num":3,"school":"理科","type":"地理","typeID":9,"contributor":"孫悅悅","partner":0,"endTime":1516447448,"curTime":1516447433,"myBuff":{}},"errcode":0}

解決了題目的獲取,接下來就是想辦法把題目傳遞到其他程式,利用 FiddlerScript 就可以了:

 

 

點選 FiddlerScript 然後選擇 OnbeforeResponse 進入該函式內,寫下如下程式碼:

 

 

這部分就是將題目發到自己寫的一個程式上:

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 命令,就可以實現自動化答題了。

我有個朋友真的靠純答題上的王者,令人敬佩。最後提醒一下,遊戲而已,不要為了攀比傷了和氣。