Até 2010 existia a autenticação simplificada, onde você precisava apenas informar um usuário e senha e sua aplicação poderia acessar a API do Twitter como se fosse o usuário. Agora toda a autenticação deve ser feita via OAuth. A autenticação OAuth funciona:
- primeiro, obtendo um token de solicitação
- segundo, confirmando a autorização do usuário
- terceiro, modificando seu token de solicitação por um token de acesso.
Um primeiro acesso a uma aplicação que acesse o Twitter via linha de comando deve conter:
use 5.12.0;
use Net::Twitter;
my $t = Net::Twitter->new(
traits => [qw/OAuth API::REST/],
consumer_key => 'xxxxxxxxxxxxxxxxxxxxxxx',
consumer_secret => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
);
Aqui nós criamos nosso objeto Net::Twitter, que é instanciado na variável $t. Esse construtor informa o tipo de autenticação, OAuth, e a API que será utilizada. API::REST. Veremos as APIs mais adiante. Repare que sua aplicação deve informar os dados fornecidos pelo Twitter quando você registrou sua aplicação (consumer_key e consumer_secret). Lembre-se que a forma como você armazenas as suas credenciais também é importante para evitar que aplicações maliciosas se passem pela sua aplicação.
Depois temos que solicitar que o usuário confirme que deseja que o nosso aplicativo use o twitter com as suas configurações de conta. Para isso, o Twitter fornece para nosso aplicativo uma url de acesso, onde ele irá confirmar que nosso aplicativo pode se passar por ele. Adicione este código ao final:
my $pin;
#solicita confirmação do usuário
unless($t->authorized){
my $url = $t->get_authorization_url();
say "Esta aplicação ainda não está autorizada para acessar o twitter" .
" como se fosse você.";
say "Acesse o link ao lado. " . $url . "\n Ele vai lhe fornecer um PIN " .
"que permitira que esta aplicação acesse suas informações no twitter.\n" .
"Informe este PIN aqui: ";
chomp($pin = <STDIN>)
my ($access_token, $access_token_secret, $user_id, $screen_name) =
$t->request_access_token(verifier => $pin);
}
A URL fornecida pelo método get_authorization_url() abrirá uma página que solicita as credenciais do seu usuário no Twitter e pede que ele confirme que sua aplicação pode acessar seus dados no twitter e até mesmo postar como se fosse ele. O Twitter então fornece um código numérico. Este código representa a etapa 2, onde o usuário confirma que sua aplicação pode utilizar suas credenciais no twitter.
Após isto podemos utilizar a 3 etapa, que é solicitar um token de acesso. O método request_access_token() informa o PIN para o Twitter que, por sua vez, retorna os códigos que sua aplicação precisa para acessar o twitter como se fora aquele usuário.
Guarde estas informações de forma segura. Assim você não vai obrigar seu usuário a requisitar um PIN toda vez que rodar sua aplicação.
Quando você já tiver estas informações a sua disposição poderá usar o construtor como abaixo:
my $t = Net::Twitter->new(
traits => [qw/OAuth API::REST/],#Autenticação e as API's
consumer_key => $key,
consumer_secret => $secret,
access_token => $access_token,
access_token_secret => $token_secret,
);
O Net::Twitter é um módulo robusto, formado por diversos módulos menores. A interface de autenticação completa pode ser aprendida na documentação CPAN do módulo Net::Twitter::Role::OAuth. Mas é importante entender pelo menos os métodos abaixo:
authorized:
Retorna um valor verdadeiro se todos o dados para autenticação foram recebidos pelo objeto. Não necessariamente que a autenticação irá funcionar.
get_authorization_url(callback => URL)
Informa a URL que o usuário deve utilizar para autorizar sua aplicação. Aplicações web utilizam um callbak, que o Twitter usará para enviar os dados de autorização.
access_token e access_token_secret:
Informa ou configura o token e a senha relacionada ao token respectivamente. Se você já tiver os tokens de usuário armazenados você pode configurar seu objeto com estes métodos.
Agora vamos falar das API's. O Twitter nos fornece diversas API's, que são informadas nos construtores dos objetos da aplicação que usa o Net::Twitter. Vamos ver um pouco delas agora.