Wedge

Public area => The Pub => Off-topic => Topic started by: MultiformeIngegno on February 2nd, 2013, 01:49 PM

Title: Should I add a cache to this script?
Post by: MultiformeIngegno on February 2nd, 2013, 01:49 PM
I have this script that authenticates with Twitter API 1.1 and retrieves the last 6 tweets from my timeline.

Code: [Select]
<?php
function buildBaseString($baseURI$method$params)
{
    
$r = array();
    
ksort($params);
    foreach(
$params as $key=>$value){
        
$r[] = "$key=" rawurlencode($value);
    }

    return 
$method."&" rawurlencode($baseURI) . '&' rawurlencode(implode('&'$r)); //return complete base string
}

function 
buildAuthorizationHeader($oauth)
{
    
$r 'Authorization: OAuth ';
    
$values = array();
    foreach(
$oauth as $key=>$value)
        
$values[] = "$key=\"" rawurlencode($value) . "\"";

    
$r .= implode(', '$values);
    return 
$r;
}

$url "https://api.twitter.com/1.1/statuses/user_timeline.json";

$oauth_access_token "INSERIRE TOKEN";
$oauth_access_token_secret "INSERIRE TOKEN";
$consumer_key "INSERIRE KEY";
$consumer_secret "INSERIRE KEY";

$oauth = array( 'oauth_consumer_key' => $consumer_key,
    
'oauth_nonce' => time(),
    
'oauth_signature_method' => 'HMAC-SHA1',
    
'oauth_token' => $oauth_access_token,
    
'oauth_timestamp' => time(),
    
'count' => 6,
    
'oauth_version' => '1.0');

$base_info buildBaseString($url'GET'$oauth);
$composite_key rawurlencode($consumer_secret) . '&' rawurlencode($oauth_access_token_secret);
$oauth_signature base64_encode(hash_hmac('sha1'$base_info$composite_keytrue));
$oauth['oauth_signature'] = $oauth_signature;


$header = array(buildAuthorizationHeader($oauth), 'Expect:');
$options = array( CURLOPT_HTTPHEADER => $header,
    
CURLOPT_HEADER => false,
    
CURLOPT_URL => $url '?count=6',
    
CURLOPT_RETURNTRANSFER => true,
    
CURLOPT_SSL_VERIFYPEER => false);

$feed curl_init();
curl_setopt_array($feed$options);
$json curl_exec($feed);
curl_close($feed);

$twitter_data json_decode($json);

    echo 
"<ul style='color:#6E6E6E'>";
    foreach (
$twitter_data as $tweet)
    {
        if (!empty(
$tweet)) {
            
$text $tweet->text;
$text_in_tooltip str_replace('"'''$text); // replace " to avoid conflicts with title="" opening tags
            
$id $tweet->id;
            
$time strftime('%d %B'strtotime($tweet->created_at));
            
$username $tweet->user->name;
        }
        echo 
'<li><span title="'; echo $text_in_tooltip; echo '">'; echo $text "</span><br>
<a href=\"http://twitter.com/"
; echo $username ; echo '/status/'; echo $id ; echo '"><small>'; echo $time; echo ' </small></a> - 
<a href="http://twitter.com/intent/tweet?in_reply_to='
; echo $id; echo '"><small>rispondi</small></a> - 
<a href="http://twitter.com/intent/retweet?tweet_id='
; echo $id; echo '"><small>retweet</small></a> - 
<a href="http://twitter.com/intent/favorite?tweet_id='
; echo $id; echo '"><small>preferito</small></a></li>';
    }

    echo 
'</ul>';
    
?>


Should I add a cache mechanism? That maybe stores in a file the JSON fetched and updates it only if it's older than X minutes. Without caching does this impact much on server load?
Title: Re: Should I add a cache to this script?
Post by: Anthony` on February 2nd, 2013, 06:04 PM
Twitter can be quite slow sometimes, which I have experienced using it, so I'd imagine maybe caching it would save the requests being made (assuming this is in a page with alot of traffic) and ease down the strain when Twitter is actually being a bit slow.
Title: Re: Should I add a cache to this script?
Post by: Arantor on February 2nd, 2013, 06:55 PM
I would definitely be inclined to cache it. Unless you need the data to be absolutely live (and honest I'm not sure you do), cache for probably 10 minutes would be enough and it will limit performance hurts in general.