<?php
/*
 * Simple Mefeedia Query URL Constructor. Responses in XML can easily be converted into
 * a more managable array using xml2array.
 * email paul@mefeedia.com for help.
 * 
 * This example will contstruct a search query to be submitted to http://mefeedia.com/query.php
 * then convert the response XML into 
 */

$search = new MefeediaSearch("120581");
//search for the keyword perez, page 1
$response_array $search->search("perez",1);
//Outputs an associative array
print_r($response_array);




class 
MefeediaSearch{
    var 
$url="http://mefeedia.com/query.php?";
    var 
$params=array();
    var 
$response=false;
    function 
MefeediaSearch($partnerid){
        
$this->params["partner"]=$partnerid;
        
$this->params["api"]="xml";
        
$this->params["date_start"]=false;
        
$this->params["date_end"]=false;
        
//$this->params["version"]=1;
    
}
    
    function 
dateRange($mmddyy_start,$mmddyy_end){
        
$this->params["date_start"]=$mmddyy_start;
        
$this->params["date_end"]=$mmddyy_end;
    }
    function 
search($query="",$page=1,$return_array=true){
        if(empty(
$query))
            
$query="EMPTY";
        
$this->params["q"]=$query;
        
$this->params["page"]=$page;
        
//Loop thru all the paramaters to create a query string
        
        
foreach($this->params as $key => $value){
            
$this->url.="&$key=".urlencode($value);
        }
        
//Make an http request
        
$this->response file_get_contents($this->url);
        if(
stristr($this->response,"response")){
            if(
$return_array)
                return 
$this->xml2array($this->response,0);
            else
                return 
$this->response;        
        }else{
            return 
false;
        }
    }
    
//Converts generic XML docs to an associative array
    
function xml2array($contents$get_attributes=1) {
        if(!
$contents) return array();
    
        if(!
function_exists('xml_parser_create')) {
            print 
"'xml_parser_create()' function not found!";
            return array();
        }
        
//Get the XML parser of PHP - PHP must have this module for the parser to work
        
$parser xml_parser_create();
        
xml_parser_set_option$parserXML_OPTION_CASE_FOLDING);
        
xml_parser_set_option$parserXML_OPTION_SKIP_WHITE);
        
xml_parse_into_struct$parser$contents$xml_values );
        
xml_parser_free$parser );
    
        if(!
$xml_values) return;//Hmm...
    
        //Initializations
        
$xml_array = array();
        
$parents = array();
        
$opened_tags = array();
        
$arr = array();
    
        
$current = &$xml_array;
    
        
//Go through the tags.
        
foreach($xml_values as $data) {
            unset(
$attributes,$value);//Remove existing values, or there will be trouble
    
            //This command will extract these variables into the foreach scope
            // tag(string), type(string), level(int), attributes(array).
            
extract($data);//We could use the array by itself, but this cooler.
    
            
$result '';
            if(
$get_attributes) {//The second argument of the function decides this.
                
$result = array();
                if(isset(
$value)) $result['value'] = $value;
    
                
//Set the attributes too.
                
if(isset($attributes)) {
                    foreach(
$attributes as $attr => $val) {
                        if(
$get_attributes == 1$result['attr'][$attr] = $val//Set all the attributes in a array called 'attr'
                        /**  :TODO: should we change the key name to '_attr'? Someone may use the tagname 'attr'. Same goes for 'value' too */
                    
}
                }
            } elseif(isset(
$value)) {
                
$result $value;
            }
    
            
//See tag status and do the needed.
            
if($type == "open") {//The starting of the tag '<tag>'
                
$parent[$level-1] = &$current;
    
                if(!
is_array($current) or (!in_array($tagarray_keys($current)))) { //Insert New tag
                    
$current[$tag] = $result;
                    
$current = &$current[$tag];
    
                } else { 
//There was another element with the same tag name
                    
if(isset($current[$tag][0])) {
                        
array_push($current[$tag], $result);
                    } else {
                        
$current[$tag] = array($current[$tag],$result);
                    }
                    
$last count($current[$tag]) - 1;
                    
$current = &$current[$tag][$last];
                }
    
            } elseif(
$type == "complete") { //Tags that ends in 1 line '<tag />'
                //See if the key is already taken.
                
if(!isset($current[$tag])) { //New Key
                    
$current[$tag] = $result;
    
                } else { 
//If taken, put all things inside a list(array)
                    
if((is_array($current[$tag]) and $get_attributes == 0)//If it is already an array...
                            
or (isset($current[$tag][0]) and is_array($current[$tag][0]) and $get_attributes == 1)) {
                        
array_push($current[$tag],$result); // ...push the new element into that array.
                    
} else { //If it is not an array...
                        
$current[$tag] = array($current[$tag],$result); //...Make it an array using using the existing value and the new value
                    
}
                }
    
            } elseif(
$type == 'close') { //End of tag '</tag>'
                
$current = &$parent[$level-1];
            }
        }
    
        return(
$xml_array);
    } 
}


?>