Tutorial: Como fazer feeds RSS de outros sites/Usando PHP/do cache.php

De Projeto RSSficado 2

Voltar para o artigo principal: Como fazer feeds RSS de outros sites/Usando PHP

<?php
/*
Sistema de Cache estático criado por Pedro Paulo Vezzá Campos,
inspirado em um patch sugerido por Janio Sarmento para o sistema Shopping Nerdown.
 
Atualiza o cache a cada 20 minutos, posssui a funcionalidade de purgar o cache arbitrariamente através de um parâmetro passado pela URL.
 
Licenciado sob a licença Creative Commons by-nc-sa 3.0
 
Necessita de uma diretório "cache" com permissão de escrita no mesmo local onde se localiza o script que chama a função
 
*/
 
require("curl.php");//Usado em substituição ao file() para extrair o conteúdo do site a ser feito o Feed RSS
 
//Pegue o parâmetro purge_cache da URL, caso seja necessário purgar o cache. Uso: ?action=purge_cache
$purge_cache = false;
if (isset ($_GET["action"]) && $_GET["action"] == "purge_cache"){
$purge_cache = true;
}
 
function do_cache ($url) {
	$md5 = md5($url); //Identificador único de URLs e caches
	$cachefile = "cache/{$md5}.html"; //Localização do cache
	$recache = false; //A não ser que algum dos casos dê positivo, não recacheie.
	global $purge_cache; //Varável determinada aqui acima.
 
	if (!file_exists($cachefile)) { //Novo cache? 
		$recache = true;
	}
 
	else {
		$cacheage = filemtime ($cachefile); //Qual a idade do cache?
		$now = time();// Que horas são?
 
		if ($now > ($cacheage + (60 * 20))) { //Recacheie se cache for mais velho que vinte minutos
			$recache = true;
		}
	}
 
	if ($recache || $purge_cache) { //Se algum dos casos der positivo ou se arbitrariamente mandar purgar o cache com ?purge_cache=true...
		if (file_exists($cachefile)) {// E se o cache antigo existir
			unlink ($cachefile);//Remova o antigo
		}
 
		$content = open_url($url);// Faça o download do novo conteúdo usando cURL, somente se $recache ou $purge_cache forem iguais a true
 
			if (!$content){ //Se algum erro acontecer, o cURL retornará false
			return false; //Pare a execução da função, uma vez que não há conteúdo nenhum para gravar.
			}
		$filehandle = fopen ($cachefile, "w");//Abra o arquivo de cache
		fwrite ($filehandle, $content);//Grave o conteúdo de $content
		fclose ($filehandle);//Feche o arquivo
	}
 
	$output = file_get_contents ($cachefile); //Extrai o conteúdo do cache
 
	return $output; //Retorna o conteúdo do cache
}
?>
Ferramentas pessoais