Na primeira parte deste artigo, trabalhámos a API do Twitter, criámos uma classe e importamos os últimos tweets. Na segunda parte começámos a colocar o conteúdo no seu lugar, ou seja, nos templates HTML. Como demonstrámos, é bastante simples de fazer, utilizando os 2 templates que definimos anteriormente: O template do widget, e o template do tweet. Nesta terceira e última parte iremos transformar as datas num formato de acordo com o que pretendemos, construir a cache e finalizar o widget.
Se pretende criar um widget PHP para o Twitter, não perca a continuação deste artigo! Este tutorial foi a última parte de uma série de artigos, pelo que se tiver ideias ou sugestões, participe e deixe o seu comentário! Não deixe de ler também os outros artigos desta série:
- Aprenda a criar um widget PHP para o Twitter – Parte I
- Aprenda a criar um widget PHP para o Twitter – Parte II
- Aprenda a criar um widget PHP para o Twitter – Parte III
O RECIPIENTE DA CACHE
Actualmente a classe TwitterStatus irá captar os tweets mais recentes sempre que o método Render() é chamado. Este processo poderá demorar alguns segundos e necessita de processamento significativo. No entanto isto não é necessário. Pode receber 100 visitas e os seus ultimos tweets serem os mesmos, e não há necessidade de estar a efectuar o processamento todo de novo. Por isso cria-se a cache, onde irá ser guardada a informação durante X segundos, até ser actualizada. Neste caso a cache irá ser um ficheiro html que irá ser colocado no sistema. Se a idade desse ficheiro for inferior ao valor da $CacheFor (em segundos) então o ficheiro irá ser carregado e não será feita uma nova ligação à API do Twitter.
O método Render() gera um ficheiro no sistema local no directório definido para a cache, seguido pelo ID do Twitter, um traço, o número de tweets e a extensão do ficheiro (neste caso será HTML):
public function Render() {
// returned HTML string
$render = '';
// cached file available?
$cache = $this->cache . $this->ID . '-' . $this->Count . '.html';
Depois pode-se calcular o número de segundos que passaram desde que o ficheiro foi criado (assumindo que ele existe):
$cacheage = (file_exists($cache) ? time() - filemtime($cache) : -1);
Se o ficheiro não existir ou o número de segundos for superior ao $CacheFor então necessitamos de gerar uma nova cache usando o código escrito na Parte II deste tutorial:
if ($cacheage < 0 || $cacheage > $this->CacheFor) {
Se o HTML foi gerado correctamente na string $render, podemos salvar para o ficheiro de cache:
file_put_contents($cache, $render);
A string $render irá estar vazia se existir uma cache válida. Também irá estar vazia se a chamada à API do Twitter falhar. Nesse caso, iremos chamar o último ficheiro de cache disponível:
if ($render == '' && $cacheage > 0) {
$render = file_get_contents($cache);
}
Para completar o método Render(), devolvemos $render ao código de chamada. No entanto, temos de processar as datas primeiro:
return $this->ParseDates($render);
PROCESSAMENTO DE DATAS
Na parte II do tutorial, certamente terá reparado que as datas de criação dos tweets aparecem como “{DATE:Fri Jun 15 10:05:01 +0000 2011}”. Então o melhor será converter este formato chato para algo mais apresentável. A ideia é ter algumas palavras chave a utilizar, como “agora mesmo”, “10 minutos atrás”, “Semana passada”, etc.
Para evitar erros na amostragem das datas, temos de inserir a data/hora no ficheiro de cache e depois alterá-la quando o widget é apresentado. As datas são processadas pelo método ParseDates que é passado pelo nosso HTML na cache. Primeiro guarda a data/hora actual como $now para que possamos utilizá-lo no cálculo das datas relativas:
private function ParseDates($str) {
// current datetime
$now = new DateTime();
Uma expressão regular é usada para extrair as datas para um array $m usando preg_match_all(). Depois fazemos um loop pelas datas que coincidem e definimos $stime para um novo objecto DateTime:
preg_match_all('/{DATE:(.+)}/U', $str, $m);
for ($i = 0, $il = count($m[0]); $i < $il; $i++) {
$stime = new DateTime($m[1][$i]);
Agora uma parte interessante, para mostrarmos a data hora com “10 minutos atrás”, “Semana passada” etc, usaremos uma função chamada diff() para devolver um intervalo de data. Se um tweet foi enviado há 2minutos e 52 segundos, vamos querer que mostre que foi enviado à 3 minutos. Então o resultado será este:
if ($this->DateFormat == 'friendly') {
// friendly date format
$ival = $now->diff($stime);
$yr = $ival->y;
$mh = $ival->m + ($ival->d > 15);
if ($mh > 11) $yr = 1;
$dy = $ival->d + ($ival->h > 15);
$hr = $ival->h;
$mn = $ival->i + ($ival->s > 29);
if ($yr > 0) {
if ($yr == 1) $date = 'ano passado';
else $date = $yr . ' anos atrás';
}
else if ($mh > 0) {
if ($mh == 1) $date = 'mês passado';
else $date = $mh . ' meses atrás';
}
else if ($dy > 0) {
if ($dy == 1) $date = 'yontem';
else if ($dy <
$date = $dy . ' dias atrás';
else if ($dy < 15) $date = 'semana passada';
else $date = round($dy / 7) . ' semanas atrás';
}
else if ($hr > 0) {
$hr += ($ival->i > 29);
$date = $hr . ' hora' . ($hr == 1 ? '' : 's') . ' atrás';
}
else {
if ($mn < 3) $date = 'agora mesmo';
else $date = $mn . ' minutos atrás';
}
}
O resultado irá ser guardado na string chamada $date. Em alternativa poderá utilizar o formato date() :
else {
// standard PHP date format
$date = $stime->format($this->DateFormat);
}
Neste momento já podemos substituir a data com o novo formato e devolver a string ao método Render()
// replace date $str = str_replace($m[0][$i], $date, $str); } return $str; }
UTILIZAR A CLASSE TWITTERSTATUS
A classe TwitterStatus está completa. Pode agora ser usada em qualquer código PHP . Para tal basta incluir o código do twitterstatus.php, iniciado um objecto TwitterStatus e devolvendo o resultado do método Render():
<?php
include('twitter/twitterstatus.php');
$t = new TwitterStatus('escolacriativ', 10);
echo $t->Render();
?>
ACOMPANHOU TUDO?
Você conseguiu acompanhar tudo? se pretender ter acesso aos ficheiros que os nossos colegas do SitePoint disponibilizaram com o artigo, aceda aqui e comece a dar asas à sua imaginação, criando um widget do Twitter para o seu website à sua maneira, e de acordo com aquilo que necessita. Comente o artigo e partilhe as suas ideias com os outros leitores da Escola Criatividade!
Considere seguir a Escola Criatividade no Twitter, clique aqui!
Este tutorial foi a última parte de uma série de artigos, pelo que se tiver ideias ou sugestões, participe e deixe o seu comentário! Não deixe de ler também os outros artigos desta série:
- Aprenda a criar um widget PHP para o Twitter – Parte I
- Aprenda a criar um widget PHP para o Twitter – Parte II
- Aprenda a criar um widget PHP para o Twitter – Parte III
Abraço
























Comentários dos Alunos