Jump to content

Problem with Parsing Array!!!


natasha_thomas

Recommended Posts

Folks,

 

I want to parse a particular element from an array and nothing else.

 

Here is the Class (RecursiveTwitterSearch.php):

 

<?
/**
* Wrapper class around the Twitter Search API for PHP
* Based on the class originally developed by David Billingham
* and accessible at http://twitter.slawcup.com/twitter.class.phps
* @author Ryan Faerman <[email protected]>
* @version 0.2
* @package PHPTwitterSearch
*/
class TwitterSearch {
/**
 * Can be set to JSON (requires PHP 5.2 or the json pecl module) or XML - json|xml
 * @var string
 */
var $type = 'json';

/**
 * It is unclear if Twitter header preferences are standardized, but I would suggest using them.
 * More discussion at http://tinyurl.com/3xtx66
 * @var array
 */
var $headers=array('X-Twitter-Client: PHPTwitterSearch','X-Twitter-Client-Version: 0.1','X-Twitter-Client-URL: http://ryanfaerman.com/twittersearch');

/**
 * Recommend setting a user-agent so Twitter knows how to contact you inc case of abuse. Include your email
 * @var string
 */
var $user_agent='';

/**
 * @var string
 */
var $query='';

/**
 * @var array
 */
var $responseInfo=array();

/**
 * Use an ISO language code. en, de...
 * @var string
 */
var $lang;

/**
 * The number of tweets to return per page, max 100
 * @var int
 */
var $rpp;

/**
 * The page number to return, up to a max of roughly 1500 results
 * @var int
 */
var $page;

/**
 * Return tweets with a status id greater than the since value
 * @var int
 */
var $since;

/**
 * Returns tweets by users located within a given radius of the given latitude/longitude, where the user's location is taken from their Twitter profile. The parameter value is specified by "latitide,longitude,radius", where radius units must be specified as either "mi" (miles) or "km" (kilometers)
 * @var string
 */
var $geocode;

/**
 * When "true", adds "<user>:" to the beginning of the tweet. This is useful for readers that do not display Atom's author field. The default is "false"
 * @var boolean
 */
var $show_user = false;

/**
* @param string $query optional
*/
function TwitterSearch($query=false) {
	$this->query = $query;
}

/**
* Find tweets from a user
* @param string $user required
* @return object
*/
function from($user) {
	$this->query .= ' from:'.str_replace('@', '', $user);
	return $this;
}

/**
* Find tweets to a user
* @param string $user required
* @return object
*/
function to($user) {
	$this->query .= ' to:'.str_replace('@', '', $user);
	return $this;
}

/**
* Find tweets referencing a user
* @param string $user required
* @return object
*/
function about($user) {
	$this->query .= ' @'.str_replace('@', '', $user);
	return $this;
}

/**
* Find tweets containing a hashtag
* @param string $user required
* @return object
*/
function with($hashtag) {
	$this->query .= ' #'.str_replace('#', '', $hashtag);
	return $this;
}

/**
* Find tweets containing a word
* @param string $user required
* @return object
*/
function contains($word) {
	$this->query .= ' '.$word;
	return $this;
}

/**
* Set show_user to true
* @return object
*/
function show_user() {
	$this->show_user = true;
	return $this;
}

/**
* @param int $since_id required
* @return object
*/
function since($since_id) {
	$this->since = $since_id;
	return $this;
}

/**
* @param int $language required
* @return object
*/
function lang($language) {
	$this->lang = $language;
	return $this;
}

/**
* @param int $n required
* @return object
*/
function rpp($n) {
	$this->rpp = $n;
	return $this;
}

/**
* @param int $n required
* @return object
*/
function page($n) {
	$this->page = $n;
	return $this;
}

/**
* @param float $lat required. lattitude
* @param float $long required. longitude
* @param int $radius required. 
* @param string optional. mi|km
* @return object
*/
function geocode($lat, $long, $radius, $units='mi') {
	$this->geocode = $lat.','.$long.','.$radius.$units;
	return $this;
}

/**
* Build and perform the query, return the results.
* @param $reset_query boolean optional.
* @return object
*/
function results($reset_query=true) {
	$request  = 'http://search.twitter.com/search.'.$this->type;
	$request .= '?q='.urlencode($this->query);

	if(isset($this->rpp)) {
		$request .= '&rpp='.$this->rpp;
	}

	if(isset($this->page)) {
		$request .= '&page='.$this->page;
	}

	if(isset($this->lang)) {
		$request .= '&lang='.$this->lang;
	}

	if(isset($this->since)) {
		$request .= '&since_id='.$this->since;
	}

	if($this->show_user) {
		$request .= '&show_user=true';
	}

	if(isset($this->geocode)) {
		$request .= '&geocode='.$this->geocode;
	}

	if($reset_query) {
		$this->query = '';
	}

	return $this->objectify($this->process($request))->results;
}

/**
* Returns the top ten queries that are currently trending on Twitter.
* @return object
*/
function trends() {
	$request  = 'http://search.twitter.com/trends.json';

	return $this->objectify($this->process($request));
}

/**
 * Internal function where all the juicy curl fun takes place
 * this should not be called by anything external unless you are
 * doing something else completely then knock youself out.
 * @access private
 * @param string $url Required. API URL to request
 * @param string $postargs Optional. Urlencoded query string to append to the $url
 */
function process($url, $postargs=false) {
	$ch = curl_init($url);
	if($postargs !== false) {
		curl_setopt ($ch, CURLOPT_POST, true);
		curl_setopt ($ch, CURLOPT_POSTFIELDS, $postargs);
        }
        
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        curl_setopt($ch, CURLOPT_NOBODY, 0);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_USERAGENT, $this->user_agent);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);

        $response = curl_exec($ch);
        
        $this->responseInfo=curl_getinfo($ch);
        curl_close($ch);
        
        if( intval( $this->responseInfo['http_code'] ) == 200 )
		return $response;    
        else
            return false;
}

