APIs e Microsserviços

30 nov, 2010

Usando PHP para Converter o Twitter em RSS

Publicidade

Antes de entrar de cabeça no tópico do Twitter, há algo que preciso colocar para fora.
Apesar de seu um ávido usuário e fã do Twitter agora, logo que apareceu, eu fiquei um pouco confuso com ele.
Na verdade, posso ter sido um pouco hostil.

Pronto. Falei. Agora, deixe-me contar a história por trás disso.

Quando o Twitter estava sendo introduzido na South by
Southwest 2007, um grande amigo me ligou para falar sobre ele.
“Você deveria se inscrever para obter uma conta.
É algo realmente excelente!”

Aparentemente, as mensagens de microblog
estavam sendo exibidas em enormes monitores por toda parte do salão de
convenções.
Aquele ano eu estava viajando muito e não pude estar na
South by Southwest. E, a propósito, estava fechado em
meu pequeno mundinho para realmente prestar atenção.
Microblog? Tweets? Do que esse cara estava falando?

Algum tempo depois, tive a oportunidade de brincar com o
serviço e concluí que não era para mim.
Na verdade, eu praticamente disse que o Twitter era uma grande perda de
tempo.

Não achei meus colegas seres humanos interessantes o suficiente para
seguir mesmo quando haviam inventado a unidade warp ou a cura para o
câncer.
E, na época, o Twitter parecia estar cheio de pessoas falando sobre
sanduiches que tinham acabado de fazer para seus filhos.

Avançando alguns meses e, de repente, estou usando o
Twitter o tempo todo.
Estou seguindo fontes de notícias, candidatos presidenciais e amigos que
estão longe.
Por que a grande mudança? Realmente não sei.

Muitos de vocês, colegas twitters, sabem do que estou falando aqui. É como ter seu primeiro
telefone celular.
Um dia você acha que é besteira andar por aí com um telefone caro quando
há todos esses telefones públicos, telefones residenciais e telefones
comerciais à sua disposição.
Depois, quando se da conta, está perdido na estrada e, uma cidade
qualquer e jura que o pequeno aparelho salvou sua vida.

Uma coisa é certa, no entanto: diferentemente de como
telefones celulares tiraram o lugar dos telefones públicos, o Twitter
não substituiu minha atividade de rede de relacionamento ele a
aprimora.

Em geral, eu o uso para postar itens interessantes que encontro na Web
documentos e recursos que farão meus seguidores pensarem ou rirem.
Espero que sejam pelo menos úteis de alguma forma. E, sim, alguns dias
tudo que tenho a dizer é: “Diabos, preciso de um café” ou “Passei um
apuro ontem à noite”, mas mantenho mínima esse tipo de conversa mole.

Em algum ponto, sendo um desenvolvedor, quero mais. Quero
consertar e desmontar as coisas ou pelo menos descobrir como as coisas
funcionam.
Em um artigo anterior, mostrei como construir um ferramenta simples de
microblog em PHP, algo leve que funcionaria bem no contexto de um
aplicativo de intranet ou outro sistema fechado.

Neste artigo, quero me aprofundar um pouco mais nas
entranhas do Twitter, explorando a API um pouco, depois, indo para uma
biblioteca PHP pública bem conhecida que pode facilitar algumas tarefas.

O objetivo deste artigo é mostrar como as coisas funcionam e fornecer
algumas ferramentas com as quais deseja exportar sua linha de tempo do
Twitter para RSS.
O propósito?
Compartilhar é o sine qua non, a raison d’etre dos serviços de mídia de relacionamento como o Twitter.
Às vezes é uma boa ideia ter suas atualizações do Twitter em seu Web site
principalmente, se, como eu, você usar o serviço para compartilhar informações e recursos.

