Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

João Batista Neto

Trabalhando com o Twitter

Recommended Posts

Bom, aqui vai um exemplo simples de como recuperar as postagens de usuários do Twitter:

 

/**
* Recupera postagens de usuários do Twitter
* @param string $user O nome do usuário
* @return &array Matriz contendo as postagens do membro
*/
function &getTwitterPostsByUser( $user ){
$arr = array();
$cur = null;
$xml = new XMLReader( );

if ( $xml->open( sprintf( 'http-~~-//twitter.com/statuses/user_timeline/%s.xml' , $user ) ) ){
	while ( $xml->read() ){
		if ( $xml->nodeType == XMLReader::ELEMENT ){
			$node = $xml->localName;

			if ( $xml->read() ){
				switch ( $node ){
					case 'created_at' :
						$cur = strtotime( $xml->value );
						break;
					case 'text' :
						$arr[ $cur ] = preg_replace( '/@([a-zA-Z_]+)/' , '<a href="http-~~-//twitter.com/$1">@$1</a>' , $xml->value );
						break;
				}
			}
		}
	}

	$xml->close();

	ksort( $arr );
} else
	throw new Exception( 'Não foi possível abrir o documento.' );

return $arr;
}

 

Para usar é só iterar a matriz retornada:

date_default_timezone_set( 'America/Sao_Paulo' );

foreach ( getTwitterPostsByUser( 'joseserra_' ) as $created_at => $text )
printf( '(%s): %s<br />%s' , date( 'd/m/Y' , $created_at ) , $text , PHP_EOL );

 

A saída será:

(17/11/2009): Agora à noite, condecorei com a Ordem do Ipiranga dez personalidades da área cultural. E apresentei um balanço do que fazemos na cultura.<br />

(17/11/2009): Todas as ações do governo em Heliópolis estão relatadas aqui, <a href="http://twitter.com/reflexaodopapai">@reflexaodopapai</a>: http://migre.me/bLGc<br />

(18/11/2009): Prédio novo para a Polícia Militar de Osasco, um batalhão c/ história interessante: era Polícia Marítima do Porto de Santos, criada em 1892.<br />

(18/11/2009): SP lançou hoje o Termômetro Nacional do Emprego, ferramenta online que ajuda na busca por emprego em seis regiões metropolitanas.<br />

(18/11/2009): A pesquisa é feita em SP, Porto Alegre, Salvador, Recife, RJ e BH. Trabalhadores de todo o país podem consultar. http://migre.me/bRMi<br />

(18/11/2009): RT <a href="http://twitter.com/juliano_seabra">@juliano_seabra</a>: <a href="http://twitter.com/joseserra_">@joseserra_</a> Gov, Semana Global do Empreendedorismo. + de 4 milhões participando. você pode divulgar? http://migre.me/bRHy<br />

(18/11/2009): Moderno é ser curioso, <a href="http://twitter.com/julianaleitte">@julianaleitte</a>. Quando não sei, pergunto. Gostei da idéia do twitcam. Vou saber mais. Quem sabe eu faça...<br />

(18/11/2009): Eu é que te agradeço o convite e a acolhida, <a href="http://twitter.com/lulusuperpop">@lulusuperpop</a>.<br />

(18/11/2009): Você me deixou curioso, <a href="http://twitter.com/tieego">@tieego</a>. Claro que fui ler... Vou responder agora.<br />

(18/11/2009): Espetaculares! Obrigadíssimo. RT <a href="http://twitter.com/danielgranja">@danielgranja</a>: <a href="http://twitter.com/joseserra_">@joseserra_</a> Mais dois vídeos saudosos http://bit.ly/DfhlY e http://bit.ly/IpsvY<br />

(18/11/2009): Suas observações são corretas, <a href="http://twitter.com/LuhAlexsandra">@LuhAlexsandra</a>. Vou passar adiante.<br />

(18/11/2009): É impossível responder tudo, <a href="http://twitter.com/DuduhMuniz">@DuduhMuniz</a>, e seguir todo mundo. Entro toda madrugada, <a href="http://twitter.com/hduartecoelho">@hduartecoelho</a>. É sempre minha última "atividade".<br />

