|
但我裝在Firefox工具欄的擴(kuò)展插件SearchStatus仍然能夠正常解析出每個(gè)受訪頁(yè)的PR值,找到 SearchStatus 的插件包解開(kāi)來(lái)看源碼,果然是使用了不一樣的驗(yàn)證碼生成算法,在原先的 checksum 生成之后,還需要再進(jìn)行一次計(jì)算,兩次演算之后得到的才是正確的ch參數(shù)。
于是拿現(xiàn)成的js代碼改造一番之后,新的php版本的 Google PageRank 查詢接口方法就出來(lái)了。經(jīng)過(guò)本地測(cè)試之后,誰(shuí)想傳到服務(wù)器之后又出現(xiàn)了該死的 terms_of_service 錯(cuò)誤提示。把checksum的計(jì)算過(guò)程一步步打出來(lái),發(fā)現(xiàn)經(jīng)過(guò)了幾次右位移之后本地和服務(wù)器上的數(shù)字就不一樣了。這才想到服務(wù)器是64位機(jī),32位系統(tǒng)下位移之后應(yīng)該被cut掉的bit在那里就活得好好的。加了個(gè) trunkbitForce32bit 方法,對(duì)所有算術(shù)運(yùn)算之后的數(shù)值進(jìn)行高位屏蔽,算是搞定了64位系統(tǒng)下的多余位問(wèn)題。結(jié)果拿到32位Linux環(huán)境下跑又不兼容了,原因是php在進(jìn)行算術(shù)處理出現(xiàn)溢出時(shí),會(huì)自動(dòng)嘗試將int轉(zhuǎn)為float。當(dāng)發(fā)生的是負(fù)數(shù)溢出時(shí),這一操作在Windows下能正確保留精度,但在Linux下就有問(wèn)題了。
下面這段代碼:
$a = -4294967295;
echo dechex($a)."<br />/n";
if ( $a < 0 ) $a += 4294967296;
echo dechex($a)."<br />/n";
第一個(gè)echo在Windows下能夠正確輸出該負(fù)數(shù)低32位的補(bǔ)碼,而在32位Linux機(jī)上輸出的則是int類型所能表示的最大負(fù)數(shù)0x80000000了。只有通過(guò)取巧的方式給這個(gè)溢出的大負(fù)數(shù)加上一個(gè)超出整數(shù)范圍的大整數(shù)來(lái)抵消掉溢出的部分,才能復(fù)原低32位應(yīng)該有的樣子。
使用這些非常規(guī)手段,終于炮制出這個(gè)更新版的兼容Linux32/Linux64/Windows的Google PR值查詢接口的php腳本實(shí)現(xiàn)(含完整代碼)。
php技術(shù):Google PR查詢接口checksum新算法第1/2頁(yè),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。