Google PR查詢介面checksum新演算法第1/2頁_PHP教程

來源:互聯網
上載者:User
取而代之的是一大段“In your email, please send us the entire code displayed below”之類的Google terms_of_service錯誤提示資訊。看來是原先的介面已經失效了。

但我裝在Firefox工具列的擴充外掛程式SearchStatus仍然能夠正常解析出每個受訪頁的PR值,找到 SearchStatus 的外掛程式包解開來看源碼,果然是使用了不一樣的驗證碼產生演算法,在原先的 checksum 產生之後,還需要再進行一次計算,兩次演算之後得到的才是正確的ch參數。

於是拿現成的js代碼改造一番之後,新的PHP版本的 Google PageRank 查詢介面方法就出來了。經過本地測試之後,誰想傳到伺服器之後又出現了該死的 terms_of_service 錯誤提示。把checksum的計算過程一步步打出來,發現經過了幾次右位移之後本地和伺服器上的數字就不一樣了。這才想到伺服器是64位機,32位系統下位移之後應該被cut掉的bit在那裡就活得好好的。加了個 trunkbitForce32bit 方法,對所有算術運算之後的數值進行高位屏蔽,算是搞定了64位系統下的多餘位問題。結果拿到32位Linux環境下跑又不相容了,原因是PHP在進行算術處理出現溢出時,會自動嘗試將int轉為float。當發生的是負數溢出時,這一操作在Windows下能正確保留精度,但在Linux下就有問題了。

下面這段代碼:

$a = -4294967295;
echo dechex($a)."
\n";
if ( $a < 0 ) $a += 4294967296;
echo dechex($a)."
\n";

第一個echo在Windows下能夠正確輸出該負數低32位的補碼,而在32位Linux機上輸出的則是int類型所能表示的最大負數0x80000000了。只有通過取巧的方式給這個溢出的大負數加上一個超出整數範圍的大整數來抵消掉溢出的部分,才能複原低32位應該有的樣子。

使用這些非常規手段,終於炮製出這個更新版的相容Linux32/Linux64/Windows的Google PR值查詢介面的PHP指令碼實現(含完整代碼)。

http://www.bkjia.com/PHPjc/319839.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/319839.htmlTechArticle取而代之的是一大段“In your email, please send us the entire code displayed below”之類的Google terms_of_service錯誤提示資訊。看來是原先的介面已經失效...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.