Alguns de vocês podem estar se perguntando: “Bem, para
que isso?” Se vem acompanhando as tendências de marketing e mídia de
relacionamento, sabe que todos
governos, marcas corporativas, rpofissionais de marketing,
consumidores, entusiastas de todo tipo
estão entrando na onda de “mercados são conversas”.
Na verdade, pode-se dizer que uma grande quantidade de tinta digital
está sendo usada nesse tópico.

Diferentemente da maioria das pessoas, você é um
especialista em tecnologia e está, portanto, bem posicionado para
realmente saber algo quantitativo sobre essas ferramentas e como as
conversas são ativadas.

É bom para sua carreira
você será uma pessoa na sala que realmente entende tudo isso nos
mínimos detalhes, em vez de apenas jogar conversa afiada sobre de mídia
de relacionamento.
Além disso, é bom para continuar a expandir seu conjunto de
qualificações.

Base técnica sobre APIs do Twitter

Na superfície, o Twitter é basicamente um serviço de blog reduzido. Há usuários que postam
tweets. Tweets são limitados a 140 caracteres e têm registro de
data e hora.
Os usuários podem seguir uns aos outros, o que é basicamente um serviço
de organização simplificada.

As informações sobre contas do Twitter e linhas de tempo e tweets
associados estão disponíveis não apenas para interfaces da Web padrão,
mas também para aplicativos de terceiros através da API do Twitter.
Essa API expõe os dados e serviços do Twitter através de uma API
Representational State
Transfer (REST) ou de uma API de procura.

Este artigo foca somente a API REST, pois você realmente
não precisa de funcionalidade de procura para publicar um feed RSS de
tweets.
Não precisa dizer que a API de procura é extremamente útil, fornecendo
dados em formatos Atom e JavaScript Serialized Object Notation (JSON) e
permitindo diversos critérios de procura (tweets contendo uma palavra,
de um usuário específico, para um usuário específico, fazendo referência
a um usuário específico, contendo uma hashtag e combinações de todos
acima).
A API REST é igualmente útil, fornecendo dados em formatos RSS, XML,
JSON e
Atom.

A API REST usa autenticação básica de HTTP como seu
esquema de autenticação e a maioria das bibliotecas e utilitários requer
o uso de um nome de usuário e senha do Twitter para iniciar. Se não tiver uma conta do
Twitter, precisa de uma para iniciar ou, pelo menos,
acesso às credenciais de autenticação de uma conta do Twitter.

No entanto, como o wiki da API do Twitter informa: “Todas as respostas
são relativas ao contexto do usuário autenticado.”
Se estiver tentando recuperar informações de um usuário protegido que
você não está seguindo, seu pedido falhará.

Como o nome da API REST sugere, a API do Twitter tenta
estar em conformidade com os princípios de design de Representational
State Transfer. REST é geralmente usada em um sentido amplo para
descrever qualquer interface simples que transmita dados específicos do
domínio através de HTTP sem nenhuma camada adicional (como SOAP ou
cookies).

Serviços RESTful geralmente giram em torno de um ou mais recursos, cada
um dos quais estando amarrado a algo exclusivamente endereçável
ou seja, um Identificador Uniforme de Recursos (URI).
No contexto da API do Twitter, há diversos serviços RESTful disponíveis
para extrair informações sobre usuários, seguidores, linhas de tempo e
mais.

O uso da API do Twitter envolve algumas abordagens
familiares. Em muitos casos, é possível alternar de um tipo de dados
para outro, simplesmente alterando a extensão do nome do arquivo.
Deseja Atom em vez de RSS? Simplesmente altere a extensão do nome do
arquivo e, se o método específico suportar isso, obterá um novo fluxo de
dados formatado.

Converter os parâmetros de seu pedido para 8-bit Unicode
Transformation Format (UTF-8) e usar codificação do
Localizador Uniforme de Recursos (URL) também é uma boa ideia,
principalmente, se se esses pedidos envolverem cadeias de caracteres
complexas.

