I have created a simple PHP Twitter request that caches the response every 10 minutes. The request code looks like:
$twitter_result = false;
if (file_exists( 'twitter.json' )) {
$data = json_decode( file_get_contents( 'twitter.json' ));
if ($data->timestamp > (time() - 10 * 60) ) {
$twitter_result = $data->twitter_result;
}
}
if (!$twitter_result) {
$twitter_result = file_get_contents('http://api.twitter.com/1/statuses/user_timeline.json?q=@SolidCAMUK&rpp=1&screen_name=SolidCAMUK&count=1');
$data = array ('twitter_result' => $twitter_result, 'timestamp' => time());
if(file_put_contents( 'twitter.json', json_encode($data) )) {
//echo 'success';
} else {
//echo 'error';
}
}
$file = file_get_contents('twitter.json');
header("content-type:application/json");
if($_GET['callback']) {
echo $_GET['callback'] . '(' . $file . ')';
} else {
echo $file;
}
exit;
And an example of the returned JSONP for this page looks like: http://dev.driz.co.uk/phptwitter/?callback=Test
And then I'm trying to use this JSONP in my test scenario here: http://dev.driz.co.uk/phptwitter/test.php
However the data isn't being displayed properly. I'm guessing that the JSON isn't formatted correctly, as when I console.log the response, it seems to be acting as a string rather than an actual object... Can anyone see any issues?
There is nothing wrong with the returned JSON format. It is valid and you can check it here.
You are doing console.log(response.twitter_result);
and that's why you see plain text. If you do console.log(response);
you will see the actual returned object.
The response.twitter_result
is an object also but you have to parse it first like this
success: function(response){
var twitter_result = $.parseJSON(response.twitter_result);
console.log(twitter_result[0].text);
//and here you can apply your parseTwitterText() function as you wish
}