<?php

// conf
$accesskey      "XXXXXX"// Your access key

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

// header page
scriptheader();

// form
echo "Paste any user agent string and/or IP address in this fields and click 'Analyze'.<br />";
echo 
"<form method=\"get\">";
echo 
"<b>user agent string</b>: <br />";
echo 
"<textarea cols=\"100\" rows=\"2\" name=\"ua\">".$_GET['ua']."</textarea><br />";
echo 
"<b>IP address</b>: (v.4 or v.6)<br />";
echo 
"<textarea cols=\"100\" rows=\"2\" name=\"ip\">".$_GET['ip']."</textarea><br /><input type=\"submit\" value=\"Analyze\">";
echo 
"</form>";

if (
$_GET['ua'] || $_GET['ip']) {
    
$url "https://api.udger.com/v3/parse?accesskey=".$accesskey."&ua=".urlencode($_GET['ua'])."&ip=".urlencode($_GET['ip'])."";

    echo 
"<pre>\n---REQUEST---\nGET\n".$url."\n---END---\n\n</pre>";     
   
    
$result file_get_contents($url);       
    
    echo 
"<pre>\n---RESPONSE---\n".json_format($result)."\n---END---\n\n</pre>";  
    
}

// end page
foot();


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 v3 'parse' example (PHP)</b>\n<hr />";
}
function  
foot() {
    echo 
"<hr />";
    echo 
"<a href=\"https://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;
}

?>