(18/11/2009): Boa noite a todos.<br />

(19/11/2009): Espero que gostem: o portal do Gov de SP terá vídeo chat, a partir do dia 25. Tema do 1º bate-papo: meio ambiente. http://migre.me/bXI4<br />

(19/11/2009): Fui ver hoje as obras da Linha 2-Verde do Metrô. Fizemos a 1ª viagem-teste entre as estações Alto do Ipiranga e Sacomã. http://migre.me/bXIc<br />

(19/11/2009): Antes que me soterrem de perguntas sobre o Metrô... rs Tudo sobre o Programa Expansão, que vai quadruplicar a rede. http://migre.me/bUCQ<br />

(19/11/2009): E a lei antifumo entra em vigor também no Rio e em Curitiba. A partir do dia 28, valerá em todo o Paraná. Aliás, logo mais vou a Curitiba.<br />

(19/11/2009): É que alguém tinha registrado meu nome antes... rs RT <a href="http://twitter.com/marcelocidral">@marcelocidral</a> por q o twitter do <a href="http://twitter.com/joseserra_">@joseserra_</a> tem um underline no final? mucho moderno<br />

(19/11/2009): Tudo o que tenho a dizer sobre futebol esta madrugada, <a href="http://twitter.com/Jorge_Amaral">@Jorge_Amaral</a>, é: parabéns, Fluminense!<br />

(19/11/2009): Preciso dormir. Cheguei de Brasília há pouco. E meu dia vai ser pesado. Boa noite a todos.<br />

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

E para postar, comofas ?

 

Bom Dee, eu não uso o Twitter, então não sei como ele funciona, sei apenas que usa REST.

 

Mas esse fim de semana verei como funciona o sistema deles, implementarei toda a API e publico aqui para o pessoal, quem sabe dá para fazer postagens via PHP !!!

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo

Grande script esse seu!!

No entendo, estou desesperadamente querendo saber como fazer para inserir uma postagem??

Obrigada e parabéns!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

No entendo, estou desesperadamente querendo saber como fazer para inserir uma postagem??

 

Dá para usar cURL.

 

Não sei se o Twitter tem alguma API, como o Google tem. Se não tiver, vai por cURL mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Beraldo

 

O Twitter tem sim, mas as q eu vi são sem postagem, apenas listagem, como a do amigo João Batista.

Encontrei aqui no imaster um script sensacional em aspx, q possui postagem. Ocorre q ele não pede autenticação do usuário, ou seja, se você postar no meu blog, vai sair com o meu user do twitter.

http://imasters.com.br/artigo/9277/aspnet/utilizando_a_api_do_twitter_com_aspnet/

Não programo em aspx, então não consegui alterar.....

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Twitter tem sim, mas as q eu vi são sem postagem, apenas listagem, como a do amigo João Batista.

Bom, como eu disse, esse fim de semana dei uma estudada no sistema do Twitter e de fato eles usam REST. Já consegui implementar a API de busca e algumas outras APIs, logo abaixo está um exemplo para recuperar a homeTimeline (mensagens que aparecem no seu perfil, tanto as que o usuário envia quanto as que os usuários seguidos enviam):

 

require 'TwitterAPI.php';

date_default_timezone_set( 'America/Sao_Paulo' );

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );

foreach ( TwitterAPI::TimelineMethods()->homeTimeline() as $tweet ){
printf( '(%s) %s: %s%s' , date( 'd/m/Y H:i:s' , strtotime( $tweet->created_at ) ) , $tweet->user->screen_name , $tweet->text , PHP_EOL );
}

 

Fazendo um novo POST:

 

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::StatusMethods()->update( 'Novo post no Twitter' );

 

Os fontes para download estão em:

 

http://joaoneto.com4.com.br/source/TwitterAPI.php

http://joaoneto.com4.com.br/source/AbstractTwitterAPI.php

http://joaoneto.com4.com.br/source/TwitterAuthentication.php

http://joaoneto.com4.com.br/source/TSearchMethods.php

http://joaoneto.com4.com.br/source/TStatusMethods.php

http://joaoneto.com4.com.br/source/TTimelineMethods.php

http://joaoneto.com4.com.br/source/TUsersMethods.php

 

