Pegando mensagens de vários usuários do Twitter com PHP

04 de novembro de 2009 ás 09:11

Como as histórias na internet não são somente passarinhos e borboletas, vou tentar colocar alguma coisa um pouco mais técnica no blog.

Começamos com o problema de pegar os twits de vários usuários no Twitter.

Cada pesquisa no Twitter nos fornece um feed XML que pode ser tratado por qualquer aplicação. Para ter os twits de vários usuários, podemos fazer uma pesquisa como:

http://search.twitter.com/search.atom?q=
+from%3Adjmauriciao+from%3Afelipeharmata
+from%3Aflavinha_rocha+from%3Aleo91rock

E se quisermos puxar os twits de algumas dezenas de pessoas para nossa página? Este feed do Twitter só nos possibilita fazer requisições de 140 caracteres, o que é sugestivo à ideia toda do negócio, não?

O esquema então é pegar um a um. Monta-se um vetor com o nome de todos os usuários:

$usuarios[] = 'djmauriciao';
$usuarios[] = 'felipeharmata';
$usuarios[] = 'flavinha_rocha';
$usuarios[] = 'leo91rock';

E jogá-los nesta função substituindo usuário e senha por algum válido no Twitter.

// @brief Função para ordenar os twits depois de serem capturados
// @param $t1 Data em formato ordenável
// @param $t2 Data em formato ordenável
// @return -1 Se a primeira data for maior
// @return 1 Se a primeira data for menor
function sort_twits($t1,$t2) {
	return ($t1['date'] > $t2['date']) ? -1 : 1;
}
 
// @brief Função para capturar os twits
// @param $users Vetor de usuários do Twitter
// @return Falso se der erro na conexão com o Twitter
// @return Um vetor com com os twits dos usuários se der tudo certo
function get_twitter_messages($users) {
	$j = 0;
	foreach($users as $user) {
		$twitter_url = 'http://search.twitter.com/search.atom?q='.$user;
		$uname = 'usuario';
		$pwd = 'senha';
 
		// Conectando no Twitter
		$curl_handle = curl_init();
		curl_setopt($curl_handle,CURLOPT_URL,"$twitter_url");
		curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
		curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1);
		curl_setopt($curl_handle,CURLOPT_USERPWD,"$uname:$pwd");
 
		// Se não conseguir conectar, retorna uma falha
		if (!$contents = curl_exec($curl_handle)) return false;
		curl_close($curl_handle);
		$contents = str_replace("twitter:", "", $contents);
 
		// Transforma o retorno em um objeto XML
		$xml = simplexml_load_string($contents);
 
		// Percorre o objeto pegando o que interessa
		foreach ($xml->entry as $entry) {
			print_r($entry);
			$twits[$j]['author'] = preg_replace('/\ .*/','',$entry->author->name);
			$twits[$j]['author_url'] = $entry->author->uri;
			$twits[$j]['avatar'] = $entry->link[1]->attributes()->href;
			$twits[$j]['date'] = date('Y-m-d H:i:s',strtotime($entry->published));
			$twits[$j]['content'] = $entry->content;
			$j++;
		}
	}
 
	// Ordena toda a galera
	usort($twits,'sort_twits');
	return $twits;
}

O vetor de retorno é o:

$twits (
	['author'] => Autor do twit
	['author_url'] => URL do Twitter para o autor
	['avatar'] => Imagem de perfil do autor
	['date'] => Data de publicação do twit
	['content'] => Conteúdo do twit
);

Basta então utilizá-lo para moldar o seu layout da maneira que você quiser.

Interativo
Vinicius Massuchetto
Analista de Sistemas


f

Envie seu Comentário

Spam Protection by WP-SpamFree