Tudo começou com uma pergunta do meu amigo @AJEsperanca. Ele queria uma lista de seguidores simples, com a imagem de exibição linkada para o perfil do Twitter.
Com isso em mente, resolvi testar meus conhecimentos e fiz uma função que retorna um array gerado à partir de um JSON fornecido pelo Twitter.
A função é esta:
<?php
function getSeguidores($twitter, $n_seguidores = 20){
/*
* @author Rafael Toledo
* http://www.rvpt.net
*/
$json = "http://api.twitter.com/1/statuses/followers/{$twitter}.json";
if (!function_exists('curl_init')){
die('CURL is not installed!');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
$obj = json_decode($output);
if(!is_array($obj)){
return false;
}
$pos_atual = range(0,count($obj));
shuffle($pos_atual);
$pos_atual = array_slice($pos_atual,0,$n_seguidores);
for($i=0;$i<$n_seguidores;$i++){
$current = $obj[$pos_atual[$i]];
if(is_object($current)){
$seguidores[$i]['nome'] = $current->name;
$seguidores[$i]['avatar'] = $current->profile_image_url;
$seguidores[$i]['url'] = "http://www.twitter.com/{$current->screen_name}";
}
}
return $seguidores;
}
?>
Esta função recebe como parâmetro obrigatório a @ do usuário, opcionalmente podendo fornecer o número de seguidores que deseja recuperar do Twitter.
O Twitter devolve um objeto JSON com todos os seguidores da conta. Dentro da função gero um array com posições aleatórias, para que a cada execução, a listagem de seguidores seja alterada.
A função é chamada da seguinte forma:
getSeguidores("rafamd",30)
O retorno é um array, em que cada posição é um array com os seguintes índices: nome, avatar e url.
Ele pode ser usado da seguinte forma:
<ul>
<?php
$seguidores = getSeguidores("rafamd",30);
if($seguidores){
foreach($seguidores as $seguidor){
?>
<li>
<a href="<?=$seguidor['url']?>" title="<?=$seguidor['nome']?>">
<img src="<?=$seguidor['avatar']?>" alt="<?=$seguidor['nome']?>" />
</a>
</li>
<?php
}
} else {
?>
<li>Ocorreu um erro!</li>
<?php } ?>
</ul>
Aí está, dá para estender a função de diversas maneiras… O API é o limite… Ou não 😛