Veja, é apenas uma versão alpha da implementação, durante essa semana terminarei de implementar o resto da API e provavelmente todos esses arquivos passarão por modificações, por isso, é interessante que caso seja feito o download hoje, que se acompanhe o desenvolvimento e as atualizações, que serão publicadas no meu perfil do Twitter (criado esse fim de semana especificamente para o desenvolvimento dessa API): @netojoaobatista

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi João Batista!!

 

Obrigadíssima, já estou te seguindo pelo twitter (sou a Luciana)!!

Um abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Implementado os métodos para envio de mensagens diretas, o arquivo para download: http://joaoneto.com4...sageMethods.php

 

Para enviar uma mensagem direta:

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::DirectMessageMethods()->send( 'netojoaobatista' , 'Mensagem direta' );

 

Tanto DirectMessageMethods quando StatusMethods possuem um método destroy que serve para apagar um POST do Twitter, para isso é necessário que se conheça o ID da mensagem que quer apagar.

 

Para recuperar o id de uma mensagem, basta listar as mensagens, por exemplo:

 

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );

foreach ( TwitterAPI::DirectMessageMethods()->directMessages() as $message ){
printf( '[ %s ]: %s enviou para %s a mensagem: "%s"%s' , $message->id , $message->sender->name , $message->recipient->name , $message->text , PHP_EOL );
}

 

A saída será:

[ 588267936 ]: João Batista Neto enviou para João Batista Neto a mensagem: "Mensagem direta"

 

Entre os colchetes está o id da mensagem direta, com esse id basta apagar a mensagem:

 TwitterAPI::DirectMessageMethods()->destroy( 588267936 ); 

 

PS: Muitos dos arquivos do POST anterior foram atualizados, então quem já tinha baixado antes deverá baixá-los novamente utilizando os mesmos links.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Show!!!!!!!! você é fera!! Vou fazer os testes aqui!! Depois posto os comentários!!

Obrigadíssima!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

AccountMethods implementada,

 

Para modificar as informações do perfil do usuário (nome, link, location e one line bio):

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::AccountMethods()->updateProfile( 'Nome Real' , 'http://seudominio.com , 'Cidade/UF' , 'Informações sobre você.' );

 

Para modificar a imagem de pano de fundo:

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::AccountMethods()->updateBackgroundImage( 'imagem.jpg' );

 

Para modificar a imagem do perfil (a foto do usuário):

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::AccountMethods()->updateProfileImage( 'foto.jpg' );

 

Para mudar as cores do pano de fundo, fonte, link, barra lateral e borda da barra lateral:

$backgroundColor = '#C6E2EE';
$textColor = '#7D5836';
$linkColor = '#1E9AC7';
$sidebarFillColor = '#DAECF4';
$sidebarBorderColor = '#C6E2EE';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::AccountMethods()->updateProfileColors( $backgroundColor , $textColor , $linkColor , $sidebarFillColor , $sidebarBorderColor );

 

O arquivo para download: http://joaoneto.com4.com.br/source/TAccountMethods.php

 

PS: Para quem já baixou os outros arquivos, é necessário que se faça o download novamente, foi necessário fazer algumas modificações para permitir o upload das imagens.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ListsMethods e ListMembersMethods implementada,

 

Para criar uma lista:

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::ListsMethods()->createList( 'Nome-da-lista' , 'Descrição da lista' );

 

Para atualizar uma lista:

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::ListsMethods()->updateList( 'Nome-da-lista' , 'Novo-nome-da-lista' , 'Nova descrição da lista' );

 

Para excluir uma lista:

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::ListsMethods()->destroyList( 'Nome-da-lista' );

 

Para listar as listas existentes:

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );

foreach ( TwitterAPI::ListsMethods()->getLists()->lists as $list ){
printf( '%s (%s)%s' , $list->name , $list->description , PHP_EOL );
}

 

Para adicionar um membro a uma lista:

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::ListMembersMethods()->addListMember( 'Nome-da-lista' , 00000000 ); //00000000 é o id do usuário que será adicionado à lista

 

Para excluir um membro de uma lista:

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::ListMembersMethods()->deleteListMember( 'Nome-da-lista' , 00000000 ); //00000000 é o id do usuário que será excluído da lista

 