É importante observar que a API do Twitter suporta os seguintes tipos de pedidos:

  • GET, que é usado para recuperação de dados
  • POST, que é usado para enviar, alterar ou destruir dados
  • DELETE, que também é usado para destruir dados

Se tentar recuperar dados com uma operação POST, a API retorna um erro corresponder métodos a tipos de pedidos é um bom lugar para iniciar a depuração.

Como outros serviços REST que usam HTTP, a API do Twitter exibe um conjunto de códigos de status e mensagens de erro.

A API do Twitter retorna códigos de status HTTP padrão e apropriado, descrito na
Tabela 1,
em cada pedido.
Isso torna trabalhar com a API do Twitter semelhante a (se não
indistinto de) outras operações baseadas em HTTP com as quais já está
acostumado, como Asynchronous JavaScript + XML (Ajax) e operações
síncronas simples
GET e
POST.

Tabela 1. Códigos de status da API do Twitter

Código Descrição
200 OK Tudo está bem.
304 Não Modificado Nenhum dados novo a retornar.
400 Pedido Inválido Pedido
inválido, com alguns detalhes. Isso é o que se obtém também se tiver
excedido o limite da taxa (mais sobre isso daqui a pouco).
401 Não Autorizado Você esqueceu de fornecer detalhes de autenticação ou os fornecidos são inválidos.
404 Não Localizado O URI solicitado não existe (ou seja, o usuário não existe ou o serviço de dados não é suportado).
500 Erro Interno do Servidor Isso geralmente é um problema do lado do Twitter.
502 Gateway Inválido O Twitter está inativo ou sendo atualizado.
503 Serviço Indisponível Os servidores do Twitter estão sobre carregados.

As mensagens de erro são sempre retornadas em seu formato solicitado. Se
você solicitar XML, obterá todas as mensagens de erro em XML.
Por exemplo, a Lista 1 é um fragmento de uma mensagem de erro publicada
no wiki da API do Twitter.

Lista 1. Trecho de uma mensagem de erro (Formato XML)

<?xml version="1.0" encoding="UTF-8"?>
<hash>
È <request>/direct_messages/destroy/111.xml</request>
È <error>No direct message with that ID found.</error>
</hash>

Uma nota final sobre limites de taxa: clientes têm permissão para 100
pedidos por hora, a partir de seu primeiro pedido, sem incluir
atualizações
POST. Pedidos não autenticados são
controlados pelo endereço IP, enquanto que os autenticados são
controlados pelo usuário que faz o pedido.

Toda vez que o limite da taxa for excedido, o Twitter retorna uma
mensagem de erro 400, portanto, é necessário pensar em implementar
caches locais do seu lado das coisas.
As linhas de tempo públicas são armazenadas em cache por pelo menos 60
segundos pelo Twitter, portanto, solicitar um atualização é praticamente
uma perda de tempo.

No entanto, caso se veja dando de frente com o limite de taxa, é possível solicitar lista branca do Twitter – você pode aprender maiores detalhes consultando a seção Recursos ao final do artigo. Eles retornam dentro de 48 horas e, se aprovado, seu aplicativo terá permissão para 20.000 pedidos por hora.

Trabalhando com a API REST do Twitter

Quando estava apenas iniciando como um jovem desenvolvedor da Web,
não tinha nenhum problema para sair correndo para qualquer canto para
ficar codificando noite e dia.
Após quinze anos, estão, certamente, muito mais velho e, espero, um
pouco mais sábio.

Apesar de fornecer alguns detalhes sobre os métodos da API REST do
Twitter aqui, é somente para propósitos informativos.
No final do dia, você irá usar uma bela biblioteca PHP que facilita seu
desgaste em grande parte.

No entanto, como não vale a pena introduzir uma
biblioteca sem algum contexto, o que segue é uma breve descrição de
alguns dos métodos e chamadas mais amplamente usados da API REST do
Twitter.

