Deep BlueVBScriptWMIPHPC语言JavaScriptWindows API路由器Windows函数Python | Python,又见Python标题出自古龙晚期小说《飞刀,又见飞刀》。《飞刀,又见飞刀》是《多情剑客无情剑》的后续,以“小李探花”李寻欢的孙子李坏与“月神”薛采月的故事为主线。标题只是为了呼应很久以前写的《Python牛刀小试》,内容上并没有联系。
自从晨光BT与交大知行信息交流平台整合之后,我就很少登陆论坛了,只是偶尔下几部电影看看。早上为了打发无聊的时间,到论坛上逛了逛,看到一个帖子:
Python我已经很久没有碰过了,我碰到的大部分问题都可以用VBS解决,不能用VBS解决的,就用C语言搞定,实在是不知道用Python来做什么。我只看过一点点Python,别说高手,连菜鸟都算不上。 但是上面的问题,和Python无关,与JavaScript有染,因为那个网址中的“上证指数”和“深证指数”都是用AJAX动态生成的,所以解决问题的关键是找出获取这两个数据的AJAX请求。用Firebug调试了半天,终于找到了: StockCodeRequest = new function(){ // private fields // private static methods // public fields this.scriptid ="StockCodeRequest"; this.url = "http://quote.tool.hexun.com/hqzx/getstock.aspx"; this.code = ""; // public methods this.CreateLink = function() { var request = this.url + "?"; if(!Common.IsCodeMarket(this.code)) { this.code = "000001_1|399001_2"; } request += "stocklist=" + this.code + "&time=" + Common.Time(); return request; } this.Request = function() { Common.AppendDataArray(this.scriptid,this.CreateLink()); } // constructor { } } 用JavaScript向http://quote.tool.hexun.com/hqzx/getstock.aspx发出请求,参数为
其中this.code = "000001_1|399001_2",找出Common.Time()就行了: Common = new function(){ // private static fields // public static method // 省略其余代码 this.Time = function() { var time = new Date(); var h = time.getHours(); var m = time.getMinutes(); var s = Math.floor(time.getSeconds()/10)*10; var arg = (h<10 ? "0" + h : h) + "" + (m<10 ? "0" + m : m) + "" + (s<10 ? "0" + s : s); return arg; } // 省略其余代码 } 最后把上面的JavaScript改写成相应的Python就行了: #Author: Demon #Website: http://demon.tw #Email: [email protected] import urllib, math from datetime import datetime t = datetime.today() h = t.hour m = t.minute s = math.floor(t.second / 10) * 10 arg = "%02d%02d%02d" % (h, m, s) params = urllib.urlencode({"stocklist": "000001_1|399001_2", "time": arg}) f = urllib.urlopen("http://quote.tool.hexun.com/hqzx/getstock.aspx?%s" % params) print f.read() 这里只写了HTTP请求部分,返回的数据是JSON格式,解析部分就不写了。 和《Python牛刀小试》一样,给出VBS实现: 'Author: Demon 'Website: http://demon.tw 'Email: [email protected] Set http = CreateObject("Msxml2.XMLHTTP") h = Hour(Now) m = Minute(Now) s = Int(Second(Now) / 10) * 10 arg = AddZero(h) & AddZero(m) & AddZero(s) url = "http://quote.tool.hexun.com/hqzx/getstock.aspx?stocklist=000001_1|399001_2&time=" & arg http.open "GET", url, False http.send WScript.Echo http.responseText Function AddZero(n) If n < 10 Then n = "0" & n AddZero = n End Function 这个问题真的和Python没什么关系。 |