954,587 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Store last tweet ID of my followers which @mention me and have a hashtag.

Hi,

I am using the twitter api to retrieve some data.
I'd like store my followers latest status tweet containing that hashtag #RT and the mention of my name.

The staus ID can be retrieved via $xml->status->id.

In the code below I'd like to php to search for certain words (e.g. @me and #rt) in the $text variable and tehn return thos status Ids so I can store it in a mysql table.

Any help is greatly appreciated.

<?php
$xmldata = 'https://api.twitter.com/1/statuses/followers/bbcclick.xml';
$open = fopen($xmldata, 'r');
$content = stream_get_contents($open);
fclose($open);
$xml = new SimpleXMLElement($content);


foreach ($xml->user as $data)
{

$text = '$data->status->text';


};


?>
ayathullah
Newbie Poster
9 posts since Jan 2011
Reputation Points: 10
Solved Threads: 0
 

Remove the quotes around $data->status->text. You can use strpos() to check if $text contains the things you're looking for. If it does, store the id, store it and break :)

twiss
Veteran Poster
1,005 posts since Apr 2010
Reputation Points: 177
Solved Threads: 101
 

preg_match() could also be used.

diafol
Rhod Gilbert Fan (ardav)
Moderator
7,792 posts since Oct 2006
Reputation Points: 1,170
Solved Threads: 1,080
 

Thanks for the quick response guys,

Is there any chance you guys can show me some exemplar code as I am quite new to XMl and PHP loops.

Thanks,

ayathullah
Newbie Poster
9 posts since Jan 2011
Reputation Points: 10
Solved Threads: 0
 

strpos() is quicker than preg_match().
See the php manual for examples:

http://www.php.net/manual/en/function.strpos.php

diafol
Rhod Gilbert Fan (ardav)
Moderator
7,792 posts since Oct 2006
Reputation Points: 1,170
Solved Threads: 1,080
 

I've decided to store all the tweets with their IDS and then use another script to delete those records which do not caontain the content I am searching for.

I have the code below but it looks like the foreach() functiononly stores the first xml node data not the 200 or so that it should.

Any ideas?

<?php
$xmldata = 'https://api.twitter.com/1/statuses/followers/bbcclick.xml';
$open = fopen($xmldata, 'r');
$content = stream_get_contents($open);
fclose($open);
$xml = new SimpleXMLElement($content);