O método mais comumente usado da API provavelmente é
public_timeline. Ele está disponível, como
outros métodos de status, em formatos XML, JSON, RSS e Atom e,
provavelmente, é recuperado através de um método GET. Ele
está disponível em
http://twitter.com/statuses/public_timeline.xml (ou
.rss, etc.).

O elemento de status, mostrado na Lista 2, basicamente
contém nós que descrevem a conta e possui um nó de usuário integrado que
descreve o usuário.

Lista 2. O Elementos de Status public_timeline

<status>
created_at
id
text
source
truncated
in_reply_to_status_id
in_reply_to_user_id
favorited
<user>>
id
name
screen_name
description
location
profile_image_url
url
protected
followers_count

Outro método bem comum é
friends_timeline, que retorna os 20 status mais recentes postados pelo usuário autenticado e pelos amigos desse usuário.
Isso é bem equivalente a http://www.twitter.com/home se você tiver efetuado login no Twitter. O método esta disponível em
http://twitter.com/statuses/friends_timeline.xml (ou .rss, .atom, .json) e é recuperado através de um pedido
GET.

É possível inserir alguns parâmetros opcionais, como since (uma data modificada por HTTP, como
Mon%2C+2+Feb+2009+11%3A45%3A33+GMT) ou page (para recuperar uma página específica de tweets da linha de tempo).

Em seguida, há o método user_timeline, que é semelhante a
friends_timeline, mas é limitado aos (adivinhou) tweets de um usuário específico.
Se nenhum nome de usuário do Twitter for especificado, a API supõe que deseja recuperar a linha de tempo do usuário autenticado.

Há muitos outros métodos disponíveis, é claro, mas esses
três são suficientes para iniciar.
Agora, como me referi, e possível brincar com a API do Twitter sem
nenhuma ajuda, mas isso não o torna um desenvolvedor produtivo.
Você possui prazos finais próprios, portanto, é melhor usar uma
biblioteca pré-construída.

Felizmente para você, uma bela biblioteca chamada twitterlibphp está disponível. Vá em frente e faça download dela e, então, inclua a mesma em seu servidor de teste ou de desenvolvimento.
Na próxima seção, você começará a brincar com ela.

Usando twitterlibphp

A biblioteca twitterlibphp contém uma lista de métodos, sendo que cada um é mapeado para um método de API do Twitter.
A própria biblioteca trata de todas as conexões, autenticação, manipulação de erros e o vai e volta.
Simplesmente inclua a mesma, autentique e use um dos métodos para iniciar.

Para iniciar, veja o que ocorre se usar o método
showUser() para recuperar um status XML para um usuário específico.
Na Lista 3, simplesmente substitua os valores de
$user e
$pw pelas credenciais de sua conta e isso será suficiente para recuperar informações de status.

Lista 3. O método showUser()

include_once("twitter.lib.php");

$user = "your-username";
$pw = "your-password";

$twitter = new Twitter($user,$pw);

$xml = $twitter->showUser("xml", $user);

echo $xml;

O resultado fornece muitas informações em sua saída bruta. No XML
mostrado na Lista 4, você não apenas vê meu nome real, o nome de tela e o
tweet mais recente, mas também pode ver com quem estou tweeting, o
caminho para a imagem de meu perfil e, até mesmo, minhas preferências de
cores.

Lista 4. Saída do método showUser()

