- Timestamp:
- Jul 7, 2012, 4:16:05 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/GrumPluginClasses/classes/GPCUserAgent.class.inc.php
r16012 r16458 5 5 class GPCUserAgent 6 6 { 7 /** 8 * parse a user agent string and return an array of normalized informations 9 * 10 * returned: 11 * array( 12 * 'os' => (integer) 13 * 'os_version' => (string) 14 * 'browser' => (integer) 15 * 'browser_name' => (string) 16 * 'browser_type' => (integer) 17 * 'browser_version' => (string) 18 * 'engine' => (integer) 19 * 'engine_version' => (string) 20 * ) 21 * 22 * @param String $userAgent 23 * @return Array 24 */ 7 25 static public function parse($userAgent) 8 26 { … … 10 28 11 29 $returned=array( 12 'os' => '',13 'os_version'=> '',14 15 'browser' => '',16 'browser_name'=> '',17 'browser_type' => '',18 'browser_version'=> '',19 20 'engine' => '',21 'engine_version'=> ''30 UA_DATA_OS => UA_OS_UNKNOWN, 31 UA_DATA_OS_VERSION => '', 32 33 UA_DATA_BROWSER => UA_BOT_UNKNOWN, 34 UA_DATA_BROWSER_NAME => '', 35 UA_DATA_BROWSER_TYPE => UA_PROP_TYPE_UNKNOWN, 36 UA_DATA_BROWSER_VERSION => '', 37 38 UA_DATA_ENGINE => UA_ENGINE_UNKNOWN, 39 UA_DATA_ENGINE_VERSION => '' 22 40 ); 23 41 24 42 $bot=self::getBot($userAgent); 25 if($bot['crawler']!=='') 26 { 27 $returned['browser']=$bot['crawler']; 28 $returned['browser_name']=$bot['name']; 29 $returned['browser_type']=UA_PROP_TYPE_CRAWLER; 30 $returned['browser_version']=str_replace(array(';', '(', ')'), array('', '', ''), $bot['version']); 43 if($bot[UA_DATA_BROWSER]!=='') 44 { 45 $returned[UA_DATA_BROWSER]=$bot[UA_DATA_BROWSER]; 46 $returned[UA_DATA_BROWSER_TYPE]=UA_BROWSER_TYPE_CRAWLER; 47 $returned[UA_DATA_BROWSER_VERSION]=str_replace(array(';', '(', ')'), array('', '', ''), $bot[UA_DATA_BROWSER_VERSION]); 31 48 return($returned); 32 49 } 33 50 34 51 $tmp=self::getBrowser($userAgent); 35 $returned['browser']=$tmp['browser']; 36 $returned['browser_name']=$tmp['name']; 37 $returned['browser_type']=$UA_BrowserInfo[UA_DATA_BROWSER][$tmp['browser']][UA_PROP_TYPE]; 38 $returned['browser_version']=str_replace(array(';', '(', ')'), array('', '', ''), $tmp['version']); 52 $returned[UA_DATA_BROWSER]=$tmp[UA_DATA_BROWSER]; 53 $returned[UA_DATA_BROWSER_TYPE]=$UA_BrowserInfo[UA_DATA_BROWSER][$tmp[UA_DATA_BROWSER]][UA_PROP_TYPE]; 54 $returned[UA_DATA_BROWSER_VERSION]=str_replace(array(';', '(', ')'), array('', '', ''), $tmp[UA_DATA_BROWSER_VERSION]); 39 55 40 56 $tmp=self::getOs($userAgent); 41 $returned[ 'os']=$tmp['os'];42 $returned[ 'os_version']=str_replace(array(';', '(', ')'), array('', '', ''), $tmp['version']);57 $returned[UA_DATA_OS]=$tmp[UA_DATA_OS]; 58 $returned[UA_DATA_OS_VERSION]=str_replace(array(';', '(', ')'), array('', '', ''), $tmp[UA_DATA_OS_VERSION]); 43 59 44 60 $tmp=self::getEngine($userAgent); 45 $returned['engine']=$tmp['engine']; 46 $returned['engine_version']=str_replace(array(';', '(', ')'), array('', '', ''), $tmp['version']); 61 $returned[UA_DATA_ENGINE]=$tmp[UA_DATA_ENGINE]; 62 $returned[UA_DATA_ENGINE_VERSION]=str_replace(array(';', '(', ')'), array('', '', ''), $tmp[UA_DATA_ENGINE_VERSION]); 63 64 // explicit OS for mobile device override the browser type 65 if($returned[UA_DATA_OS]==UA_OS_BLACKBERRY or 66 $returned[UA_DATA_OS]==UA_OS_SYMBIAN_OS or 67 $returned[UA_DATA_OS]==UA_OS_SYMBOS or 68 $returned[UA_DATA_OS]==UA_OS_ANDROID or 69 $returned[UA_DATA_OS]==UA_OS_IOS) $returned[UA_DATA_BROWSER_TYPE]=UA_BROWSER_TYPE_MOBILE; 70 71 // explicit OS for console device override the browser type 72 if($returned[UA_DATA_OS]==UA_OS_NINTENDO_DS or 73 $returned[UA_DATA_OS]==UA_OS_NINTENDO_WII or 74 $returned[UA_DATA_OS]==UA_OS_SONY_PS3 or 75 $returned[UA_DATA_OS]==UA_OS_SONY_PSP) $returned[UA_DATA_BROWSER_TYPE]=UA_BROWSER_TYPE_CONSOLE; 76 77 return($returned); 78 } 79 80 81 /** 82 * from a user agent array properties, return an array completed with associated 83 * properties 84 * 85 * @param Array $userAgent 86 * @return Array 87 */ 88 static public function getProperties($userAgent) 89 { 90 global $UA_BrowserInfo; 91 92 $returned=array(); 93 if(isset($userAgent[UA_DATA_BROWSER]) and isset($UA_BrowserInfo[UA_DATA_BROWSER][$userAgent[UA_DATA_BROWSER]])) 94 { 95 $returned[UA_DATA_BROWSER]=$userAgent[UA_DATA_BROWSER]; 96 $returned[UA_DATA_BROWSER_NAME]=$UA_BrowserInfo[UA_DATA_BROWSER][$userAgent[UA_DATA_BROWSER]][UA_PROP_NAME]; 97 $returned[UA_DATA_BROWSER_URL]=$UA_BrowserInfo[UA_DATA_BROWSER][$userAgent[UA_DATA_BROWSER]][UA_PROP_URL]; 98 } 99 100 if(!isset($userAgent[UA_DATA_BROWSER_TYPE]) and isset($userAgent[UA_DATA_BROWSER])) 101 $userAgent[UA_DATA_BROWSER_TYPE]=$UA_BrowserInfo[UA_DATA_BROWSER][$userAgent[UA_DATA_BROWSER]][UA_PROP_TYPE]; 102 103 if(isset($userAgent[UA_DATA_BROWSER_TYPE]) and isset($UA_BrowserInfo[UA_DATA_BROWSER_TYPE][$userAgent[UA_DATA_BROWSER_TYPE]])) 104 { 105 $returned[UA_DATA_BROWSER_TYPE]=$userAgent[UA_DATA_BROWSER_TYPE]; 106 $returned[UA_DATA_BROWSER_TYPE_NAME]=$UA_BrowserInfo[UA_DATA_BROWSER_TYPE][$userAgent[UA_DATA_BROWSER_TYPE]]; 107 } 108 109 110 if(isset($userAgent[UA_DATA_OS]) and isset($UA_BrowserInfo[UA_DATA_OS][$userAgent[UA_DATA_OS]])) 111 { 112 $returned[UA_DATA_OS]=$userAgent[UA_DATA_OS]; 113 $returned[UA_DATA_OS_NAME]=$UA_BrowserInfo[UA_DATA_OS][$userAgent[UA_DATA_OS]][UA_PROP_NAME]; 114 $returned[UA_DATA_OS_URL]=$UA_BrowserInfo[UA_DATA_OS][$userAgent[UA_DATA_OS]][UA_PROP_URL]; 115 } 116 117 if(isset($userAgent[UA_DATA_ENGINE]) and isset($UA_BrowserInfo[UA_DATA_ENGINE][$userAgent[UA_DATA_ENGINE]])) 118 { 119 $returned[UA_DATA_ENGINE]=$userAgent[UA_DATA_ENGINE]; 120 $returned[UA_DATA_ENGINE_NAME]=$UA_BrowserInfo[UA_DATA_ENGINE][$userAgent[UA_DATA_ENGINE]][UA_PROP_NAME]; 121 $returned[UA_DATA_ENGINE_URL]=$UA_BrowserInfo[UA_DATA_ENGINE][$userAgent[UA_DATA_ENGINE]][UA_PROP_URL]; 122 } 47 123 48 124 return($returned); … … 89 165 '(ichiro)\/(\S*)\(' => UA_BOT_ICHIRO, 90 166 '(ichiro)(?:\/(\S*))*' => UA_BOT_ICHIRO, 167 '(l.webis)(?:\/(\S*))*' => UA_BOT_LWEBIS, 168 '(larbin)' => UA_BOT_LARBIN, 169 '(linkwalker)(?:\/(\S*))*' => UA_BOT_LINKWALKER, 170 '(lwp-trivial)(?:\/(\S*))*' => UA_BOT_LWPTRIVIAL, 171 '(mabontland)' => UA_BOT_MABONLAND, 172 '(mnogosearch)' => UA_BOT_MNOGOSEARCH, 173 '(mogimogi)(?:\/(\S*))*' => UA_BOT_MOGIMOGI, 174 '(morning\spaper)' => UA_BOT_MORNINGPAPER, 175 '(netresearchserver)\/(\S*)\(' => UA_BOT_NETRESEARCHSERVER, 176 '(netresearchserver)(?:\/(\S*))*' => UA_BOT_NETRESEARCHSERVER, 177 '(newsgator)(?:\/(\S*))*' => UA_BOT_NEWSGATOR, 178 '(ng-search)(?:\/(\S*))*' => UA_BOT_NGSEARCH, 179 '(nymesis)(?:\/(\S*))*' => UA_BOT_NYMESIS, 180 '(oegp)' => UA_BOT_OEGP, 181 '(pompos)(?:\/(\S*))*' => UA_BOT_POMPOS, 182 '(pycurl)(?:\/(\S*))*' => UA_BOT_PYCURL, 183 '(qseero)' => UA_BOT_QSEERO, 184 '(sbider)(?:\/(\S*))*' => UA_BOT_SBIDER, 185 '(scoutjet)' => UA_BOT_SCOUTJET, 186 '(scrubby)(?:\/(\S*))*' => UA_BOT_SCRUBBY, 187 '(searchsight)(?:\/(\S*))*' => UA_BOT_SEARCHSIGHT, 188 '(semanticdiscovery)(?:\/(\S*))*' => UA_BOT_SEMANTICDISCOVERY, 189 190 '(shoula)' => UA_BOT_SHOULA, 191 '(snappy)(?:\/(\S*))*' => UA_BOT_SNAPPY, 192 '(stackrambler)(?:\/(\S*))*' => UA_BOT_STACKRAMBLER, 193 '(silk)(?:\/(\S*))*' => UA_BOT_SILK, 194 '(teoma)' => UA_BOT_TEOMA, 195 '(tineye)(?:\/(\S*))*' => UA_BOT_TINEYE, 196 '(truwogps)(?:\/(\S*))*' => UA_BOT_TRUWOGPS, 197 '(updated)(?:\/(\S*))*' => UA_BOT_UPDATED, 198 '(voyager)(?:\/(\S*))*' => UA_BOT_VOYAGER, 199 '(vyu2)' => UA_BOT_VYU2, 200 '(webcollage)(?:\/(\S*))*' => UA_BOT_WEBCOLLAGE, 201 '(yooglifetchagent)(?:\/(\S*))*' => UA_BOT_YOOGLIFETCHAGENT, 202 '(zao)(?:\/(\S*))*' => UA_BOT_ZAO, 203 '(zealbot)' => UA_BOT_ZEALBOT, 91 204 '(baiduspider)' => UA_BOT_BAIDU, 92 205 '(msnbot)\/(\d+(?:\.\d+)*)' => UA_BOT_MSN_SEARCH, 206 '(msnbot)\s(\d+(?:\.\d+)*)' => UA_BOT_MSN_SEARCH, 93 207 '(exabot)\/(\d+(?:\.\d+)*)' => UA_BOT_EXALEAD, 94 208 '(gamespyhttp)\/(\d+(?:\.\d+)*)' => UA_BOT_GAMESPY, … … 96 210 '(inktomi)' => UA_BOT_INKTOMI, 97 211 '(Yahoo! Slurp)' => UA_BOT_YAHOO_SEARCH, 212 '(yahooseeker)' => UA_BOT_YAHOO_SEARCH, 98 213 '\s*([a-z]*(?:bot|spyder|crawl|crawler|spider)[a-z]*)' => UA_BOT_UNKNOWN 99 214 ); 100 215 101 216 $returned=array( 102 'crawler'=> '',103 'name' => '',104 'version'=> ''217 UA_DATA_BROWSER => '', 218 //'name' => '', 219 UA_DATA_BROWSER_VERSION => '' 105 220 ); 106 221 … … 110 225 if(preg_match('/'.$regExp.'/i',$userAgent,$result)) 111 226 { 227 // exclude some case 228 if($crawler==UA_BOT_UNKNOWN and preg_match('/(?:msiecrawler)/i', $userAgent)) 229 return($returned); 230 112 231 $returned=array( 113 'crawler'=> $crawler,114 'name' => $result[1],115 'version'=> isset($result[2])?$result[2]:''232 UA_DATA_BROWSER => $crawler, 233 //'name' => $result[1], #retrieved from the code 234 UA_DATA_BROWSER_VERSION => isset($result[2])?$result[2]:'' 116 235 ); 117 236 return($returned); … … 180 299 '(chrome)\/(\S*)' => UA_BROWSER_CHROME, 181 300 '(epiphany)\/(\S*)' => UA_BROWSER_EPIPHANY, 301 '(epiphany)' => UA_BROWSER_EPIPHANY, 182 302 '(galeon)\/(\S*)' => UA_BROWSER_GALEON, 183 303 '(orca)\/(\S*)' => UA_BROWSER_ORCA, … … 203 323 204 324 $returned=array( 205 'browser'=> UA_BROWSER_UNKNOWN,206 'name' => '',207 'version'=> ''325 UA_DATA_BROWSER => UA_BROWSER_UNKNOWN, 326 //'name' => '', 327 UA_DATA_BROWSER_VERSION => '' 208 328 ); 209 329 … … 214 334 { 215 335 //echo print_r($userAgent, true).print_r($result, true); 216 if(is_array($result) and count($result)> 2)336 if(is_array($result) and count($result)>=2) 217 337 { 218 338 if($browser==UA_BROWSER_SAFARI and preg_match('/iphone|ipad|ipod/i', $userAgent)) … … 220 340 221 341 $returned=array( 222 'browser'=> $browser,223 'name' => $result[1],224 'version'=> isset($result[2])?$result[2]:''342 UA_DATA_BROWSER => $browser, 343 //'name' => $result[1], 344 UA_DATA_BROWSER_VERSION => isset($result[2])?$result[2]:'' 225 345 ); 226 346 } … … 228 348 { 229 349 $returned=array( 230 'browser'=> UA_BROWSER_UNKNOWN,231 'name' => '',232 'version'=> ''350 UA_DATA_BROWSER => UA_BROWSER_UNKNOWN, 351 //'name' => '', 352 UA_DATA_BROWSER_VERSION => '' 233 353 ); 234 354 } … … 257 377 '(sunos)' => UA_OS_SUNOS, 258 378 '(blackberry)\s?([^;.]*);' => UA_OS_BLACKBERRY, 379 '(blackberry)' => UA_OS_BLACKBERRY, 259 380 '(symbianos)' => UA_OS_SYMBIAN_OS, 260 381 '(symbos)' => UA_OS_SYMBOS, … … 267 388 '(windows)\s?(\S*)[\;\)]' => UA_OS_WINDOWS, 268 389 '(windows)\s?(\S*)' => UA_OS_WINDOWS, 390 '(winnt)' => UA_OS_WINDOWS, 391 '(win98)' => UA_OS_WINDOWS, 392 '(win95)' => UA_OS_WINDOWS, 269 393 '(mac_powerpc)' => UA_OS_MACINTOSH, 270 394 '(cpu\siphone\sos)\s?(\S*)' => UA_OS_IOS, … … 276 400 '(playstation\s3)' => UA_OS_SONY_PS3, 277 401 '(playstation\sportable)' => UA_OS_SONY_PSP, 278 '(nintendo\sds)' => UA_OS_NINTENDO_DS 279 402 '(nintendo\sds)' => UA_OS_NINTENDO_DS, 403 '(cros)(?:\s*i\d*)(?:\s(\S*))' => UA_OS_CHROME_OS, 404 '(cros)' => UA_OS_CHROME_OS, 405 '(beos)' => UA_OS_BE_OS, 406 '(dragonfly)' => UA_OS_DRAGONFLY, 407 '(unix)' => UA_OS_UNIX, 408 '(darwin)' => UA_OS_DARWIN, 409 '(macintosh)' => UA_OS_MACINTOSH, 410 '(fedora)' => UA_OS_LINUX, 411 '(os\/2).*(warp(?:\s\S*));' => UA_OS_OS2, 412 '(os\/2)' => UA_OS_OS2, 413 '(amigaos)(?:\s(\S*))' => UA_OS_AMIGAOS, 414 '(amigaos)' => UA_OS_AMIGAOS 280 415 ); 281 416 282 417 $returned=array( 283 'os'=> UA_OS_UNKNOWN,284 'name' => '',285 'version'=> ''418 UA_DATA_OS => UA_OS_UNKNOWN, 419 //'name' => '', 420 UA_DATA_OS_VERSION => '' 286 421 ); 287 422 … … 292 427 { 293 428 $returned=array( 294 'os'=> $os,295 'name' => $result[1],296 'version'=> isset($result[2])?$result[2]:''429 UA_DATA_OS => $os, 430 //'name' => $result[1], 431 UA_DATA_OS_VERSION => isset($result[2])?$result[2]:'' 297 432 ); 298 433 switch($os) 299 434 { 300 435 case UA_OS_WINDOWS: 301 switch($returned[ 'version'])436 switch($returned[UA_DATA_OS_VERSION]) 302 437 { 303 438 case 'NT 5.0': … … 338 473 { 339 474 $engineList=array( 340 '(presto) \/(\S*)' => UA_ENGINE_PRESTO,341 '( gecko)\/(\S*)' => UA_ENGINE_GECKO,342 '( applewebkit)\/(\S*)' => UA_ENGINE_APPLEWEBKIT,343 '( webkit)\/(\S*)' => UA_ENGINE_WEBKIT,344 '( khtml)\/(\S*)' => UA_ENGINE_KHTML,345 '(trident) \/(\S*)' => UA_ENGINE_TRIDENT475 '(presto)(?:\/(\S*))*' => UA_ENGINE_PRESTO, 476 '(applewebkit)(?:\/(\S*))*' => UA_ENGINE_APPLEWEBKIT, 477 '(webkit)(?:\/(\S*))*' => UA_ENGINE_WEBKIT, 478 '(khtml)(?:\/(\S*))*' => UA_ENGINE_KHTML, 479 '(gecko)(?:\/(\S*))*' => UA_ENGINE_GECKO, 480 '(trident)(?:\/(\S*))*' => UA_ENGINE_TRIDENT 346 481 ); 347 482 348 483 $returned=array( 349 'engine'=> UA_ENGINE_UNKNOWN,350 'name' => '',351 'version'=> ''484 UA_DATA_ENGINE => UA_ENGINE_UNKNOWN, 485 //'name' => '', 486 UA_DATA_ENGINE_VERSION => '' 352 487 ); 353 488 … … 358 493 { 359 494 $returned=array( 360 'engine'=> $engine,361 'name' => $result[1],362 'version'=> isset($result[2])?$result[2]:''495 UA_DATA_ENGINE => $engine, 496 //'name' => $result[1], 497 UA_DATA_ENGINE_VERSION => isset($result[2])?$result[2]:'' 363 498 ); 364 499 return($returned); … … 368 503 return($returned); 369 504 } 370 371 372 } 505 } // GPCUserAgent class 373 506 374 507
Note: See TracChangeset
for help on using the changeset viewer.