<?php
// conf
$path         "/parse";
$host         "api.udger.com";
$accesskey      "XXXXXX"// Your access key

// view source this file and exit
if ($_GET['source'] == "y") {     show_source(__FILE__);     exit; }

// header page
scriptheader();

// form
echo "<form method=\"get\">";
echo 
"<b>user agent string</b>: <i>(Paste any user agent string in this field and click 'Analyze', maybe select debug output view.)</i><br /><textarea cols=\"100\" rows=\"3\" name=\"uas\">".$_GET['uas']."</textarea><br />";
if (
$_GET['debug'] == 1) { $dactive " selected"$nactive "";} else { $nactive " selected"$dactive "";}
echo 
"Output: <select name=\"debug\">";
echo 
"<option value=\"0\"".$nactive.">Normal</option>";
echo 
"<option value=\"1\"".$dactive.">Debug</option>";
echo 
"</select>&nbsp;<input type=\"submit\" value=\"Analyze\">";
echo 
"</form>";

if (
$_GET['uas'] ) {
    
$url "http://".$host.$path;
    
$data = array('accesskey' => $accesskey'ua' => $_GET['uas']);

    if (
$_GET['debug']) { echo "<pre>\n---REQUEST---\nPOST\n".http_build_query($data)."\nto\n".$url."\n---END---\n\n</pre>"; }
    
    
$options = array(
        
'http' => array(
            
'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            
'method'  => 'POST',
            
'content' => http_build_query($data),
        ),
    );
    
$context  stream_context_create($options);
    
$result file_get_contents($urlfalse$context);    
    
    
    if (
$_GET['debug']) { echo "<pre>\n---RESPONSE---\n".htmlspecialchars(json_format($result))."\n---END---\n\n</pre>"; }
 
    
$result json_decode($resulttrue);
    echo 
"<b>System flag:</b> ".$result['flag']."<br />";
    if (
$result['flag'] == || $result['flag'] == 5) {
            echo 
"<b>ERROR text:</b> ".$result['errortext'];
    }
    else {
        echo 
"<b>Typ:</b> ".$result['info']['type']."<br />";
        if (
$result['info']['ua_url'] == "unknown") {
            
$ua_f $result['info']['ua_url']; 
        } 
        else { 
            
$ua_f "<a href=\"".$result['info']['ua_url']."\" target=\"_blank\">".$result['info']['ua_family']."</a>"
        }
        echo 
"<b>UA family:</b> <img src=\"".https_replace($result['info']['ua_icon'])."\" width=\"16\" height=\"16\" border=\"0\"> ".$ua_f."<br />";
        echo 
"<b>UA name:</b> ".$result['info']['ua_name']."<br />";
        if (
$result['info']['ua_company_url'] == "unknown") {
            
$ua_c $result['info']['ua_company']; 
        } 
        else { 
            
$ua_c "<a href=\"".$result['info']['ua_company_url']."\" target=\"_blank\">".$result['info']['ua_company']."</a>"
        }
        echo 
"<b>UA company:</b> ".$ua_c."<br />";
        echo 
"<b>OS family:</b> ".$result['info']['os_family']."<br />";
        if (
$result['info']['os_url'] == "unknown") {
            
$os_f $result['info']['os_name']; 
        } 
        else { 
            
$os_f "<a href=\"".$result['info']['os_url']."\" target=\"_blank\">".$result['info']['os_name']."</a>"
        }
        echo 
"<b>OS name:</b> <img src=\"".https_replace($result['info']['os_icon'])."\" width=\"16\" height=\"16\" border=\"0\"> ".$os_f."<br />";
        if (
$result['info']['os_company_url'] == "unknown") {
            
$os_c $result['info']['os_company']; 
        } 
        else { 
            
$os_c "<a href=\"".$result['info']['os_company_url']."\" target=\"_blank\">".$result['info']['os_company']."</a>"
        }
        echo 
"<b>OS company:</b> ".$os_c."<br />";
        if(
$result['uptodate']['controlled']) {
            echo 
"<b>Up to date:</b> ";
            if(
$result['uptodate']['is']) {
                echo 
"Ok, browser is up to date.<br />";
            }
            else {
                echo 
"Latest version: ".$result['uptodate']['ver']." -> <a href=\"".$result['uptodate']['url']."\">Update</a><br />";
            }
        }       
        if ( 
count($result['fragments']) >0) {
            echo 
"<b>Known fragments UA:</b><br />\n";
            while (list(
$key$value) = each ($result['fragments'])) {
                    echo 
htmlentities($key)." -> ".$value."<br />\n";
            }    
        }
        
    }
}

