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:

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 &lt; $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 < 8) $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:

Abraço

 

Autor: Diogo Espinha

Blog do Autor | Artigos do Autor:

Workaholic e totalmente viciado em computadores, Internet e desporto motorizado. Adora praticar desporto, é um curioso da programação em PHP, CSS e HTML5 e não dispensa a companhia do seu Mac OSX 86 Snow Leopard!

  • Explorer - Factory Construction & Ship Building Joomla Theme
  • Justice - Attorney and Law Firm Joomla Template
  • OwnFolio - One Page Personal Portfolio / vCard / Resume / Showcase Joomla Template
  • Big Business - Responsive Template
  • Merab - Creative Multipurpose Drupal 8 Theme
  • Fitness Academy Joomla Template
  • Fruition - Business Joomla Template
  • Educate | Education & Courses, Kindergartens Joomla Template
  • Constructive - Contractors Multipurpose Joomla Landing Page Theme
  • Vina Bubox - VirtueMart Joomla Template for Online Stores
  • BizOne - One Page Parallax Drupal Theme
  • LawHouse - Responsive Lawyers Attorneys Joomla Template

Gostou deste artigo? Então torne-se fã do Blog no Facebook!



Comentários dos Alunos

RSS
Twitter
Facebook
Comentários
ASSINANTES
SEGUIDORES
FÃS
COMENTÁRIOS
7794

Subscrever Newsletter
Subscreva a Newsletter:



Aplicativos Android, iPhone e Muito Mais!




Assine a Escola Criatividade Assine a Newsletter da Escola Criatividade Escola Criatividade no Twitter Escola Criatividade no Facebook Escola Criatividade no Youtube Escola Criatividade no Google Buzz