OSDN Git Service

git-svn-id: https://svn.sourceforge.jp/svnroot/nucleus-jp/plugin@849 1ca29b6e-896d...
[nucleus-jp/nucleus-plugins.git] / NP_GoogleRank / NP_GoogleRank.php
1 <?
2
3 class NP_GoogleRank extends NucleusPlugin{
4
5         function getName()
6         {
7                 return 'GoogleRank';
8         }
9
10         function getAuthor()
11         {
12                 return 'nakahara21';
13         }
14
15         function getURL()
16         {
17                 return 'http://nakahara21.com/';
18         }
19
20         function getVersion()
21         {
22                 return '0.50';
23         }
24
25         function getDescription()
26         {
27                 return 'Embed GoogleRank';
28         }
29         
30         function supportsFeature ($what)
31         {
32                 switch ($what) {
33                         case 'SqlTablePrefix':
34                                 return 1;
35                         default:
36                         return 0;
37                 }
38         }
39         
40         function init()
41         {
42                 define('GOOGLE_MAGIC', 0xE6359A60);
43         }
44
45         function doSkinVar($skinType, $opt)
46         {
47                 if (serverVar('REQUEST_URI')=='') {
48                         $uri = (serverVar("QUERY_STRING"))? 
49                                 sprintf("%s%s%s?%s", "http://", serverVar("HTTP_HOST"), serverVar("SCRIPT_NAME"), serverVar("QUERY_STRING") ):
50                                 sprintf("%s%s%s","http://",serverVar("HTTP_HOST"),serverVar("SCRIPT_NAME"));
51                 } else { 
52                         $uri = sprintf("%s%s%s","http://",serverVar("HTTP_HOST"),serverVar("REQUEST_URI")); 
53                 }
54                 $uri = preg_replace('|[^a-z0-9-~+_.?#=&;,/:@%]|i', '', $uri);
55                 $uri = 'info:' . $uri;
56                 $temp = $this->strord($uri);
57                 $ch = $this->GoogleCH($temp);
58                 $chv = '6' . sprintf("%u", $ch);
59
60                 $rankxmlurl =  'http://' . 'www.google.co.jp/search?client=navclient-auto&ch=' . $chv . '&q=' . $uri;
61                 $rankdataurl =  $rankxmlurl . '&features=Rank';
62                 echo '<a href="' . $rankxmlurl . '">check</a>';
63
64                 $result = @file($rankdataurl);
65                 if (!$result) {
66                         return;
67                 }
68
69                 $data = @join("", $result);
70                 $e = preg_replace('/\s/', "", substr(strrchr( $data, ":" ), 1));
71                 if ($e != 'n') {
72                         $e = intval($e);
73                 } else {
74                         $e = 'n';
75                 }
76                 echo '<img src="' . $this->getAdminURL() . 'imgs/' . $e . '.gif" alt="Google PageRank" title="Google PageRank (' . $e . '/10)" />';
77
78         }
79
80 //unsigned shift right
81         function zeroFill($a, $b)
82         {
83                 $z = hexdec(80000000);
84
85                 if ($z & $a) {
86                         $a = ($a >> 1);
87                         $a &= (~$z);
88                         $a |= 0x40000000;
89                         $a = ($a >> ($b - 1));
90                 } else {
91                         $a = ($a >> $b);
92                 }
93
94         return $a;
95 }
96
97         function mix($a,$b,$c)
98         {
99                 $a -= $b; $a -= $c; $a ^= ($this->zeroFill($c,13));
100                 $b -= $c; $b -= $a; $b ^= ($a<<8);
101                 $c -= $a; $c -= $b; $c ^= ($this->zeroFill($b,13));
102                 $a -= $b; $a -= $c; $a ^= ($this->zeroFill($c,12));
103                 $b -= $c; $b -= $a; $b ^= ($a<<16);
104                 $c -= $a; $c -= $b; $c ^= ($this->zeroFill($b,5));
105                 $a -= $b; $a -= $c; $a ^= ($this->zeroFill($c,3));
106                 $b -= $c; $b -= $a; $b ^= ($a<<10);
107                 $c -= $a; $c -= $b; $c ^= ($this->zeroFill($b,15));
108
109                 return array($a,$b,$c);
110         }
111
112         function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC)
113         {
114                 if(is_null($length)) {
115                         $length = sizeof($url);
116                 }
117                 $a = $b = 0x9E3779B9;
118                 $c = $init;
119                 $k = 0;
120                 $len = $length;
121             while ($len >= 12) {
122                         $a += ($url[$k + 0] + ($url[$k + 1] << 8) + ($url[$k + 2] << 16) + ($url[$k + 3] << 24));
123                         $b += ($url[$k + 4] + ($url[$k + 5] << 8) + ($url[$k + 6] << 16) + ($url[$k + 7] <<24));
124                         $c += ($url[$k + 8] + ($url[$k + 9] << 8) + ($url[$k + 10] << 16) + ($url[$k + 11] <<24));
125                         $mix = $this->mix($a, $b, $c);
126                         $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
127                         $k += 12;
128                         $len -= 12;
129                 }
130
131                 $c += $length;
132                 /* all the case statements fall through */
133                 switch($len) { 
134                         case 11: $c+=($url[$k+10]<<24);
135                         case 10: $c+=($url[$k+9]<<16);
136                         case 9 : $c+=($url[$k+8]<<8);
137                         /* the first byte of c is reserved for the length */ 
138                         case 8 : $b+=($url[$k+7]<<24);
139                         case 7 : $b+=($url[$k+6]<<16);
140                         case 6 : $b+=($url[$k+5]<<8);
141                         case 5 : $b+=($url[$k+4]);
142                         case 4 : $a+=($url[$k+3]<<24);
143                         case 3 : $a+=($url[$k+2]<<16);
144                         case 2 : $a+=($url[$k+1]<<8);
145                         case 1 : $a+=($url[$k+0]);
146                         /* case 0: nothing left to add */
147                 }
148             $mix = $this->mix($a,$b,$c);
149     /*-------------------------------------------- report the result */ 
150             return $mix[2]; 
151         } 
152
153 //converts a string into an array of integers containing the numeric value of the char 
154         function strord($string)
155         { 
156                 for ($i = 0; $i < strlen($string); $i++) {
157                         $result[$i] = ord($string{$i});
158                 }
159                 return $result;
160         }
161
162 }
163
164 ?>