<?xml version="1.0" encoding="UTF-8"?>
<user>
<id>14129237</id>
<name>Thomas Myer</name>
<screen_name>myerman</screen_name>
<location>Most likely rushing to my next</location>
<description>Author, Infopreneur, Blogger, Consultant</description>
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/
74029317/myerman_gmail.com_eef446f6_normal.jpg</profile_image_url>
<url>http://www.tripledogs.com</url>
<protected>false</protected>
<followers_count>55</followers_count>
<profile_background_color>FFFFFF</profile_background_color>
<profile_text_color>5F5454</profile_text_color>
<profile_link_color>A18FB9</profile_link_color>
<profile_sidebar_fill_color>082C35</profile_sidebar_fill_color>
<profile_sidebar_border_color>120E26</profile_sidebar_border_color>
<friends_count>16</friends_count>
<created_at>Wed Mar 12 02:10:30 +0000 2008</created_at>
<favourites_count>3</favourites_count>
<utc_offset>-21600</utc_offset>
<time_zone>Central Time (US & Canada)</time_zone>
<profile_background_image_url>http://static.twitter.com/images/themes/theme1/bg.gif
</profile_background_image_url>
<profile_background_tile>false</profile_background_tile>
<following>false</following>
<notifications>false</notifications>
<statuses_count>427</statuses_count>
<status>
<created_at>Sun Feb 01 21:29:17 +0000 2009</created_at>
<id>1167762741</id>
<text>@adonoho [tweet snipped for privacy].</text>
<source>web</source>
<truncated>false</truncated>
<in_reply_to_status_id>1167558714</in_reply_to_status_id>
<in_reply_to_user_id>882801</in_reply_to_user_id>
<favorited>false</favorited>
<in_reply_to_screen_name>adonoho</in_reply_to_screen_name>
</status>
</user>

Considerando todos esses detalhes, seria fácil processar esse
conjunto de nós XML com SimpleXML e poder fazer algo útil com tudo isso.
Por exemplo, seria possível gravar facilmente uma ferramentas que exibe
o elemento
screen_name juntamente com
statuses_count e, possivelmente, o nó
created_at do status mais atual.

Por mais interessante que tudo isso seja, o que você
realmente quer é RSS. Especificamente, quer recuperar a linha de tempo
de um usuário.
Quando estiver no formato RSS, é possível disponibilizá-la em um site
orientado por PHP como um widget de barra lateral, uma página exclusiva
ou qualquer outro destino endereçável.

Para fazer isso, altere o exemplo anterior e use o método
getUserTimeline() da biblioteca, mostrado na Lista 5.

Lista 5. O método getUserTimeline()

include_once("twitter.lib.php");

$user = "your-username";
$pw = "your-password";

$twitter = new Twitter($user,$pw);

$rss = $twitter->getUserTimeline("rss", $user);

echo $rss;

Como pode ver, essa função retorna RSS pronto para ser usado.

Lista 6. Saída do método getUserTimeline()

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Twitter / myerman</title>
<link>http://twitter.com/myerman</link>
<description>Twitter updates from Thomas Myer / myerman.</description>
<language>en-us</language>
<ttl>40</ttl>
<item>
<title>myerman: just got my copy of groundswell...also,
just got back from seeing Taken. Liam Neeson kicks butt!</title>
<description>myerman: just got my copy of groundswell...also, just got back from
seeing Taken. Liam Neeson kicks butt!</description>
<pubDate>Sun, 01 Feb 2009 04:16:55 +0000</pubDate>
<guid>http://twitter.com/myerman/statuses/1166126064</guid>
<link>http://twitter.com/myerman/statuses/1166126064</link>
</item>
<item>
<title>myerman: For those of us trying to learn
Objective-C - some libraries. http://tinyurl.com/dkaj4m</title>
<description>myerman: For those of us trying to learn
Objective-C - some libraries. http://tinyurl.com/dkaj4m</description>
<pubDate>Fri, 30 Jan 2009 20:06:13 +0000</pubDate>
<guid>http://twitter.com/myerman/statuses/1162686918</guid>
<link>http://twitter.com/myerman/statuses/1162686918</link>
</item>
<item>
<title>myerman: RT @andyhunter Google Chief Economist
on innovation: Weâre in the middle of .. a period of âcombinatorial innovation.â
http://bit.ly/xgpN</title>
<description>myerman: RT @andyhunter Google Chief Economist
on innovation: Weâre in the middle of .. a period of âcombinatorial innovation.â
http://bit.ly/xgpN</description>
<pubDate>Fri, 30 Jan 2009 15:35:18 +0000</pubDate>
<guid>http://twitter.com/myerman/statuses/1161902779</guid>
<link>http://twitter.com/myerman/statuses/1161902779</link>
</item>
<item>
<title>myerman: A-Team movie out next year? I love it when a plan comes together.
http://tinyurl.com/ahckx9</title>
<description>myerman: A-Team movie out next
year? I love it when a plan comes together.
http://tinyurl.com/ahckx9</description>
<pubDate>Thu, 29 Jan 2009 19:21:34 +0000</pubDate>
<guid>http://twitter.com/myerman/statuses/1159386717</guid>
<link>http://twitter.com/myerman/statuses/1159386717</link>
</item>
<item>
<title>myerman: @andyhunter @cesart it's the pulvinar that gets you in trouble...
every time!</title>
<description>myerman: @andyhunter @cesart
it's the pulvinar that gets you in trouble...
every time!</description>
<pubDate>Thu, 29 Jan 2009 16:44:30 +0000</pubDate>
<guid>http://twitter.com/myerman/statuses/1158923928</guid>
<link>http://twitter.com/myerman/statuses/1158923928</link>
</item>
<item>
<title>myerman: Create a manga avatar of yourself. http://www.faceyourmanga.com
</title>
<description>myerman: Create a manga avatar of yourself. http://www.faceyourmanga.com
</description>
<pubDate>Thu, 29 Jan 2009 16:43:55 +0000</pubDate>
<guid>http://twitter.com/myerman/statuses/1158922223</guid>
<link>http://twitter.com/myerman/statuses/1158922223</link>
</item>
<item>
<title>myerman: Zombies ahead on Lamar & 15th....silly hackers!
http://tinyurl.com/c2s3nw</title>
<description>myerman: Zombies ahead on Lamar & 15th....silly hackers!
http://tinyurl.com/c2s3nw</description>
<pubDate>Thu, 29 Jan 2009 13:21:24 +0000</pubDate>
<guid>http://twitter.com/myerman/statuses/1158382096</guid>
<link>http://twitter.com/myerman/statuses/1158382096</link>
</item>
<item>
<title>myerman: Obama's Mac: http://tinyurl.com/b4hsza</title>
<description>myerman: Obama's Mac: http://tinyurl.com/b4hsza
</description>
<pubDate>Thu, 29 Jan 2009 13:17:58 +0000</pubDate>
<guid>http://twitter.com/myerman/statuses/1158375012</guid>
<link>http://twitter.com/myerman/statuses/1158375012</link>
</item>
<item>
<title>myerman: OK, looks like I'll be
speaking on Saturday at SxSW 2009. More details
for the freelancer in your life: http://tinyurl.com/df8my9</title>
<description>myerman: OK, looks like I'll be speaking on Saturday at SxSW 2009.
More details for the freelancer in your life: http://tinyurl.com/df8my9</description>
<pubDate>Wed, 28 Jan 2009 22:39:29 +0000</pubDate>
<guid>http://twitter.com/myerman/statuses/1156744158</guid>
<link>http://twitter.com/myerman/statuses/1156744158</link>
</item>

...snip
</channel>
</rss>

Há um porém: não se deve simplesmente chamara essa função repetidamente até atingir o limite da taxa.
Em vez disso, deve-se controlar um pouco os pedidos.

Pode-se fazer algo bem inteligente com o método
rateLimitStatus() e algum armazenamento em cache rolado do início para obter um efeito de armazenamento em cache local.

O método rateLimitStatus(), mostrado na Lista 7, é um pedido simples que permite verificar se atingiu seu limite de taxa por hora
e, não, antes que pergunte, verificar o status do limite da taxa não conta para seu limite.
Tudo que precisa ser feito é fornecer um formato e a função faz o resto.

Lista 7. O método rateLimitStatus()

