There are many other languages' codes for the programmer to get the url's google pagerank(Google PR). But because of the flashplayer security policy limitation actionscript(swf) can not get google pagerank on not google domain.
If you want to get a url’s google pagerank in an AIR project, this example may be helpful for you.
The file content of FetchPR.as:
package {
import flash.errors.*;
import flash.events.*;
import flash.net.Socket;
public class FetchPR
{
public const GOOGLE_MAGIC:Number = 0xE6359A60;
public var resultPR:Number = 0;
public var callback:Function;
public function zeroFill(a:Number, b:Number):Number
{
var z:Number = 0x80000000;
var sa:Number = a;
var sb:Number = b;
if (z & sa) {
sa = (sa>>1);
sa &= (~z);
sa |= 0x40000000;
sa = (sa>>(sb-1));
}
else {
sa = (sa>>sb);
}
return sa;
}
public function mixa(a:Number,b:Number,c:Number):Array
{
var sa:Number = a;
var sb:Number = b;
var sc:Number = c;
sa -= sb; sa -= sc; sa ^= (zeroFill(sc,13));
sb -= sc; sb -= sa; sb ^= (sa << 8);
sc -= sa; sc -= sb; sc ^= (zeroFill(sb,13));
sa -= sb; sa -= sc; sa ^= (zeroFill(sc,12));
sb -= sc; sb -= sa; sb ^= (sa<<16);
sc -= sa; sc -= sb; sc ^= (zeroFill(sb,5));
sa -= sb; sa -= sc; sa ^= (zeroFill(sc,3));
sb -= sc; sb -= sa; sb ^= (sa<<10);
sc -= sa; sc -= sb; sc ^= (zeroFill(sb,15));
return new Array(sa,sb,sc);
}
public function GoogleCH(url:Array, length:Number = 0, init:Number=GOOGLE_MAGIC):Number
{
if (length == 0) {
length = url.length;
}
var sa:Number = 0x9E3779B9;
var sb:Number = 0x9E3779B9;
var sc:Number = init;
var k:Number = 0;
var len:Number = length;
var mix:Array;
while(len >= 12) {
sa += (url[k+0] +(url[k+1]<<8) +(url[k+2]<<16) +(url[k+3]<<24));
sb += (url[k+4] +(url[k+5]<<8) +(url[k+6]<<16) +(url[k+7]<<24));
sc += (url[k+8] +(url[k+9]<<8) +(url[k+10]<<16)+(url[k+11]<<24));
mix = mixa(sa,sb,sc);
sa = mix[0]; sb = mix[1]; sc = mix[2];
k += 12;
len -= 12;
}
sc += length;
switch (len) {
case 11: sc+=(url[k+10]<<24);
case 10: sc+=(url[k+9]<<16);
case 9 : sc+=(url[k+8]<<8);
case 8 : sb+=(url[k+7]<<24);
case 7 : sb+=(url[k+6]<<16);
case 6 : sb+=(url[k+5]<<8);
case 5 : sb+=(url[k+4]);
case 4 : sa+=(url[k+3]<<24);
case 3 : sa+=(url[k+2]<<16);
case 2 : sa+=(url[k+1]<<8);
case 1 : sa+=(url[k+0]);
}
mix = mixa(sa,sb,sc);
return mix[2];
}
public function strord(str:String):Array
{
var result:Array = new Array();
for(var i:Number = 0; i < str.length; i++) {
result[i] = str.charCodeAt(i);
}
return result;
}
private var sock:Socket;
public function getPR(url:String):void
{
sock = new Socket("www.google.com", 80); //<*1>
url = "info:" + url;
var ch:Number = GoogleCH(strord(url));
var urlstring:String = "/search?client=navclient-auto&ch=6" + ch + "&features=Rank&q=" + url;
sock.writeUTFBytes("GET " + urlstring + " HTTP/1.0\r\n");
sock.writeUTFBytes("Host: toolbarqueries.google.com\r\n");
sock.writeUTFBytes("User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114.9-big; Linux 2.6)\r\n");
sock.writeUTFBytes("Connection: Close\r\n\r\n");
sock.flush();
sock.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
}
private function socketDataHandler(event:ProgressEvent):void {
var res:String = sock.readUTFBytes(sock.bytesAvailable);
var offset:Number = res.lastIndexOf("Rank");
res = res.substr(offset);
var result:Array = res.split(":");
resultPR = result[2];
callback.call(this, resultPR);
}
public function FetchPR()
{
}
}
}
The example to use the class FetchPR (FetchGooglePR.mxml):
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="424">
<mx:Script>
<![CDATA[
private var fetchprinstance:FetchPR = new FetchPR();
private function getPageRank():void
{
fetchprinstance.callback = setResult;
fetchprinstance.getPR(urlbox.text);
}
public function setResult(pr:Number):void
{
result.text = "PageRank is:" + pr.toString();
}
]]>
</mx:Script>
<mx:Button x="179" y="155" label="Get PR!" click="getPageRank();"/>
<mx:TextInput x="48" y="125" width="357" id="urlbox"/>
<mx:Text x="10" y="127" text="URL:"/>
<mx:Text x="123" y="200" text="PageRank is:" width="191" id="result"/>
</mx:Application>
The steps to use FetchPR.as:
1. Initialize the FetchPR’s instance
2. Set the callback function of FetchPR
3. Call FetchPR’s getPR function to get a url’s PR
The actionscript code is translated from the PHP version, thanks the original author.
<*1> The domain www.google.com can be changed to other google’s domain, such as www.google.co.uk, www.google.cn, and so on. If you like to query many url’s pr in a short period, using a pool of google domains is better.






