Parsing JSON response from James Mallison twitter library - php
I am using the Twitter Search API 1.1 to search followers_count
I have managed to get the Oauth working with the help of James Mallison at http://github.com/j7mbo/twitter-api-php.
Here my code :
require_once('TwitterAPIExchange.php');
$settings = array(
'oauth_access_token' => "xxx",
'oauth_access_token_secret' => "yyy",
'consumer_key' => "zzz",
'consumer_secret' => "vvv"
);
$url = 'https://api.twitter.com/1.1/users/lookup.json';
$getfield = '?screen_name=twitterapi';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
echo $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
$response = json_decode($twitter, true);
$ed = $response->followers_count;
Here the answer :
[{"id":6253282,"id_str":"6253282","name":"Twitter API","screen_name":"twitterapi","location":"San Francisco, CA","description":"The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.","url":"http:\/\/t.co\/78pYTvWfJd","entities":{"url":{"urls":[{"url":"http:\/\/t.co\/78pYTvWfJd","expanded_url":"http:\/\/dev.twitter.com","display_url":"dev.twitter.com","indices":[0,22]}]},"description":{"urls":[]}},"protected":false,"followers_count":3402865,"friends_count":48,"listed_count":12958,"created_at":"Wed May 23 06:01:13 +0000 2007","favourites_count":27,"utc_offset":-25200,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":true,"statuses_count":3535,"lang":"en","status":{"created_at":"Thu May 21 21:12:42 +0000 2015","id":601495856353783808,"id_str":"601495856353783808","text":"RT #TwitterDev: We are excited to announce that the REST API now supports native video upload. https:\/\/t.co\/cWUrgjh8wz http:\/\/t.co\/yaenTQE9\u2026","source":"\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Thu May 21 20:57:40 +0000 2015","id":601492072953151488,"id_str":"601492072953151488","text":"We are excited to announce that the REST API now supports native video upload. https:\/\/t.co\/cWUrgjh8wz http:\/\/t.co\/yaenTQE95N","source":"\u003ca href=\"http:\/\/jonbulava.com\" rel=\"nofollow\"\u003eJon's Developer Testing App\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":160,"favorite_count":189,"entities":{"hashtags":[],"symbols":[],"user_mentions":[],"urls":[{"url":"https:\/\/t.co\/cWUrgjh8wz","expanded_url":"https:\/\/blog.twitter.com\/2015\/rest-api-now-supports-native-video-upload","display_url":"blog.twitter.com\/2015\/rest-api-\u2026","indices":[79,102]}],"media":[{"id":601491637433475073,"id_str":"601491637433475073","indices":[103,125],"media_url":"http:\/\/pbs.twimg.com\/ext_tw_video_thumb\/601491637433475073\/pu\/img\/XJcHkzdOR2YRMQSC.jpg","media_url_https":"https:\/\/pbs.twimg.com\/ext_tw_video_thumb\/601491637433475073\/pu\/img\/XJcHkzdOR2YRMQSC.jpg","url":"http:\/\/t.co\/yaenTQE95N","display_url":"pic.twitter.com\/yaenTQE95N","expanded_url":"http:\/\/twitter.com\/TwitterDev\/status\/601492072953151488\/video\/1","type":"photo","sizes":{"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":340,"h":191,"resize":"fit"},"large":{"w":640,"h":360,"resize":"fit"},"medium":{"w":600,"h":337,"resize":"fit"}}}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"},"retweet_count":160,"favorite_count":0,"entities":{"hashtags":[],"symbols":[],"user_mentions":[{"screen_name":"TwitterDev","name":"TwitterDev","id":2244994945,"id_str":"2244994945","indices":[3,14]}],"urls":[{"url":"https:\/\/t.co\/cWUrgjh8wz","expanded_url":"https:\/\/blog.twitter.com\/2015\/rest-api-now-supports-native-video-upload","display_url":"blog.twitter.com\/2015\/rest-api-\u2026","indices":[95,118]}],"media":[{"id":601491637433475073,"id_str":"601491637433475073","indices":[119,140],"media_url":"http:\/\/pbs.twimg.com\/ext_tw_video_thumb\/601491637433475073\/pu\/img\/XJcHkzdOR2YRMQSC.jpg","media_url_https":"https:\/\/pbs.twimg.com\/ext_tw_video_thumb\/601491637433475073\/pu\/img\/XJcHkzdOR2YRMQSC.jpg","url":"http:\/\/t.co\/yaenTQE95N","display_url":"pic.twitter.com\/yaenTQE95N","expanded_url":"http:\/\/twitter.com\/TwitterDev\/status\/601492072953151488\/video\/1","type":"photo","sizes":{"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":340,"h":191,"resize":"fit"},"large":{"w":640,"h":360,"resize":"fit"},"medium":{"w":600,"h":337,"resize":"fit"}},"source_status_id":601492072953151488,"source_status_id_str":"601492072953151488","source_user_id":2244994945,"source_user_id_str":"2244994945"}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"},"contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/pbs.twimg.com\/profile_background_images\/656927849\/miyt9dpjz77sc0w3d4vj.png","profile_background_image_url_https":"https:\/\/pbs.twimg.com\/profile_background_images\/656927849\/miyt9dpjz77sc0w3d4vj.png","profile_background_tile":true,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/2284174872\/7df3h38zabcvjylnyfe3_normal.png","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/2284174872\/7df3h38zabcvjylnyfe3_normal.png","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/6253282\/1431474710","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false}]
Warning: json_decode() expects parameter 1 to be string, object given in ...
I don't kwnow why i can't use json_decode
Any feedback or ideas on how to reach followers_count correctly would be much appreciated.
Cheers
What you need to do is:
$jsonResponse = $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
$data = json_decode($jsonResponse, true);
$ed = $data[0]['followers_count'];
Here json_decode documentation.
Related
Api twitter response no statuses
I'm trying to display tweets for a specific hashtag. The code below works perfectly what ever the hashtag is, but when i try with the specific one, it doesn't work. For the last month, it worked perfectly with the right hashtag but since yesterday it's broken. (i didn't put my tokens in the code) require_once('twitter-api-php-master/TwitterAPIExchange.php'); /** Set access tokens here - see: https://dev.twitter.com/apps/ **/ $settings = array( 'oauth_access_token' => "my_tokens", 'oauth_access_token_secret' => "my_tokens", 'consumer_key' => "my_tokens", 'consumer_secret' => "my_tokens" ); $hashtag = 'smartspend_eu'; $url = 'https://api.twitter.com/1.1/search/tweets.json'; $getfield = "?q=#$hashtag"; $requestMethod = 'GET'; $twitter = new TwitterAPIExchange($settings); $response = $twitter->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest(); The response is : {"statuses":[],"search_metadata":{"completed_in":0.053,"max_id":1105019731759656961,"max_id_str":"1105019731759656961","query":"%23SMARTSPEND_EU","refresh_url":"?since_id=1105019731759656961&q=%23SMARTSPEND_EU&include_entities=1","count":15,"since_id":0,"since_id_str":"0"}} What is the problem, and what can i do to fix it ?
I finaly found what's wrong. My code was right from the begining. The problem is that it's impossible to get the tweets from more than 7 days ago. And no tweets has been written for my hashtag for the last 7 days.
TwitterAPIExchange suddenly stops working
So I'm making a Twitter fetch website where all the tweets from a specific hashtag will be fetched in real-time with ajax. It all works fine, I thought, until it all suddenly stops working. If I then wait for 3 minutes or so, it then starts working again. PHP is giving me errors such as Notice: Trying to get property of non-object... The code I'm running: require_once '../lib/TwitterAPIExchange.php'; $settings = array( 'oauth_access_token' => "...", 'oauth_access_token_secret' => "...", 'consumer_key' => "...", 'consumer_secret' => "..." ); $url = 'https://api.twitter.com/1.1/search/tweets.json'; $getfield = '?q=#hashtag&result_type=recent'; $requestMethod = 'GET'; $twitter = new TwitterAPIExchange($settings); $response = $twitter->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest(); foreach(json_decode($response) as $result){ foreach($result as $post){ echo '<div class="post"><div class="header"><img src="'.$post->user->profile_image_url.'"><p class="user">'.$post->user->name.'</p></div><div class="text">'.$post->text.'</div></div>'; } break; }
I figured it out with help from #Uwe Allner. It turned out the Twitter API has something called API Rate Limits. So, as you may guess, they are limiting the amount of requests per x time. Under "Search", I noticed they have set a limit at 180 queries per 15 minutes. So I can make a query each 5 seconds. 180/15 = 12 60/12 = 5
POSTing media_ids to Twitter API with TwitterAPIExchange
I've tried almost every solution I could find - nothing is working. Basically, the status gets updated but the media_ids parameter gets ignored. I'm using the TwitterAPIExchange.php library. Here is my code: $url = 'https://api.twitter.com/1.1/statuses/update.json'; $postfields = array( "media_ids" => 586556953049956353, "status" => "So we keep truly! testing!" ); $requestMethod = 'POST'; echo $twitter->setPostfields($postfields) ->buildOauth($url, $requestMethod) ->performRequest();
How to print Twitter API request reply?
I want to print all the tweets from the reply. What am I missing? https://github.com/J7mbo/twitter-api-php <?php ini_set('display_errors', 1); require_once('TwitterAPIExchange.php'); /** Set access tokens here - see: https://dev.twitter.com/apps/ **/ $settings = array( 'oauth_access_token' => "", 'oauth_access_token_secret' => "", 'consumer_key' => "", 'consumer_secret' => "" ); /** Perform a GET request and echo the response **/ /** Note: Set the GET field BEFORE calling buildOauth(); **/ $url = 'https://api.twitter.com/1.1/search/tweets.json'; $getfield = '?q=%23twitter'; $requestMethod = 'GET'; $twitter = new TwitterAPIExchange($settings); $response = $twitter->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest(); foreach ($response->statuses as $tweet) { echo $tweet->text; } Notice: Trying to get property of non-object in /var/www/projects/twitter/twitter-api-php/index.php on line 23 Warning: Invalid argument supplied for foreach() in /var/www/projects/twitter/twitter-api-php/index.php on line 23
The performRequest() method returns a JSON string, not an array, so you need to decode it $array = json_decode($response, true);.
You just have to use: `echo $response;` or instead: echo $twitter->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest(); but I recommend using the first approach.
Iterating over a JSON object in PHP
How do I grab - or more specifically, iterate over - the contents of a JSON user_timeline object in PHP? I have it retrieved, I'm just trying to access the fields in the object. All of the other tutorials/answers don't apply to the new 1.1 API. Here's where I am: $url = 'https://api.twitter.com/1.1/statuses/user_timeline.json'; $getfield = '?screen_name=testyMcTesterton'; $requestMethod = 'GET'; $twitter = new TwitterAPIExchange($settings); $twitter->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest();
If you posted the contents of the object itself it would help, but can you not just json_decode($obj)? From that do something like: $new = json_decode($obj); $data = $new->data; // (this would access Object->data->*) That's how a JSON array is accessed, though I don't actually know how the Twitter user_timeline object looks so I can't tell you exactly how to access the elements you want specifically.