<?
    header
("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
    
header("Cache-Control: no-cache, must-revalidate");
    
header("Content-Type: text/javascript; charset=utf-8");
    
    function 
get_remotefile($url$mdate) {

        if (
$GLOBALS["s_url"] && !strpos(" ".$GLOBALS["s_url"], "http://")) $GLOBALS["s_url"] .= $url;
        else 
$GLOBALS["s_url"] = $url;

        
$url_stuff parse_url($url);

        if (!
$fp = @fsockopen ($url_stuff['host'], (($url_stuff['port'])?($url_stuff['port']):("80")), $errno$errstr2)) return false;
        else {

            if (
$url_stuff['query']) $url_stuff['path'] .= "?";
            
$header "GET ".$url_stuff['path'].$url_stuff['query']." HTTP/1.0";
            
$header .= "\r\nHost: ".$url_stuff['host'];
            
$header .= "\r\nIf-Modified-Since: $mdate";
            
$header .= "\r\n\r\n";

            
fputs ($fp$header);

            unset(
$header$body$lmdate);
            
$act false;
            
$cnt 0;

            
socket_set_timeout($fp4);

            while ((!
feof($fp))) {

                if (
$cnt == 100) break;
                
$line fgets ($fp,1024);
                
$ss socket_get_status($fp);
                if (
$ss[timed_out]) return false;

                if (!
$act) {
                    if (
strpos($line"\r\n"0) == 0$act true;
                    if ((
$n1 strpos($line"Last-Modified:")) !== false$lmdate trim(substr($line$n1 14));
                    if ((
$n2 strpos($line"Location:")) !== false) { $loc trim(substr($line$n2 9)); break; }
                    
$header .= $line;
                } else {
                    
$body .= $line;
                    if (
strpos($line"</user>") !== false$cnt++;
                    if (
strpos($line"</page>") !== false$cnt++;
                }
            }
            
fclose ($fp);
        }

        if (
$loc) list($header$body$lmdate) = get_remotefile($loc$mdate);

        return array(
$header$body$lmdate);
    }

    function 
get_sock_status($str) {
        if (
strpos($str"200 OK")) return 200;
        if (
strpos($str"304 Not Modified")) return 304;
        else return 
404;
    }

    function 
get_timestamp2() {
        list(
$usec) = explode(" ",microtime());
        return 
date("ymdHis",time()).substr($usec,26);
    }

    function 
str_tag_on($str) {
        
$str str_replace("&amp;","&"$str);
        
$str str_replace("&lt;","<"$str);
        return 
str_replace("&gt;",">"$str);
    }

    function 
xml_parser($url$mdate) {

        if (
$mdate == "0"$mdate "";

        list(
$header$body$lmdate$xmlinfo) = @get_remotefile($url$mdate);

        
$st get_sock_status($header);

        
$body_check strtoupper(substr($body0strpos($body"?>")));
        
$encoding trim(str_replace("\""""substr($body_checkstrpos($body_check"ENCODING=\"")+9)));

        if (
strpos(strtoupper($header), "UTF-8")) $encoding "UTF-8";
        if (
strpos(strtoupper($header), "EUC-JP")) $encoding "EUC-JP";
        if (
strpos(strtoupper($header), "ISO-8859-1")) $encoding "ISO-8859-1";
        if (
$st == 200) {
            if (
$encoding == "EUC-JP") {
                
$body iconv("euc-jp""utf-8"$body);
            } else if (
$encoding != "UTF-8" && $encoding != "ISO-8859-1") {
                
$body iconv("euc-kr""utf-8"$body);
            }
            
$vals xml_parser_into_struct($body);
        }
        return array(
$st$header$body$lmdate$vals);
    }

    function 
xml_parser_into_struct($body) {
        
$h_set = array();
        
$r_set = array();

        while (
$n1 strpos($body"<![CDATA[")) {
            
$n2 strpos($body"]]>");
            if (!
$n2 || $n1 $n2) break;
            
$stamp get_timestamp2();
            
$cval substr($body$n1+9$n2-$n1-9);
            
$body str_replace("<![CDATA[".$cval."]]>"$stamp$body);
            
$h_set[$stamp] = trim($cval);
        }

        
$b_set explode("<"$body);

        foreach (
$b_set as $k => $row) {
            
$inp = array();
            
$att_set = array();

            
$row trim($row);
            if (!
$row) continue;

            if (
substr($row,0,1)=="/") {
                if (
substr($row1,5) == "user>") { $inp[tag] = "USER"$inp[type] = "close"array_push($r_set$inp); }
                if (
substr($row1,5) == "page>") { $inp[tag] = "PAGE"$inp[type] = "close"array_push($r_set$inp); }
                continue;
            }

            list(
$tag_inf$val) = explode(">"$row);

            if (
$tag_nid strpos($tag_inf" ")) {
                
$tag substr($tag_inf0$tag_nid);
                
$tag_inf substr($tag_inf$tag_nid);

                while (
$tag_n1 strpos($tag_inf"=")) {
                    
$tag_n2 strpos($tag_inf"\""$tag_n1+2);
                    
$att_inf substr($tag_inf1$tag_n2);
                    
$tag_inf substr($tag_inf$tag_n2+1);
                    
$att_var trim(strtoupper(substr($att_inf0$tag_n1-1)));
                    
$att_val trim(str_tag_on(str_replace("\""""substr($att_inf$tag_n1+1))));
                    
$att_set[$att_var] = $att_val;
                }

                
$inp[attributes] = $att_set;

            } else {
                
$tag $tag_inf;
            }

            if (!
$tag || $tag == "?XML") continue;

            
$tag strtoupper($tag);
            
$inp[tag] = $tag;

            
$val trim($val);

            if (isset(
$h_set[$val])) $val $h_set[$val];
            else if (
$val$val str_tag_on($val);

            
$inp[value] = str_replace("document.cookie""document.&#99;ookie"$val);

            
array_push($r_set$inp);
        }

        return 
$r_set;
    }

    function 
str_dbi_check($array) {
        if (
count($array)) {
            while (list(
$str$val) = each($array)) {
                
$array[$str] = str_replace("'""&#39;"$val);
            }
        }
        return 
$array;
    }


    function 
get_siteinfo($xmlinfo) {
        foreach (
$xmlinfo as $k => $row) {
            if (!
$st && $row[tag] == "TITLE"$st $row[value];
            else if (!
$sl && $row[tag] == "LINK"$sl $row[value];
            else if (!
$sd && $row[tag] == "DESCRIPTION"$sd $row[value];
            else if (
$row[tag] == "ITEM") break;
        }

        return array(
$st$sl$sd);
    }


    function 
get_count($xmlinfo) {
        foreach (
$xmlinfo as $k => $row) {
            if (!
$st && $row[tag] == "NUMUSERS"$st $row[value];
        }
        return 
$st;
    }

    function 
get_show($xmlinfo) {
        
$article = array();
        foreach (
$xmlinfo as $k => $row) {
            if (
$row[tag] == "USERID"$bt $row[value];
            else if (
$row[tag] == "URL"$bl $row[value];
            else if (
$row[tag] == "TIMEAGO"$bd $row[value];
            else if (
$row[tag] == "USER" && $row[type] == "close") {
                
array_push($article,
                    array(
                        
"userid" => $bt
                        
,"url" => $bl
                        
,"timeago" => $bd
                    
)
                );
            }
        }

        return 
$article;
    }

    function 
get_popular($xmlinfo) {
        
$article = array();
        foreach (
$xmlinfo as $k => $row) {
            if (
$row[tag] == "URL"$bt $row[value];
            else if (
$row[tag] == "WEIGHT"$bl $row[value];
            else if (
$row[tag] == "PAGE" && $row[type] == "close") {
                
array_push($article,
                    array(
                        
"url" => $bt
                        
,"weight" => $bl
                    
)
                );
            }
        }
        return 
$article;
    }


    if(
$view){
        
$xml_url 'http://whos.amung.us/api/xml/'.$view.'/'.$key;
        list(
$st$header$body$lmdate$xmlinfo) = xml_parser($xml_url,"");
        if (
$xmlinfo) {
            switch (
$view) {
                case 
'show':
                    
$xml get_show($xmlinfo);
                    break;
                case 
'popular':
                    
$xml get_popular($xmlinfo);
                    break;
                case 
'count':
                    
$xml get_count($xmlinfo);
                    break;
            }
        } else {
            unset(
$xml);
            
header('HTTP/1.1 500 Internal Server Error');
            
header('Status: 500 Internal Server Error');
      if(
$view != 'count') echo 'Sorry, Internal Server Error';
            exit;
        }
        
//print_r($xml); exit;

        
if($view != 'count'){
            
            
$comma '';
            echo 
'Whosamungus.json = [';
            foreach (
$xml as $k => $row) {
                
$row str_dbi_check($row);
                if(
$view == 'show') echo $comma.'["'.$row[userid].'", "'.$row[url].'", "'.$row[timeago].'"]';
                elseif(
$view == 'popular') echo $comma.'["'.$row[weight].'", "'.$row[url].'"]';
                
                
$comma ',';
            }
            echo 
'];';
        } else {
            
header("Content-Type: text/html; charset=utf-8");
            echo 
$xml;
        }
    }

?>