در این مثال می بینیم که چگونه با استفاده از زبان جاوا پیج رنک گوگل سایت 4paye.ir را بدست می آوریم، تنها کار لازم ارسال درخواست HTTP زیر است:

http://toolbarqueries.google.com/tbr?client=navclient-auto&hl=en&ch=63948439574
&ie=UTF-8&oe=UTF-8&features=Rank&q=info:4paye.ir

آدرس فوق توسط تولبار گوگل مورد استفاده قرار می گیرد، تنها نکته اصلی در آدرس فوق مقدار هش ch=63948439574 می باشد. گوگل از الگوریتم هش Bob Jenkins برای بدست آوردن مقدار ch استفاده می کند.

کلاس SeoHelper برای درخواست به سرور گوگل

```

package com.farnabaz.net;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class SeoHelper {

/**
 * return google page rank of `domain`
 * 
 * @param domain
 *            domain address to get page rank
 * @return number of google page rank
 */
public int getGooglePR(String domain) {

	String result = "";

	JenkinsHash jenkinsHash = new JenkinsHash();
	long hash = jenkinsHash.hash(("info:" + domain).getBytes());

	// Append a 6 in front of the hashing value.
	String url = "http://toolbarqueries.google.com/tbr?client=navclient-auto&hl=en&"
			+ "ch=6"
			+ hash
			+ "&ie=UTF-8&oe=UTF-8&features=Rank&q=info:"
			+ domain;

	try {
		URLConnection conn = new URL(url).openConnection();

		BufferedReader br = new BufferedReader(new InputStreamReader(
				conn.getInputStream()));

		String input;
		while ((input = br.readLine()) != null) {
			// What Google returned? Example : Rank_1:1:9, PR = 9
			result = input.substring(input.lastIndexOf(":") + 1);
		}

	} catch (Exception e) {

	}

	if ("".equals(result)) {
		return 0;
	} else {
		return Integer.valueOf(result);
	}

}

}

<h3>الگوریتم هش Jenkins</h3>

package com.farnabaz.hash;
/**

*/
public class JenkinsHash {

// max value to limit it to 4 bytes
private static final long MAX_VALUE = 0xFFFFFFFFL;

// internal variables used in the various calculations
long a;
long b;
long c;

/**
 * Convert a byte into a long value without making it negative.
 */
private long byteToLong(byte b) {
	long val = b & 0x7F;
	if ((b & 0x80) != 0) {
		val += 128;
	}
	return val;
}

/**
 * Do addition and turn into 4 bytes.
 */
private long add(long val, long add) {
	return (val + add) & MAX_VALUE;
}

/**
 * Do subtraction and turn into 4 bytes.
 */
private long subtract(long val, long subtract) {
	return (val - subtract) & MAX_VALUE;
}

/**
 * Left shift val by shift bits and turn in 4 bytes.
 */
private long xor(long val, long xor) {
	return (val ^ xor) & MAX_VALUE;
}

/**
 * Left shift val by shift bits. Cut down to 4 bytes.
 */
private long leftShift(long val, int shift) {
	return (val << shift) & MAX_VALUE;
}

/**
 * Convert 4 bytes from the buffer at offset into a long value.
 */
private long fourByteToLong(byte[] bytes, int offset) {
    return (byteToLong(bytes[offset + 0])
	+ (byteToLong(bytes[offset + 1]) << 8)
	+ (byteToLong(bytes[offset + 2]) << 16) + (byteToLong(bytes[offset + 3]) << 24));
}

/**
 * Mix up the values in the hash function.
 */
private void hashMix() {
	a = subtract(a, b);
	a = subtract(a, c);
	a = xor(a, c >> 13);
	b = subtract(b, c);
	b = subtract(b, a);
	b = xor(b, leftShift(a, 8));
	c = subtract(c, a);
	c = subtract(c, b);
	c = xor(c, (b >> 13));
	a = subtract(a, b);
	a = subtract(a, c);
	a = xor(a, (c >> 12));
	b = subtract(b, c);
	b = subtract(b, a);
	b = xor(b, leftShift(a, 16));
	c = subtract(c, a);
	c = subtract(c, b);
	c = xor(c, (b >> 5));
	a = subtract(a, b);
	a = subtract(a, c);
	a = xor(a, (c >> 3));
	b = subtract(b, c);
	b = subtract(b, a);
	b = xor(b, leftShift(a, 10));
	c = subtract(c, a);
	c = subtract(c, b);
	c = xor(c, (b >> 15));
}

/**
 * Hash a variable-length key into a 32-bit value. Every bit of the key
 * affects every bit of the return value. Every 1-bit and 2-bit delta
 * achieves avalanche. The best hash table sizes are powers of 2.
 *
 * @param buffer
 *            Byte array that we are hashing on.
 * @param initialValue
 *            Initial value of the hash if we are continuing from a previous
 *            run. 0 if none.
 * @return Hash value for the buffer.
 */
public long hash(byte[] buffer, long initialValue) {
	int len, pos;

	// set up the internal state
	// the golden ratio; an arbitrary value
	a = 0x09e3779b9L;
	// the golden ratio; an arbitrary value
	b = 0x09e3779b9L;
	// the previous hash value

	//c = initialValue;
	c = 0x0E6359A60L;

	// handle most of the key
	pos = 0;
	for (len = buffer.length; len >= 12; len -= 12) {
		a = add(a, fourByteToLong(buffer, pos));
		b = add(b, fourByteToLong(buffer, pos + 4));
		c = add(c, fourByteToLong(buffer, pos + 8));
		hashMix();
		pos += 12;
	}

	c += buffer.length;

	// all the case statements fall through to the next on purpose
	switch (len) {
	case 11:
		c = add(c, leftShift(byteToLong(buffer[pos + 10]), 24));
	case 10:
		c = add(c, leftShift(byteToLong(buffer[pos + 9]), 16));
	case 9:
		c = add(c, leftShift(byteToLong(buffer[pos + 8]), 8));
		// the first byte of c is reserved for the length
	case 8:
		b = add(b, leftShift(byteToLong(buffer[pos + 7]), 24));
	case 7:
		b = add(b, leftShift(byteToLong(buffer[pos + 6]), 16));
	case 6:
		b = add(b, leftShift(byteToLong(buffer[pos + 5]), 8));
	case 5:
		b = add(b, byteToLong(buffer[pos + 4]));
	case 4:
		a = add(a, leftShift(byteToLong(buffer[pos + 3]), 24));
	case 3:
		a = add(a, leftShift(byteToLong(buffer[pos + 2]), 16));
	case 2:
		a = add(a, leftShift(byteToLong(buffer[pos + 1]), 8));
	case 1:
		a = add(a, byteToLong(buffer[pos + 0]));
		// case 0: nothing left to add
	}
	hashMix();

	return c;
}

/**
 * See hash(byte[] buffer, long initialValue)
 * 
 * @param buffer
 *            Byte array that we are hashing on.
 * @return Hash value for the buffer.
 */
public long hash(byte[] buffer) {
	return hash(buffer, 0);
}

}

<h3>استفاده از کلاس SeoHelper برای دریافت پیج رنک 4paye.ir</h3>

import com.farnabaz.net.SeoHelper;

public class Main {
public static void main(String[] args) {
SeoHelper helper = new SeoHelper();
System.out.print("Google PageRank of 4paye.ir: ");
System.out.println(helper.getGooglePR("4paye.ir"));
}
}

خروجی برنامه فوق بصورت زیر است:
`
Google PageRank of 4paye.ir: 1
`