// end page
foot();

// ---- function ----
function https_replace($url) {
  if(
$_SERVER[HTTPS]) {
    
$url str_replace("http:""https:"$url);
  }
  return 
$url;
}
function  
scriptheader() {
    echo 
"<html>\n";
    echo 
"<head>\n";
    echo 
"<title>API example (PHP) :: udger.com</title>\n";
    echo 
"</head>\n";
    echo 
"<body>\n";
    echo 
"<b>udger.com API \"parse\" example (PHP)</b>\n<hr />";
}
function  
foot() {
    echo 
"<hr />";
    echo 
"<a href=\"".https_replace("http:")."//udger.com/products/cloud_parser\" target=\"_blank\">Cloud parser</a>:";
    echo 
"udger.com API example (PHP)</b> - <a href=\"?source=y\" target=\"_blank\">source code</a>";
    echo 
"</body></html>\n";
}


// original code: http://www.daveperrett.com/articles/2008/03/11/format-json-with-php/
// adapted to allow native functionality in php version >= 5.4.0

/**
* Format a flat JSON string to make it more human-readable
*
* @param string $json The original JSON string to process
*        When the input is not a string it is assumed the input is RAW
*        and should be converted to JSON first of all.
* @return string Indented version of the original JSON string
*/
function json_format($json) {
  if (!
is_string($json)) {
    if (
phpversion() && phpversion() >= 5.4) {
      return 
json_encode($jsonJSON_PRETTY_PRINT);
    }
    
$json json_encode($json);
  }
  
$result      '';
  
$pos         0;               // indentation level
  
$strLen      strlen($json);
  
$indentStr   "\t";
  
$newLine     "\n";
  
$prevChar    '';
  
$outOfQuotes true;

  for (
$i 0$i $strLen$i++) {
    
// Speedup: copy blocks of input which don't matter re string detection and formatting.
    
$copyLen strcspn($json$outOfQuotes " \t\r\n\",:[{}]" "\\\""$i);
    if (
$copyLen >= 1) {
      
$copyStr substr($json$i$copyLen);
      
// Also reset the tracker for escapes: we won't be hitting any right now
      // and the next round is the first time an 'escape' character can be seen again at the input.
      
$prevChar '';
      
$result .= $copyStr;
      
$i += $copyLen 1;      // correct for the for(;;) loop
      
continue;
    }
    
    
// Grab the next character in the string
    
$char substr($json$i1);
    
    
// Are we inside a quoted string encountering an escape sequence?
    
if (!$outOfQuotes && $prevChar === '\\') {
      
// Add the escaped character to the result string and ignore it for the string enter/exit detection:
      
$result .= $char;
      
$prevChar '';
      continue;
    }
    
// Are we entering/exiting a quoted string?
    
if ($char === '"' && $prevChar !== '\\') {
      
$outOfQuotes = !$outOfQuotes;
    }
    
// If this character is the end of an element,
    // output a new line and indent the next line
    
else if ($outOfQuotes && ($char === '}' || $char === ']')) {
      
$result .= $newLine;
      
$pos--;
      for (
$j 0$j $pos$j++) {
        
$result .= $indentStr;
      }
    }
    
// eat all non-essential whitespace in the input as we do our own here and it would only mess up our process
    
else if ($outOfQuotes && false !== strpos(" \t\r\n"$char)) {
      continue;
    }

    
// Add the character to the result string
    
$result .= $char;
    
// always add a space after a field colon:
    
if ($outOfQuotes && $char === ':') {
      
$result .= ' ';
    }

    
// If the last character was the beginning of an element,
    // output a new line and indent the next line
    
else if ($outOfQuotes && ($char === ',' || $char === '{' || $char === '[')) {
      
$result .= $newLine;
      if (
$char === '{' || $char === '[') {
        
$pos++;
      }
      for (
$j 0$j $pos$j++) {
        
$result .= $indentStr;
      }
    }
    
$prevChar $char;
  }

  return 
$result;
}

?>