foreach ($xml->user as $data)
{

$text = $data->status->text;
$id = $data->status->id;

mysql_query("INSERT INTO data ( ID, text)

VALUES ('$id','$text')");

};


?>
ayathullah
Newbie Poster
9 posts since Jan 2011
Reputation Points: 10
Solved Threads: 0
 

If you could give a sample of the xml file as well? Otherwise I'd be guessing.

diafol
Rhod Gilbert Fan (ardav)
Moderator
7,792 posts since Oct 2006
Reputation Points: 1,170
Solved Threads: 1,080
 

It would be best for you to just vist the url HERE But I have copied some of the data below.

<users type="array"><user><id>311468744</id><name>Chris Sparks</name><screen_name>jurassic_spark</screen_name><location>Durban, KZN, ZA</location><description>My first ancestor was Jurassic Spark. I am his human reincarnation.</description><profile_image_url>http://a2.twimg.com/profile_images/1382838679/Picture0011Chris_normal.jpg</profile_image_url><url/><protected>false</protected><followers_count>0</followers_count><profile_background_color>C0DEED</profile_background_color><profile_text_color>333333</profile_text_color><profile_link_color>0084B4</profile_link_color><profile_sidebar_fill_color>DDEEF6</profile_sidebar_fill_color><profile_sidebar_border_color>C0DEED</profile_sidebar_border_color><friends_count>11</friends_count><created_at>Sun Jun 05 14:17:30 +0000 2011</created_at><favourites_count>0</favourites_count><utc_offset/><time_zone/><profile_background_image_url>http://a0.twimg.com/images/themes/theme1/bg.png</profile_background_image_url><profile_background_tile>false</profile_background_tile><profile_use_background_image>true</profile_use_background_image><notifications/><geo_enabled>false</geo_enabled><verified>false</verified><following/><statuses_count>0</statuses_count><lang>en</lang><contributors_enabled>false</contributors_enabled><follow_request_sent/><listed_count>0</listed_count><show_all_inline_media>false</show_all_inline_media><default_profile>true</default_profile><default_profile_image>false</default_profile_image><is_translator>false</is_translator></user><user><id>297563437</id><name>Mike Burns</name><screen_name>mike_burns1</screen_name><location>Oxford, UK</location><description>Undergrad in PPE at Oxford University</description><profile_image_url>http://a2.twimg.com/profile_images/1350960268/Michael_normal.jpg</profile_image_url><url/><protected>false</protected><followers_count>23</followers_count><profile_background_color>C0DEED</profile_background_color><profile_text_color>333333</profile_text_color><profile_link_color>0084B4</profile_link_color><profile_sidebar_fill_color>DDEEF6</profile_sidebar_fill_color><profile_sidebar_border_color>C0DEED</profile_sidebar_border_color><friends_count>62</friends_count><created_at>Thu May 12 18:30:28 +0000 2011</created_at><favourites_count>1</favourites_count><utc_offset/><time_zone/><profile_background_image_url>http://a0.twimg.com/images/themes/theme1/bg.png</profile_background_image_url><profile_background_tile>false</profile_background_tile><profile_use_background_image>true</profile_use_background_image><notifications/><geo_enabled>true</geo_enabled><verified>false</verified><following/><statuses_count>24</statuses_count><lang>en</lang><contributors_enabled>false</contributors_enabled><follow_request_sent/><listed_count>0</listed_count><show_all_inline_media>true</show_all_inline_media><default_profile>true</default_profile><default_profile_image>false</default_profile_image><is_translator>false</is_translator><status><created_at>Fri Jun 03 14:56:49 +0000 2011</created_at><id>76663633983180801</id><text>Just posted a photo http://instagr.am/p/FHu-J/</text><source><a href="http://instagr.am" rel="nofollow">Instagram</a></source><truncated>false</truncated><favorited>false</favorited><in_reply_to_status_id/><in_reply_to_user_id/><in_reply_to_screen_name/><retweet_count>0</retweet_count><retweeted>false</retweeted><geo/><coordinates/><place/><contributors/></status></user>
ayathullah
Newbie Poster
9 posts since Jan 2011
Reputation Points: 10
Solved Threads: 0
 

I got it to work with static text from the link you provided:

$xml = new SimpleXMLElement($content);
 

foreach ($xml->user as $data){
	$text = $data->status->text;
	if(strpos($text,'@me')!==false && strpos($text,'#RT')!==false){
		$id = $data->status->id;
		echo $id . " " . $text . "";
	}
}


However, my php not set up to deal with opening files in https, so had to use a text input from said page.

I need to uncomment the;extension=php_openssl.dll line in php.ini

//HA HA just tried to edit my php.ini and found that the line was missing!!
Just added it to the file, uncommented it and restarted Apache.
The code now works for me on localhost (BTW I am using XAMPP for Windows 1.1.2.2, just in case you have the same problem).

diafol
Rhod Gilbert Fan (ardav)
Moderator
7,792 posts since Oct 2006
Reputation Points: 1,170
Solved Threads: 1,080
 

You may use HTTP instead of HTTPS but I still cannot get it to loop and store the data in my MySQL table. HELP! :-)

ayathullah
Newbie Poster
9 posts since Jan 2011
Reputation Points: 10
Solved Threads: 0
 

How's this?

<?php
$xmldata = 'https://api.twitter.com/1/statuses/followers/bbcclick.xml';
$content = file_get_contents($xmldata);
$xml = new SimpleXMLElement($content);
foreach ($xml->user as $data){
	$text = $data->status->text;
	if(strpos($text,'@me')!==false && strpos($text,'#RT')!==false){
		$id = $data->status->id;
                $id = mysql_real_escape_string($id);
                $text = mysql_real_escape_string($text);
                $concat[] = "('$id','$text')"; 
	}
}
if(isset($concat)){
   $vals = implode(',',$concat);
   mysql_query("INSERT INTO `data` ( `ID`, `text`) VALUES $vals");
} 

?>


Not tested...

diafol
Rhod Gilbert Fan (ardav)
Moderator
7,792 posts since Oct 2006
Reputation Points: 1,170
Solved Threads: 1,080
 

The hash in '#RT' makes that line appear as a comment. Any ideas how to get rid of that.

ayathullah
Newbie Poster
9 posts since Jan 2011
Reputation Points: 10
Solved Threads: 0
 

The loop doesn't seem to store the data into the mysql table.

ayathullah
Newbie Poster
9 posts since Jan 2011
Reputation Points: 10
Solved Threads: 0
 

As long as you have a quote around each value, it shouldn't matter.

$concat[] = "('$id','$text')";


this places $text within quotes, so should be safe.

Are you saying that '#' stops the strpos?

Show the code you're using with connection statements (use xxx or similar instead of username/pw).

diafol
Rhod Gilbert Fan (ardav)
Moderator
7,792 posts since Oct 2006
Reputation Points: 1,170
Solved Threads: 1,080
 

Post your code perhaps? It's hard to guess the problem just by knowing there is one. Edit: oops, didn't see page 2 :)

twiss
Veteran Poster
1,005 posts since Apr 2010
Reputation Points: 177
Solved Threads: 101
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: