dropfaith Posted February 20, 2017 Share Posted February 20, 2017 So i got this pulling twitter data raw i cant for the life of me figure out how to explode items $text(tweet body and seperate the hashtags and enter them into a database (database hase 3 fields for hashtags) <?php /** database cred **/ define('DBHOST','localhost'); define('DBUSERNAME','***'); define('DBPASSWORD','**'); define('DBNAME','roguebro_tweet'); define('TWEETTABLE','twitter'); /** end database cred **/ /** Set access tokens here - see: https://dev.twitter.com/apps/ **/ require_once('TwitterAPIExchange.php'); $settings = array( 'oauth_access_token' => "831981818408677377-FexWOmvCyaZYWt3TYwmodmx3gMmFIqx", 'oauth_access_token_secret' => "L1vwbaBjsUivKn5NYVmGgve6V1lSP5THvjBk3LiadHyOj", 'consumer_key' => "t31OianjtopHhDEdeBAjWPqj3", 'consumer_secret' => "zFZpwrMl31BShY6CluYapaZl0K1CQPpsagBjVCMkTs2GtWHhRm" ); /** end Twitter Credentials **/ $url = "https://api.twitter.com/1.1/statuses/user_timeline.json"; $requestMethod = "GET"; $getfield = '?screen_name=MCoCTrucos&entities=on&count=20 -rt'; $twitter = new TwitterAPIExchange($settings); $string = json_decode($twitter->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest(),$assoc = TRUE); if($string["errors"][0]["message"] != "") {echo "<h3>Sorry, there was a problem.</h3><p>Twitter returned the following error message:</p><p> <em>".$string[errors][0]["message"]."</em></p>";exit();} foreach($string as $items) { echo "Tweeted by: ". $items['user']['name']."<br />"; echo "Screen name: ". $items['user']['screen_name']."<br />"; echo "Tweet: ". $items['text']."<br />"; echo "Time and Date of Tweet: ".$items['created_at']."<br />"; echo "Tweet ID: ".$items['id_str']."<br />"; echo "Followers: ". $items['user']['followers_count']."<br /><hr />"; echo insertTweets($items['user']['name'],$items['user']['screen_name'],$items['text'],$items['created_at'],$items['id_str'],$items['user']['followers_count']); $tags = $items['text']; $hashtags = explode("#", $tags); } function insertTweets($name,$screen_name,$text,$created_at,$id_str,$followers_count){ $mysqli = new mysqli(DBHOST, DBUSERNAME, DBPASSWORD, DBNAME); if ($mysqli->connect_errno) { return 'Failed to connect to Database: (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error; } $prepareStmt='INSERT INTO '.DBNAME.'.'.TWEETTABLE.' (name, screen_name, text, created_at, id_str, followers_count) VALUES (?,?,?,?,?,?);'; if ($insert_stmt = $mysqli->prepare($prepareStmt)){ $insert_stmt->bind_param('ssssid', $name,$screen_name,$text,$created_at,$id_str,$followers_count); if (!$insert_stmt->execute()) { $insert_stmt->close(); return 'Tweet Creation cannot be done at this moment.'; }elseif($insert_stmt->affected_rows>0){ $insert_stmt->close(); return 'Tweet Added.<br><br>'; }else{ $insert_stmt->close(); return 'No Tweet were Added.'; } }else{ return 'Prepare failed: (' . $mysqli->errno . ') ' . $mysqli->error; } } ?> Quote Link to comment Share on other sites More sharing options...
dalecosp Posted February 20, 2017 Share Posted February 20, 2017 I'd try preg_match(): function insertTweets($name,$screen_name,$text,$created_at,$id_str,$followers_count){ $get_hashtags = preg_match("%#[\w_]*\s%",$text,$tags); //now $tags is an array of hashtags //etc... Quote Link to comment Share on other sites More sharing options...
dropfaith Posted February 21, 2017 Author Share Posted February 21, 2017 echo insertTweets($items['user']['name'],$items['user']['screen_name'],$items['text'],$items['created_at'],$items['id_str'],$items['user'] ['followers_count'],$hash); /** FInd hashtags build array **/ preg_match_all("/#(\\w+)/",$items['text'],$hashtags); //now $tags is an array of hashtags /** FInd hashtags build array **/ var_dump( $hashtags); } /** Insert to database **/ function insertTweets($name,$screen_name,$text,$created_at,$id_str,$followers_count,$hash){ $mysqli = new mysqli(DBHOST, DBUSERNAME, DBPASSWORD, DBNAME); if ($mysqli->connect_errno) { return 'Failed to connect to Database: (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error; } $prepareStmt='INSERT INTO '.DBNAME.'.'.TWEETTABLE.' (name, screen_name, text, created_at, id_str, followers_count, hashtags) VALUES (?,?,?,?,?,?,?)'; if ($insert_stmt = $mysqli->prepare($prepareStmt)){ $insert_stmt->bind_param('sssssid', $name,$screen_name,$text,$created_at,$id_str,$followers_count,$hash); if (!$insert_stmt->execute()) { $insert_stmt->close(); return 'Tweet Creation cannot be done at this moment.'; }elseif($insert_stmt->affected_rows>0){ $insert_stmt->close(); return 'Tweet Added.<br>'; }else{ $insert_stmt->close(); return 'No Tweet were Added.'; } }else{ return 'Prepare failed: (' . $mysqli->errno . ') ' . $mysqli->error; } } Quote Link to comment Share on other sites More sharing options...
dropfaith Posted February 21, 2017 Author Share Posted February 21, 2017 so i have the array now but cant do anything database wise. i have 4 hashtag fields and a link one the system i need to use matches array(4) { [0]=> string(19) "#ContestOfChampions" [1]=> string(7) "#Cutoff" [2]=> string(9) "#Dormammu" [3]=> string(11) "#JaneFoster" } is a sample array i would love it if i could somehow insert each field into its own mysql column to make my next steps easier Quote Link to comment Share on other sites More sharing options...
dropfaith Posted February 21, 2017 Author Share Posted February 21, 2017 if it helps it inserts a 1 to mysql Quote Link to comment Share on other sites More sharing options...
Barand Posted February 21, 2017 Share Posted February 21, 2017 Each hashtag should be in its own row in a separate table (google database normalization) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.