Vamos dar continuidade ao tutorial de como desenvolver extensões para o CMS ExpressionEngine 2. Se você ainda não leu a primeira parte do tutorial, leia para conseguir entender melhor esse post.
Como havia falado na primeira parte, agora só falta o método que enviará o título e o link do post para o Twitter.
Com a nova API do Twitter, é preciso fazer autenticação para atualizar a nossa timeline. Para faciltar, vamos baixar uma biblioteca de autenticação do Twitter nesse site. Essa biblioteca é para o CodeIgniter, o que servirá tranquilamente para essa extensão.
Após descompactar o zip, copie o arquivo Twitter.php, que está em CodeIgniter Twitter API/libraries para a pasta da extesão do Twitter que estamos criando. (system/expressionengine/third_party/twitter_post). Uma pergunta que pode ser feita neste ponto, é: por ser uma biblioteca feita para o CodeIgniter, podemos copiar o arquivo para system/codeigniter/system/libraries ou até mesmo para system/expressionengine/libraries? A reposta é sim! Mas é importante que sempre deixe os arquivos utilizados em uma extensão (plugins, módulos etc), em uma única pasta, no caso a pasta da própria extensão. Se a biblioteca ficasse em algum desses diretórios, seria só incluir a classe utilizando o método padrão do framework:
1 |
$this->EE->load->library('twitter'); |
Bom, voltando ao desenvolvimento da extensão, agora é só começar a escrever o método que irá atualizar o Twitter.
O método, que será nomeada como twitter_update, descrito nas configurações do método activate_extension, irá receber três parâmetros: $id, que é o id do post; $post, que é um array com algumas informações do post (channel_id, author_id, ip_address, title, url_title etc) e $opc, que também tem informações do post – essas informações são de campos adicionais e da revisão do post, que é praticamente igual ao parâmetro $post. Nessa extensão, não usaremos nem o $id, nem o $opc, o que não impede você usar futuramente.
O método twitter_update
Comentei linha por linha do código e explicarei melhor logo abaixo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
function twitter_update( $id, $post, $opc ) { // Verifica se o arquivo da classe existe if ( !file_exists(PATH_THIRD . 'twitter_post/Twitter.php') ) return FALSE; // Carrega o arquivo com a classe de autenticação do Twitter include_once(PATH_THIRD . 'twitter_post/Twitter.php'); // Verifica se a classe existe if ( !class_exists('Twitter') ) return FALSE; // Cria uma instância da classe 'Twitter' $this->twitter = new Twitter; // Busca as configurações do banco de dados $conf_consumer_key = $this->settings['consumer_key']; $conf_consumer_secret = $this->settings['consumer_secret']; $conf_consumer_keyacess_token = $this->settings['acess_token']; $conf_acess_token_secret = $this->settings['acess_token_secret']; // Envia a autenticação com as configurações if ( $this->twitter->oauth( $conf_consumer_key, $conf_consumer_secret, $conf_consumer_keyacess_token, $conf_acess_token_secret ) ) { /** * Verifica qual é o status do post. * O Twitter só deve ser atualizado se o post estiver aberto (open) */ if ( $post['status'] == "open" ) { /* * Preparando mensagem que será enviada para o Twitter * Ex.: Novo Post: título do post - http://site.com.br/view/url_do_post */ $mensagemTwitter = $post['title'] . " - " . $this->EE->config->item('site_url') . "view/" . $post['url_title']; $this->twitter->call('statuses/update', array('status' => $mensagemTwitter)); } } } |
As primeiras linhas são bem simples. Apenas verifica, adiciona e instância a classe que baixamos. Veja que foi usado uma constante para adicionar o arquivo (PATH_THIRD). Essa é uma das constantes que o ExpressionEngine disponibiliza para uso por todo o sistema. Caso queira saber outras constantes disponíveis, use a função get_defined_constants(), do php.
1 |
print_r(get_defined_constants()); |
As quatro linhas seguintes recuperam as configurações salvas no banco de dados. Isso é feito só colocando o nome da configuração nas chaves de $this->settings.
Logo depois foi chamado o método oauth() para fazer a autenticação com o sistema do Twitter. Enviamos para o método as configurações que foram cadastradas no banco de dados. Essas configurações são disponibilizadas pelo Twitter (veja abaixo como pegar essas informações). Após a autenticação, é preciso verificar se o post foi publicado – o post pode ficar fechado/pendente.
A linha seguinte formata a mensagem que será publicada no Twitter.
1 |
$mensagemTwitter = $post['title'] . " - " . $this->EE->config->item('site_url') . "view/" . $post['url_title']; |
Nesse linha usamos um dos parâmetros do método, o $post. Como foi dito no começo desse post, essa variável é um array e com ele é possível recuperar o título e a url do post. A url, nesse caso, não inclui o domínio do site, apenas a url referênte ao post. Para pegar o domínio todo é usado $this->EE->config->item(‘site_url’), que retorna o domínio e o caminho da instalação do ExpressionEngine. O “view” é o template criado para exibir o post (isso vai depender de como você nomeou o seu template).
Depois de formatar a mensagem, o sistema publica no Twitter chamando o método call().
Como obter o Consumer Key, Consumer Secret, Access Token e o Access Token Secret
Se você ainda não tem nenhuma aplicação no Twitter ou quer ter uma só para o uso da extensão, registre uma nova aplicação em http://dev.twitter.com/apps/new.
O cadastro é rápido e fácil. Atente-se, principalmente, aos itens “Application Type” e “Default Access type”. No primeiro, selecione “Browser” e no segundo, “Read & Write”. Na página após o cadastro, será mostrado o seu Consumer Key e o Consumer Secret. Para ver o Access Token e o Access Token Secret, clique no menu lateral “My Access Token”.
Feito todo esse processo, é só publicar alguma coisa e conferir o seu twitter.