include_once("twitter.lib.php");

$user = "your-username";
$pw = "your-pw";

$twitter = new Twitter($user,$pw);
$status = $twitter->rateLimitStatus("xml");
echo $status;

Ao executar o método rateLimitStatus(), receberá o XML a seguir de volta.

Lista 8. Saída do método rateLimitStatus()

<?xml version="1.0" encoding="UTF-8"?>
<hash>
<hourly-limit type="integer">100</hourly-limit>
<reset-time type="datetime">2009-02-02T05:44:45+00:00</reset-time>
<reset-time-in-seconds type="integer">1233553485</reset-time-in-seconds>
<remaining-hits type="integer">99</remaining-hits>
</hash>

O que deseja é o valor dentro do nó
remaining-hits. Se isso atingir cinco
alguma vez (ou possivelmente 10), vá para seu feed RSS armazenado em
cache em vez disso.

Com esse conjunto de nós XML disponível, tudo que precisa ser feito é
carregar SimpleXML para simplesmente analisar o status do limite da
taxa.
É claro que se não estiver familiarizado com as excentricidades de XML,
pode ser melhor analisar em JSON.

Executar o mesmo código usando o formato JSON resulta em uma instrução muito mais compacta:

{"remaining_hits":95,"hourly_limit":100,"reset_time":"Mon Feb 02 05:44:45 +0000 2009",
"reset_time_in_seconds":1233553485}

Poderia gastar algum tempo para dividir essa cadeia por vírgulas e, então, novamente por dois pontos para obter o valor de remaining_hits.
Isso é bem simples, é claro. No entanto, se estiver executando PHP V5.2.0 ou superior, provavelmente já possui o método json_decode() disponível.

Conforme mostrado na Lista 9, tudo que precisa ser feito é usar essa função para obter o número remaining_hits e, então, usar uma instrução if simples para ver se esse número está perto de 10 ou se é inferior.

Se não estiver, retire o feed RSS do Twitter, mas salve-o em um arquivo para uso posterior.
Se for inferior a 10, forneça o arquivo RSS salvo armazena em cache localmente.

Lista 9. Usando o método json_decode()

include_once("twitter.lib.php");

$user = "your-username";
$pw = "your-password";

$twitter = new Twitter($user,$pw);
$status = $twitter->rateLimitStatus("json");
$fileName = $user.".rss";

$json_dump = json_decode($status);

$remaining = $json_dump->remaining_hits;

if ($remaining <= 10){

$fh = fopen($fileName, 'r');
$rssData = fread($fh, filesize($fileName));
fclose($fh);
echo $rssData;


}else{

$rss = $twitter->getUserTimeline("rss", $user);

//write to file
//in case we need it!
$fh = fopen($fileName,'w') or die("can't write to file");
fwrite($fh,$rss);
fclose($fh);

echo $rss;
}

Tudo que resta é dar a esse arquivo PHP um nome apropriado (por exemplo,
twitterfeed.php) e usá-lo de forma apropriada
oferecendo-o a seus usuários como outra opção de assinatura, alimentando
um widget de barra lateral WordPress ou algo parecido.

Conclusão 

Neste artigo, você aprendeu um pouco sobre como o Twitter funciona
especificamente, o que a API REST expõe. Aprendeu também como usar uma
biblioteca PHP disponível publicamente para simplificar sua carga de
trabalho.
Com alguma sorte, aprendeu o suficiente para construir seus próprios
aplicativos e utilitários.

Recursos

Aprender

Obter produtos e tecnologias

Discutir

***

artigo publicado originalmente no developerWorks Brasil, por Thomas Myer


Thomas Myer é o cofundador da Triple Dog Dare Media, em Austin, Texas,
empresa de consultoria. Thomas escreve sobre os assuntos de
gerenciamento de conhecimento, design de informações e capacidade de
uso. Você pode enviar um e-mail para ele em tom@tripledogdaremedia.com.