<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java Simples &#187; cliente</title>
	<atom:link href="http://www.javasimples.com.br/tag/cliente/feed" rel="self" type="application/rss+xml" />
	<link>http://www.javasimples.com.br</link>
	<description>Porque Java não precisa ser difícil...</description>
	<lastBuildDate>Mon, 07 May 2012 00:36:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Criando um cliente para Twitter – Parte 2</title>
		<link>http://www.javasimples.com.br/twitter-2/criando-um-cliente-para-twitter-parte-2</link>
		<comments>http://www.javasimples.com.br/twitter-2/criando-um-cliente-para-twitter-parte-2#comments</comments>
		<pubDate>Mon, 01 Mar 2010 02:02:23 +0000</pubDate>
		<dc:creator>Felipe Saab</dc:creator>
				<category><![CDATA[Twitter]]></category>
		<category><![CDATA[acessar]]></category>
		<category><![CDATA[cliente]]></category>
		<category><![CDATA[integrar]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitter4j]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-2/</guid>
		<description><![CDATA[Foi mal a demora pessoal, o tempo tah foda aqui… Se você caiu de paraquedas nesse post eu sugiro a leitura do post anterior: Criando um cliente para Twitter – Parte 1. Segunda parte do nosso tutorialzinho! Agora iremos criar: Um formulário para realizar o login (sem utilizar o OAuth) Um formulário para: mostrar os [...]]]></description>
			<content:encoded><![CDATA[<p><!--:pt-->Foi mal a demora pessoal, o tempo tah foda aqui…</p>
<p>Se você caiu de paraquedas nesse post eu sugiro a leitura do post anterior: <a href="http://www.javasimples.com.br/mundo-java/criando-um-cliente-para-twitter-parte-1/" target="_blank">Criando um cliente para Twitter – Parte 1</a>.</p>
<p>Segunda parte do nosso tutorialzinho!<br />
Agora iremos criar:</p>
<ul>
<li>Um formulário para realizar o login (sem utilizar o OAuth)</li>
<li>Um formulário para:
<ul>
<li>mostrar os ultimos tweets da timeline</li>
<li>possibilitar o envio de um tweet</li>
</ul>
</li>
</ul>
<p><!--:--><span id="more-102"></span><!--:pt--></p>
<p>Vamos lá então, crie um novo projeto no NetBeans e adicione o twitter4j nas bibliotecas.<br />
Adicione um JFrame e deixe parecido com este:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/02/image3.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/02/image_thumb3.png" border="0" alt="image" width="195" height="180" /></a></p>
<p>O campo para usuário é um JTextField com o nome jTF_Nome.<br />
O campo para a senha é um JPasswordField com o nome jPF_Senha.<br />
O JButton não tem nada de mais, só coloquei o passarinho ai pra ficar mais bonitinho. ^^</p>
<p>O JPasswordField é mais do que um JTextField que mascara as letras, existem todo um esquema de segurança por trás deste componente. Tanto que a recuperação do que foi digitado é um pouco mais chatinha: ao invés de uma String, é recuperado um objeto do tipo char[]. Como o login é exige duas strings (usuário e senha) como parâmetro, fiz um método para realizar a conversão.<br />
Vamos ao código do botão responsável pelo login:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> pegaSenha<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> senha <span style="color: #339933;">=</span> jPF_Senha.<span style="color: #006633;">getPassword</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003399;">String</span> str <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> senha.<span style="color: #006633;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		str <span style="color: #339933;">+=</span> senha<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000000; font-weight: bold;">return</span> str<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> EfetuarLogin<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003399;">String</span> usu <span style="color: #339933;">=</span> jTF_Usuario.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003399;">String</span> senha <span style="color: #339933;">=</span> pegaSenha<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
		Twitter t <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TwitterFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span>usu, senha<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		User u <span style="color: #339933;">=</span> t.<span style="color: #006633;">verifyCredentials</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003399;">Principal</span> p <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">Principal</span><span style="color: #009900;">&#40;</span>t,u<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		p.<span style="color: #006633;">setLocationRelativeTo</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		p.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">dispose</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>TwitterException e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getStatusCode</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">401</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Usuário e/ou senha inválidos!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Nada muito novo em relação ao post anterior. É criado um novo objeto Twitter com os dados que foram digitados. Para garantir que os dados estão corretos existe o método <strong>verifyCredentials()</strong> que em caso de sucesso retorna um objeto <strong>User</strong> que referencia o usuário que acabou de se logar.  Se estiver tudo certo então chama o próximo JFrame (Principal) e retira o formulário de login da memória (uma vez que ele não será mais usado).</p>
<p>Em caso de falha, é jogada uma exceção do tipo <strong>TwitterException</strong>. Se o status code da exceção for 401 significa que o usuário e/ou senha estão errados, daí é só avisar o usuário.</p>
<p>O próximo formulário é um pouco mais complexo… Adicione um novo JFrame ao projeto e chame de Principal.java. Deixe ele parecido como este:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/02/image11.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border-width: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/02/image_thumb11.png" border="0" alt="image" width="432" height="688" /></a></p>
<p>Segue a lista dos componentes:</p>
<p>JLabel jL_Foto –&gt; tamanho 48&#215;48</p>
<p>JTextArea jTA_Status –&gt; pra digitar a mensagem</p>
<p>JLabel jL_Restantes –&gt; vai indicar quantos caracteres ainda restam</p>
<p>JScrollPane jScrollPane2 –&gt; a borda foi mudada para ficar mais legal como esta na figura (Ultimos Tweets)</p>
<p>JPanel jP_Tweets –&gt; este panel vai receber os ultimos tweets, ele fica dentro do jScrollPane2. O layout desse panel é do tipo BoxLayout (layout de caixa)  com a propriedade eixo setada em Y.</p>
<p>Vamos lá então! Exibindo os últimos tweets:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> <span style="color: #003399;">Principal</span> <span style="color: #000000; font-weight: bold;">extends</span> javax.<span style="color: #006633;">swing</span>.<span style="color: #003399;">JFrame</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">private</span> Twitter t<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> User eu<span style="color: #339933;">;</span>
    <span style="color: #003399;">Image</span> foto<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/** Creates new form Principal */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Principal</span><span style="color: #009900;">&#40;</span>Twitter t, User eu<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">t</span> <span style="color: #339933;">=</span> t<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">eu</span> <span style="color: #339933;">=</span> eu<span style="color: #339933;">;</span>
        initComponents<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        recuperarDados<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> recuperarDados<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">foto</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getToolkit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span>eu.<span style="color: #006633;">getProfileImageURL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        jL_Foto.<span style="color: #006633;">setIcon</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ImageIcon</span><span style="color: #009900;">&#40;</span>foto<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        carregaTimeline<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> carregaTimeline<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">JPanel</span> pane<span style="color: #339933;">;</span>
            <span style="color: #003399;">JLabel</span> novaFoto<span style="color: #339933;">;</span>
            <span style="color: #003399;">JTextArea</span> msg<span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
            jP_Tweets.<span style="color: #006633;">removeAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Status s <span style="color: #339933;">:</span> t.<span style="color: #006633;">getFriendsTimeline</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                i<span style="color: #339933;">++;</span>
                <span style="color: #666666; font-style: italic;">//cria o panel</span>
                pane <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JPanel</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">FlowLayout</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">FlowLayout</span>.<span style="color: #006633;">LEFT</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pane.<span style="color: #006633;">setBorder</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">LineBorder</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Color</span>.<span style="color: #006633;">black</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pane.<span style="color: #006633;">setSize</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">370</span>, <span style="color: #cc66cc;">50</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">//cria o label com a foto</span>
                novaFoto <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JLabel</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ImageIcon</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">getToolkit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span>s.<span style="color: #006633;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getProfileImageURL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #666666; font-style: italic;">//cria o textarea com o texto</span>
                msg <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JTextArea</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">3</span>, <span style="color: #cc66cc;">27</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setEditable</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span>s.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                msg.<span style="color: #006633;">setLineWrap</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                pane.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>novaFoto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                pane.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                jP_Tweets.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>pane<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>TwitterException ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Erro recuperando a timeline: &quot;</span> <span style="color: #339933;">+</span> ex.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    ...
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A classe possui 3 atributos que eu considero completamente autoexplicativos mas vamos dar uma pequena passada por eles:</p>
<ul>
<li>Twitter t –&gt; velho conhecido nosso não é…</li>
<li>User eu –&gt; para guardar as informações de quem está logado</li>
<li>Image foto –&gt; para guardar a imagem de perfil do usuário</li>
</ul>
<p>Logo quando o formulário é criado, o método <strong>recuperarDados()</strong> é chamado, a foto do usuário é carregada e então o método <strong>carregaTimeline()</strong> é invocado.</p>
<p>O <strong>carregaTimeline()</strong> cria dinamicamente a lista com os ultimos tweets. O código está todo comentado e está bem fácil de entender.</p>
<p>Vale ressaltar que para a lista ficar certinha (um tweet por linha) o layout do panel jP_Tweets deve ser BoxLayout!</p>
<p>Vamos para a próxima parte então: Atualizando o status.</p>
<p>Mude a propriedade lineWrap do jTA_Status para true, com isso a linha não vai ultrapassar os limites do text area e o texto vai ficar dentro dela.</p>
<p>Para fazer a contagem dos caracteres restantes vamos utilizar de uma funcionalidade bem interessante do text area: O evento caretUpdate é chamado toda vez que uma tecla é adiciona ou deletada, sendo assim, adicione o seguinte código neste evento caretUpdate do jTA_Status:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jTA_StatusCaretUpdate<span style="color: #009900;">&#40;</span>javax.<span style="color: #006633;">swing</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">CaretEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    jL_Restantes.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span>.<span style="color: #006633;">valueOf</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">140</span> <span style="color: #339933;">-</span> jTA_Status.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Próximos passos: não deixar o usuário digitar mais do que 140 caracteres e postar a mensagem.</p>
<p>O que vamos fazer é o seguinte: se o usuário for digitar o 141º a gente simplesmente cancela ele. Podemos tratar as duas funções no evento keyTyped do jTA_Status.</p>
<p>Segue o código:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">void</span> jTA_StatusKeyTyped<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">awt</span>.<span style="color: #006633;">event</span>.<span style="color: #003399;">KeyEvent</span> evt<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>jTA_Status.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">length</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">140</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	evt.<span style="color: #006633;">setKeyChar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">char</span><span style="color: #009900;">&#41;</span> <span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_CLEAR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>evt.<span style="color: #006633;">getKeyChar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #003399;">KeyEvent</span>.<span style="color: #006633;">VK_ENTER</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
	    t.<span style="color: #006633;">updateStatus</span><span style="color: #009900;">&#40;</span>jTA_Status.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            jTA_Status.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	    carregaTimeline<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>TwitterException ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	    <span style="color: #003399;">JOptionPane</span>.<span style="color: #006633;">showMessageDialog</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Erro atualizando o status: &quot;</span> <span style="color: #339933;">+</span> ex.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Muito tranquilo. Pouco código e muitas funcionalidades. <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Agora nosso cliente já está com uma cara bem legal. Eu implementei mais algumas frescurinhas e ele ficou assim:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/02/image21.png"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="image" src="http://www.javasimples.com.br/wp-content/uploads/2010/02/image_thumb21.png" border="0" alt="image" width="445" height="724" /></a></p>
<p>Ali embaixo da minha foto tem um label que mostra um pedacinho do ultimo post… embaixo da lista mostra quantos tweets foram carregados… enfim, um monte de frescura que eu nem mostrei aqui…</p>
<p>Quem quiser conferir o projeto completo pode pegar <a href="http://dl.dropbox.com/u/4918828/TwitterClienteParte2.rar" target="_blank">aqui</a>.</p>
<p>Sugestões para quem quiser aperfeiçoar um pouco mais esse humilde cliente de Twitter:</p>
<ul>
<li>De 5 em 5 minutos recarregar a lista de tweets. Dica: utilizando Threads fica facinho.</li>
<li>Ao clicar na foto da pessoa, uma janela abre com as informações da pessoa.</li>
<li>Adicionar um botão para retwittar a mensagem.</li>
</ul>
<p>Quem quiser tem como brincar bastante com isso ai…</p>
<p>Valew pessoal,</p>
<p>[]s e até a próxima.</p>
<p>Saab.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/twitter-2/criando-um-cliente-para-twitter-parte-2/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Criando um cliente para Twitter &#8211; Parte 1</title>
		<link>http://www.javasimples.com.br/twitter-2/criando-um-cliente-para-twitter-parte-1</link>
		<comments>http://www.javasimples.com.br/twitter-2/criando-um-cliente-para-twitter-parte-1#comments</comments>
		<pubDate>Wed, 24 Feb 2010 23:58:28 +0000</pubDate>
		<dc:creator>Felipe Saab</dc:creator>
				<category><![CDATA[Twitter]]></category>
		<category><![CDATA[acessar]]></category>
		<category><![CDATA[cliente]]></category>
		<category><![CDATA[integrar]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitter4j]]></category>

		<guid isPermaLink="false">http://www.javasimples.com.br/?p=79</guid>
		<description><![CDATA[Fim do período de manutenção! Finalmente esse blog ficou com uma interface mais agradável e bonita. Todos os créditos ao @jpalacio1988 . Muito obrigado! Vamos ao assunto de hoje: criando um cliente de Twitter. Ah o Twitter&#8230; Quem não usa o twitter? Quem nunca ouviu falar do twitter? Acho que hoje em dia é bem difícil. [...]]]></description>
			<content:encoded><![CDATA[<p><!--:pt-->Fim do período de manutenção!<br />
Finalmente esse blog ficou com uma interface mais agradável e bonita.<br />
Todos os créditos ao <a href="http://twitter.com/jpalacio1988">@jpalacio1988</a> . Muito obrigado! <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Vamos ao assunto de hoje: criando um cliente de Twitter.</p>
<p>Ah o Twitter&#8230; Quem não usa o twitter? Quem nunca ouviu falar do twitter? Acho que hoje em dia é bem difícil.<br />
Mas aproveitar todas as funcionalidades do twitter no navegador é &#8211; na minha opinião &#8211; um saco! Toda hora fica recarregando, tem horas que aparece aquela PIIII daquela baleia dizendo que o servidor está congestionado&#8230;</p>
<p>Enfim, para não passar por esses probleminhas normalmente a gente apela para os clientes de twitter, que nada mais são do que softwares que acessam o twitter com a nossa conta e mostram as atualizações de um jeito bem bonitinho e cheio de frescuras - vide TweetDeck, ÜberTwitter, entre outros.</p>
<p>Contudo, esses clientes não foram feitos especificamente para nós, ou seja, podem existir funções que não sejam do nosso gosto e pode também faltar algumas funções que sejam essenciais para nós. Então por que não criar o seu próprio cliente de Twitter? É muito simples e personalizável, podemos criá-lo do jeito que quisermos. Vamos a algumas informações essenciais:</p>
<p><!--:--><span id="more-79"></span><!--:pt--></p>
<p>Para conseguir mostrar as informações da nossa conta do Twitter em uma telinha de um software desktop, eles fazem chamadas para a <a href="http://apiwiki.twitter.com/">API do Twitter</a>. A equipe do Twitter já deixou tudo pronto pra nós não termos muito trabalho recuperando as informações. Basta fazer uma requisição HTTP e será retornado um XML com as informações requisitadas.</p>
<p>Para a sorte do desenvolvedor Java, um tal de Yusuke Yamamoto desenvolveu uma biblioteca chamada <a href="http://twitter4j.org/en/index.html">Twitter4J</a> onde ele já encapsula todas as requisições HTTP, tratamentos da resposta, enfim, é responsável por todo o trabalho duro necessário para interagir com o Twitter, sendo assim, nós podemos nos concentrar mais na aplicação em si.</p>
<p>Nessa primeira parte do tutorial vou mostrar apenas como conectar, atualizar o status e recuperar a timeline. Nas próximas partes a gente vai modelando e dando vida ao nosso cliente.</p>
<p>Mãos a obra então: baixe o <a href="http://dl.dropbox.com/u/4918828/twitter4j-core-2.1.1-SNAPSHOT.jar">twitter4j-core</a> e crie uma nova aplicação no NetBeans (não precisa ser aplicação desktop por enquanto). Adicione a biblioteca que você acabou de baixar às bibliotecas do projeto como na figura:</p>
<p><a href="http://www.javasimples.com.br/wp-content/uploads/2010/02/projeto1.png"><img class="aligncenter size-full wp-image-84" title="projeto" src="http://www.javasimples.com.br/wp-content/uploads/2010/02/projeto1.png" alt="" width="268" height="169" /></a></p>
<p>O código da aplicação é muito simples, como segue abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">String</span> usuario <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;seu nome de usuario&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span> senha <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;sua senha&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;">//conectando</span>
        Twitter twitter <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> TwitterFactory<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getInstance</span><span style="color: #009900;">&#40;</span>usuario, senha<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//recuperando a timeline</span>
        List<span style="color: #339933;">&lt;</span>status<span style="color: #339933;">&gt;</span> timeline <span style="color: #339933;">=</span> twitter.<span style="color: #006633;">getFriendsTimeline</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Exibindo a timeline&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;----------------------------------------&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>Status s <span style="color: #339933;">:</span> timeline<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>s.<span style="color: #006633;">getUser</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getScreenName</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; - &quot;</span> <span style="color: #339933;">+</span> s.<span style="color: #006633;">getText</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;----------------------------------------&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">//atualizando o status</span>
        <span style="color: #003399;">String</span> novoStatus <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;#JavaSimples - testando o twitter4j!&quot;</span><span style="color: #339933;">;</span>
        twitter.<span style="color: #006633;">updateStatus</span><span style="color: #009900;">&#40;</span>novoStatus<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Status atualizado com sucesso!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>TwitterException ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Erro: &quot;</span> <span style="color: #339933;">+</span> ex.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Para conectar no Twitter é criado um objeto da classe Twitter que é um intermediário entre a nossa aplicação e a API do Twitter, ou seja, tudo o que nós quisermos fazer deve ser através de um método desse objeto. Ele é criado seguindo um padrão de projeto (olha a engenharia de software marcando presença&#8230;) chamado Abstract Factory &#8211; que provê a padronização na criação de um objeto, mas como a engenharia não é o foco aqui, vamos em frente.</p>
<p>Logo em seguida, é criada uma lista chamada <strong>timeline</strong> que é do tipo List&lt;Status&gt; e que recebe todas as atualizações das pessoas que você segue através do método <strong>getFriendsTimeLine() </strong>do nosso objeto da classe Twitter.<br />
Cada update/status/post de um usuário no twitter é representado pela classe Status, através da qual pode-se obter qualquer tipo de informação do update/status/post. No exemplo nós recuperamos o usuário (recuperamos um objeto da classe User que contém as informações do usuário) e a partir dele, o seu screenName (sigla que te identifica no twitter. ex: fesaab) e também o texto do update/status/post.</p>
<p>Por fim, eu atualizo o status com uma simples mensagem e se não ocorrer nenhum erro mostra uma mensagem de sucesso.</p>
<p>Tudo muito prático e simples! <img src='http://www.javasimples.com.br/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Ficamos por aqui nessa primeira parte do nosso tutorial sobre Java + Twitter. Quem quiser o projeto completo pode pegar <a href="http://www.4shared.com/file/229198933/93a36af5/TwitterClienteParte1.html">aqui</a>.</p>
<p>[]s,<br />
Saab.<!--:--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.javasimples.com.br/twitter-2/criando-um-cliente-para-twitter-parte-1/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