Para listar os membros de uma lista:

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
foreach ( TwitterAPI::ListMembersMethods()->getListMembers( 'Nome-da-lista' )->users as $user ){
echo $user->name , PHP_EOL;
}

 

Para verificar se um usuário é membro de uma lista:

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );

try {
if ( TwitterAPI::ListMembersMethods()->isMemberOfList( 'Nome-da-lista' , 00000000 ){
	echo 'O usuário é membro da lista';
}
} catch ( Exception $e ){
echo $e->getMessage();
}

 

Lista com todos os arquivos para download até o momento, ainda faltam alguns itens para implementar, então é provável que algum dos arquivos abaixo passem por modificações

http://joaoneto.com4.com.br/source/AbstractTwitterAPI.php

http://joaoneto.com4.com.br/source/TAccountMethods.php

http://joaoneto.com4.com.br/source/TDirectMessageMethods.php

http://joaoneto.com4.com.br/source/TListMembersMethods.php

http://joaoneto.com4.com.br/source/TListsMethods.php

http://joaoneto.com4.com.br/source/TSearchMethods.php

http://joaoneto.com4.com.br/source/TStatusMethods.php

http://joaoneto.com4.com.br/source/TTimelineMethods.php

http://joaoneto.com4.com.br/source/TUsersMethods.php

http://joaoneto.com4.com.br/source/TwitterAPI.php

http://joaoneto.com4.com.br/source/TwitterAuthentication.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

ListSubscribersMethods, FriendshipMethods e FavoriteMethods implementadas:

 

Vendo quem está inscrito em uma lista:

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );

foreach ( TwitterAPI::ListSubscribersMethods()->getListSubscribers( 'teste' )->users as $subscriber ){
	printf( '%s está seguindo a lista "teste"%s' , $subscriber , PHP_EOL );
}

 

Para seguir uma lista:

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::ListSubscribersMethods()->followList( 'nomedalista' );

 

Para ver se um usuário é amigo de outro:

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );

if ( TwitterAPI::FriendshipMethods()->exists( 'fulano' , 'ciclano' ) ){
	echo 'Fulano é amigo de Ciclano';
}

 

Para ficar amigo do Fulano

require 'TwitterAPI.php';

TwitterAPI::authenticate( 'nomedousuario' , 'senha' );
TwitterAPI::FriendshipMethods()->create( 'fulano' );

 

Arquivos:

http://joaoneto.com4.com.br/source/TFavoriteMethods.php

http://joaoneto.com4.com.br/source/TFriendshipMethods.php

http://joaoneto.com4.com.br/source/TListSubscribersMethods.php

 

PS: Quem já fez o download de algum dos arquivos, é recomendado que se faça o download novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parabéns, João! Muito bom o tutorial, vai me ajudar demais!

 

Gostaria de saber se tem como eu usar as mesmas classes, ou se você visualiza o que é necessário mudar, com autenticação OAuth, em vez de Basic Auth.

 

Muitíssimo obrigado, cara.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parabéns, João! Muito bom o tutorial, vai me ajudar demais!

 

:D

 

Gostaria de saber se tem como eu usar as mesmas classes, ou se você visualiza o que é necessário mudar, com autenticação OAuth, em vez de Basic Auth.

 

Sim, você pode usar as mesmas classes, porém ainda tem algumas coisas partes para finalizar e depois vem a otimização e revisão.

 

Já estou com o OAuth quase pronto, usarei Strategy para permitir a escolha do tipo de autenticação.

 

Eu to um pouco perdida ainda..... sobre como efetivamente usá-la.....

 

Assim que eu terminar toda a implementação, vou montar um exemplo prático com todas as funcionalidades. As que eu já ilustrei nos tópicos acima e as que ainda não foram mostradas mas que já estão funcionando.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sou tua fã!! Obrigadíssima e parabéns mais uma vez por compartilhar seu conhecimento conosco!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sou tua fã!! Obrigadíssima e parabéns mais uma vez por compartilhar seu conhecimento conosco!!

 

É sempre legal ter esse tipo de feedback Weblur, obrigado.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.