/**
 * Function to prepare data for return to client
 * @access private
 * @param string $data
 */
function objectify($data) {
	if( $this->type ==  'json' )
		return (object) json_decode($data);

	else if( $this->type == 'xml' ) {
		if( function_exists('simplexml_load_string') ) {
			$obj = simplexml_load_string( $data );

			$statuses = array();
			foreach( $obj->status as $status ) {
				$statuses[] = $status;
			}
			return (object) $statuses;
		}
		else {
			return $out;
		}
	}
	else
		return false;
}
}






class RecursiveTwitterSearch extends TwitterSearch {
    var $request_count = 0;
    var $max_request_count = 5;
    var $max_id;

    function recursive_results() {
        $request  = 'http://search.twitter.com/search.'.$this->type;
        $request .= '?q='.urlencode($this->query);

        if(isset($this->rpp)) {
            $request .= '&rpp='.$this->rpp;
        }

        if(isset($this->page)) {
            $request .= '&page='.$this->page;
        }

        if(isset($this->lang)) {
            $request .= '?='.$this->lang;
        }

        if(isset($this->since)) {
            $request .= '&since_id='.$this->since;
        }

        if($this->show_user) {
            $request .= '&show_user=true';
        }

        if(isset($this->geocode)) {
            $request .= '&geocode='.$this->geocode;
        }

        if(isset($this->max_id)) {
            $request .= '&max_id='.$this->max_id;
        }

        $response = $this->objectify($this->process($request));
        $this->request_count++;
        if ($response) {
            $results = $response->results;
            if(!empty($response->next_page)) {
                preg_match('|\?page=([0-9]*)&max_id=([0-9]*)&|', $response->next_page, $matches);
                $this->page = $matches[1];
                $this->max_id = $matches[2];
                if ($this->request_count < $this->max_request_count) {
                    $results = array_merge($results, $this->recursive_results());
                }
            }
            return $results;
        }
        else return false;
    }
    function max_request_count($n) {
        $this->max_request_count = $n;
        return $this;
    }
}











?>

 

 

 

Here is how i am calling it:

 

<?php
require ("RecursiveTwitterSearch.php");
    $rts = new RecursiveTwitterSearch('paintball mask');
    echo '<pre>';
    print_r($rts->recursive_results());
    echo '</pre>';
    echo 'It took ' . $rts->request_count . ' request(s) to get this result.';
?>

 

 

If you observer the Output, u will see lot of array, i want to extract only "[text]" portion. 

 

So the desired output should be like:

vPaintball Mask http://bit.ly/czBA6S

The Paintball Republic does a short video about mask safety. LEARN. http://fb.me/KkMvjDWF

airsoft vs paintball mask http://goo.gl/fb/tyoxk

@mmorgansmithh like wearing a paintball mask on your head to starbucks

Tippmann US Army Ranger Paintball Goggle Mask - Camo: Tippmann US Army Ranger Paintball Goggle Mask - Camo ... http://bit.ly/9hFi3p

 

and so on.........

 

 

 

Infact, i prfer to use "foreach" to each each element so i can do further operation on it.

 

Can anyone help to achieve this?

 

Natty

Link to comment
https://forums.phpfreaks.com/topic/219297-problem-with-parsing-array/
Share on other sites

You can simply loop over the results like so:

 

<?php
require ("RecursiveTwitterSearch.php");
$rts = new RecursiveTwitterSearch('paintball mask');
foreach($rts->recursive_results() as $result) {
    echo $result->text . "<br />";
}
    
?>

You can simply loop over the results like so:

 

<?php
require ("RecursiveTwitterSearch.php");
$rts = new RecursiveTwitterSearch('paintball mask');
foreach($rts->recursive_results() as $result) {
    echo $result->text . "<br />";
}
    
?>

 

 

So sweet Tomm....

 

One more thing, form the outputted Arrary, i do not want the words that have "@" OR "http://" in them, i just want to replace them with a Space.

 

How can i achieve this?

You could use str_replace to replace those with spaces

 

But its not that straight, as i first have to find a pattern like...

 

ANy word which has "@" or "http" occuring anywhere in it, such word should be replaced with Space.

 

This is what am looking for.

str_replace should do what you are wanting. Assuming I am understand what you are needing.

 

<?php
$str = "This is @some string that contains http://foo.com several of @the things you were wanting removed http://bar.com";
$replace = array('@','http://');
echo str_replace($replace," ",$str);
?>

 

outputs:

This is some string that contains foo.com several of the things you were wanting removed bar.com

str_replace should do what you are wanting. Assuming I am understand what you are needing.

 

<?php
$str = "This is @some string that contains http://foo.com several of @the things you were wanting removed http://bar.com";
$replace = array('@','http://');
echo str_replace($replace," ",$str);
?>

 

outputs:

This is some string that contains foo.com several of the things you were wanting removed bar.com

 

What i am looking for is, whenever "@" or "http" occures anywhere in any word, i want to just drop that word.

 

So as per ur Example string my desired output should be:

Your Example: "This is @some string that contains http://foo.com several of @the things you were wanting removed http://bar.com"

 

My Desired Output "This is string that contains  several of @the things you were wanting removed "

 

Observe that i have dropped all the Words which have @ and http in them.

 

Its what i am looking for..

 

Natasha T

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.