<?php
###################################################
# Clase para los soportes de exponsor. #
# Con ella podemos solicitar anuncios o enlaces #
# y presentarlos posteriormente en la web. #
# #
# MOD: cachea los enlaces una vez por dia. #
# Usar despues de la IT con la clase original #
# #
# Fichero: eXponsor.class.inc.php. #
# Empresa: IslaRed. #
# Autores: Antonio Teixeira, Victor Caballero. #
# MOD: David Pestana , Prensa del Mediterraneo SL #
# Version: 0.1 basada en la 1.6 oficial #
# Fecha: 30-ENERO 20008. #
###################################################
class eXponsor
{
var $v_anuncios; # Vector para almacenar los anuncios solicitados.
var $v_enlaces; # Vector para almacenar los enlaces solicitados.
var $pagina; # URL de la pagina que solicita los anuncios o enlaces.
var $formato; # Formato de solicitud de anuncios o enlaces XML, HTML, MARCAS.
var $modo; # Modo de petición
var $version; # Versión de la clase eXponsor.class.inc.php
var $ruta;
var $depurar;
var $cache = "MYSQL"; // ARCHIVO (en la proxima version).
// MYSQL
var $host = "localhost";
var $tabla = "exponsor_cache";
var $base = "mibase";
var $user = "mi user";
var $pass = "mi pass";
/* tabla de 3 campos para mysql
fecha - date
pagina - varchar 255
enlaces - text
*/
/**
* Constructor de la clase
* con ella inicializamos los atributos de la clase
*
* @return exponsor
*/
function eXponsor()
{
$this->v_anuncios = false;
$this->v_enlaces = false;
$this->formato = false;
$this->modo = false;
$this->version = 'MOD 0.1';
$this->ruta = false;
$this->depurar = false;
# Estos datos son obligatorios
$this->pagina = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
return;
}
function set_modo_prueba()
{
$this->modo = 'demo';
}
function set_ruta($ruta)
{
$this->ruta = $ruta ? $ruta : false;
}
function get_ruta()
{
return $this->ruta;
}
function set_depurar($valor)
{
$this->depurar = $valor;
}
/**
* Metodo encargado de realizar la solicitud de anuncios
* al motor de exponsor.
* Los parametros cod_soporte, cod_web y grupo son obligatorios
* en el caso de tratarse de un buscador, el campo criterios
* contendra las palabras de busqueda, siendo este parametro obligatorio.
* El parametro pagina es la url en la que se quiere presentar
* los enlaces.
*
* @param varchar $cod_soporte
* @param varchar $cod_web
* @param integer $pagina
* @param integer $grupo
* @param integer $inicio
* @param integer $cantidad
* @param varchar $criterios
* @param varchar $formato
* @return boolean
*/
function dame_anuncios($cod_soporte, $cod_web, $pagina=false, $grupo=1, $inicio=0,
$cantidad=0, $criterios=false, $formato='XML')
{
if(!isset($_SERVER['REMOTE_ADDR']))
{
echo "NO ES POSIBLE ESTABLECER LA IP DEL VISITANTE";
return false;
}
$pagina = (!$pagina) ? $this->pagina : $pagina;
$pagina = urlencode($pagina);
$this->formato = strtoupper($formato);
$ruta = "http://w3.exponsor.com/anuncios.php";
$ruta .= "?pagina=$pagina";
$ruta .= "&cod_web=$cod_web";
$ruta .= "&cod_soporte=$cod_soporte";
$ruta .= "&ip=".$_SERVER['REMOTE_ADDR'];
$ruta .= "&grupo=$grupo";
$ruta .= "&inicio=$inicio";
$ruta .= "&cantidad=$cantidad";
$ruta .= "&criterios=$criterios";
$ruta .= "&formato=$this->formato";
$ruta .= "&version=$this->version";
$ruta .= $this->modo ? "&modo=$this->modo" : '';
$this->set_ruta($ruta);
$func = function_exists('file_get_contents') ? 'file_get_contents' : 'file';
if(!$anuncios = @$func($ruta))
{
$this->gestor_errores(1);
return false;
}
if( is_array($enlaces) ) $enlaces = implode('',$enlaces);
switch($this->formato)
{
case 'MARCAS': $this->marcas_anuncios_formato($anuncios);
break;
case 'XML': $this->xml_anuncios_formato($anuncios);
break;
default: $this->v_anuncios = $anuncios;
break;
}
return true;
}
/**
* Metodo encargado de realizar la solicitud de enlaces
* al motor de exponsor.
* Los parametros cod_soporte y cod_web son obligatorios.
* El parametro pagina es la url en la que se quiere presentar
* los enlaces.
*
* @param varchar $cod_soporte
* @param varchar $cod_web
* @param integer $pagina
* @param integer $inicio
* @param integer $cantidad
* @param varchar $formato
* @return boolean
*/
function dame_enlaces($cod_soporte, $cod_web, $pagina=false, $inicio=0, $cantidad=0, $formato='XML')
{
if(!isset($_SERVER['REMOTE_ADDR']))
{
echo "NO ES POSIBLE ESTABLECER LA IP DEL VISITANTE";
return false;
}
$pagina = !$pagina ? $this->pagina : $pagina;
$pagina = urlencode($pagina);
$this->formato = strtoupper($formato);
$ruta = "http://w3.exponsor.com/enlaces.php?";
$ruta .= "pagina=$pagina";
$ruta .= "&cod_web=$cod_web";
$ruta .= "&cod_soporte=$cod_soporte";
$ruta .= "&ip=".$_SERVER['REMOTE_ADDR'];
$ruta .= "&inicio=$inicio";
$ruta .= "&cantidad=$cantidad";
$ruta .= "&formato=$this->formato";
$ruta .= "&version=$this->version";
$ruta .= $this->modo ? "&modo=$this->modo" : '';
$this->set_ruta($ruta);
/* SE INTERCEPTA LA LLAMADA A EXPONSOR SI RESULTA HABER CACHE DE HOY */
if(!$enlaces = $this->get_cache($pagina))
$func = function_exists('file_get_contents') ? 'file_get_contents' : 'file';
if(!$enlaces = @$func($ruta))
{
# $this->set_depurar(true);
$this->gestor_errores(1);
return false;
}
$this->set_cache($pagina,$enlaces);
}
if( is_array($enlaces) ) $enlaces = implode('',$enlaces);
switch($this->formato)
{
case 'MARCAS': $this->marcas_enlaces_formato($enlaces);
break;
case 'XML': $this->xml_enlaces_formato($enlaces);
break;
default: $this->v_enlaces = $enlaces;
break;
}
return true;
}
function set_cache($pagina,$enlaces){
if(!$con = @mysql_connect($this->host,$this->user,$this->pass)) return false;
// SQL DE LIMPIEZA PARA EVITAR LOS INCREMENTALES COMENTAR SI NO SE DESEA
$sql = "delete from $this->base.$this->tabla where pagina = '$pagina' ";
if(!$quy = mysql_query($sql,$con)) return false;
// ESTABLECIENDO LA CACHE
$sql = "insert into $this->base.$this->tabla (fecha,pagina,enlaces)values (now(),'$pagina','$enlaces')";
if(!$quy = mysql_query($sql,$con)) return false;
}
function get_cache($pagina){
$sql = "select enlaces from $this->base.$this->tabla where fecha = now() and pagina = '$pagina' ";
if(!$con = @mysql_connect($this->host,$this->user,$this->pass)) return false;
if(!$quy = mysql_query($sql,$con)) return false;
$res = mysql_fetch_row($quy);
if(!$res[0]) return false
return $res[0];
}
/**
* Metodo encargado de parsear los datos recibidos en formato XML
* por el motor de anuncios
*
* @param varchar $anuncios
*/
function xml_anuncios_formato(&$anuncios)
{
$this->v_anuncios = false;
preg_match_all("|<anuncios>(.*)</anuncios>|Usim", $anuncios, $nodos, PREG_SET_ORDER);
if($nodos && is_array($nodos))
foreach($nodos as $nodo)
{
preg_match_all("|<enlace>(.*)</enlace>|Usim", $nodo[1], $url, PREG_SET_ORDER);
$vdatos['url'] = trim($url[0][1]);
preg_match_all("|<titulo>(.*)</titulo>|Usim", $nodo[1], $titulo, PREG_SET_ORDER);
$vdatos['titulo'] = trim($titulo[0][1]);
preg_match_all("|<url_visible>(.*)</url_visible>|Usim", $nodo[1], $texto_enlace, PREG_SET_ORDER);
$vdatos['url_titulo'] = trim($texto_enlace[0][1]);
preg_match_all("|<descripcion>(.*)</descripcion>|Usim", $nodo[1], $desc, PREG_SET_ORDER);
$vdatos['descripcion'] = trim($desc[0][1]);
$this->v_anuncios[] = $vdatos;
}
return;
}
/**
* Metodo encargado de parsear los datos recibidos en formato MARCAS
* por el motor de anuncios
*
* @param varchar $anuncios
*/
function marcas_anuncios_formato(&$anuncios)
{
$this->v_anuncios = false;
$anuncios = explode("##", $anuncios);
if(is_array($anuncios))
foreach($anuncios as $vdatos)
{
$vdatos = explode("||",$vdatos);
$datos['url'] = $datos[0];
$datos['titulo'] = $datos[1];
$datos['descripcion'] = $datos[2];
$datos['url_visible'] = $datos[3];
$this->v_anuncios[] = $datos;
}
return;
}
/**
* Metodo encargado de presentar los anuncios de forma personalizada
* Cada llamada a esta funcion devolvera un unico anuncio
* La informacion esta formateada en una tabla
*
* @return varchar
*/
function pinta_anuncios_personalizado()
{
if($this->formato == 'HTML') $this->pinta_anuncios_html();
static $id_anuncio = 0;
$v_anuncios = $this->v_anuncios;
$html = ' ';
if($v_anuncios && is_array($v_anuncios) && isset($v_anuncios[$id_anuncio])):
$enlaces = $v_anuncios[$id_anuncio];
$html = " <table class=\"anuncios__\" >
<tr>
<td class=\"anuncios__titulo__\">
<a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
target='_blank'>
".ucfirst($enlaces['titulo'])."
</a>
</td>
</tr>
<tr>
<td class=\"anuncios__descripcion__\">
<a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
target='_blank'>
".ucfirst($enlaces['descripcion'])."
</a>
</td>
</tr>
<tr>
<td class=\"anuncios__url__titulo__\">
<a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
target='_blank'>
".$enlaces['url_titulo']."
</a>
<td>
</tr>
</table> ";
endif;
$id_anuncio++;
return $html;
}
/**
* Metodo encargado de presentar todos los anuncios en una
* única tabla. Los anuncios apareceran unos
* seguidos a otros de forma vertical.
*
* @return varchar
*/
function pinta_anuncios_vertical()
{
if($this->formato == 'HTML') $this->pinta_anuncios_html();
if(!$this->v_anuncios || !is_array($this->v_anuncios)) return false;
$html = '<table>';
foreach($this->v_anuncios as $enlaces)
{
$html .= " <tr><td>
<table class=\"anuncios__\" >
<tr>
<td class=\"anuncios__titulo__\">
<a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
target='_blank'>
".ucfirst($enlaces['titulo'])."
</a>
</td>
</tr>
<tr>
<td class=\"anuncios__descripcion__\">
<a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
target='_blank'>
".ucfirst($enlaces['descripcion'])."
</a>
</td>
</tr>
<tr>
<td class=\"anuncios__url__titulo__\">
<a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
target='_blank'>
".$enlaces['url_titulo']."
</a>
<td>
</tr>
</table>
</td></tr>";
}
$html .= '</table>';
return $html;
}
/**
* Metodo encargado de presentar todos los anuncios en una
* única tabla. Los anuncios apareceran unos
* seguidos a otros de forma horizontal.
*
* @return varchar
*/
function pinta_anuncios_horizontal()
{
if($this->formato == 'HTML') $this->pinta_anuncios_html();
if(!$this->v_anuncios || !is_array($this->v_anuncios)) return false;
$html = '<table><tr>';
foreach($this->v_anuncios as $enlaces)
{
$html .= " <td><table class=\"anuncios__\" >
<tr>
<td class=\"anuncios__titulo__\">
<a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
target='_blank'>
".ucfirst($enlaces['titulo'])."
</a>
</td>
</tr>
<tr>
<td class=\"anuncios__descripcion__\">
<a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
target='_blank'>
".ucfirst($enlaces['descripcion'])."
</a>
</td>
</tr>
<tr>
<td class=\"anuncios__url__titulo__\">
<a href=\"".$enlaces['url']."\" title=\"".$enlaces['titulo']."\"
target='_blank'>
".$enlaces['url_titulo']."
</a>
<td>
</tr>
</table></td> ";
}
$html .= '</td></tr></table>';
return $html;
}
function pinta_anuncios_html()
{
echo $this->v_anuncios;
return true;
}
/**
* Metodo encargado de parsear los datos recibidos en formato XML
* por el motor de enlaces
*
* @param varchar $enlaces
*/
function xml_enlaces_formato(&$enlaces)
{
$this->v_enlaces = false;
preg_match_all("|<enlaces>(.*)</enlaces>|Usim", $enlaces, $nodos, PREG_SET_ORDER);
if($nodos && is_array($nodos))
foreach($nodos as $nodo)
{
preg_match_all("|<url>(.*)</url>|Usim", $nodo[1], $url, PREG_SET_ORDER);
$vdatos['url'] = trim($url[0][1]);
preg_match_all("|<titulo>(.*)</titulo>|Usim", $nodo[1], $titulo, PREG_SET_ORDER);
$vdatos['url_titulo'] = trim($titulo[0][1]);
$this->v_enlaces[] = $vdatos;
}
return;
}
/**
* Metodo encargado de parsear los datos recibidos en formato MARCAS
* por el motor de enlaces
*
* @param varchar $enlaces
*/
function marcas_enlaces_formato(&$enlaces)
{
$this->v_enlaces = false;
$enlaces = explode("##", $enlaces);
if(is_array($enlaces))
foreach($enlaces as $vdatos)
{
$vdatos = explode("||",$vdatos);
$datos['url'] = $datos[0];
$datos['titulo'] = $datos[1];
$this->v_enlaces[] = $datos;
}
return;
}
/**
* Metodo encargado de presentar los enlaces de forma personalizada
* Cada llamada a esta funcion devolvera un unico enlace
* La informacion esta formateada en una tabla
*
* @return varchar
*/
function pinta_enlaces_personalizado()
{
if($this->formato == 'HTML') $this->pinta_enlaces_html();
static $id_enlace = 0;
$html = ' ';
if($this->v_enlaces && is_array($this->v_enlaces) && isset($this->v_enlaces[$id_enlace]))
{
$enlaces = $this->v_enlaces[$id_enlace];
$html = " <table class=\"enlaces__\" >
<tr>
<td class=\"enlaces__titulo__\">
<a href=\"".$enlaces['url']."\" title=\"".$enlaces['url_titulo']."\"
target='_blank'>
".ucfirst($enlaces['url_titulo'])."
</a>
</td>
</tr>
</table> ";
$id_enlace++;
}
return $html;
}
/**
* Metodo encargado de presentar todos los enlaces en una
* única tabla. Los enlaces apareceran unos
* seguidos a otros de forma vertical.
*
* @return varchar
*/
function pinta_enlaces_vertical()
{
if($this->formato == 'HTML') $this->pinta_enlaces_html();
if(!$this->v_enlaces || !is_array($this->v_enlaces))
{
$this->gestor_errores(2);
return false;
}
$html = "<table class=\"enlaces__\">";
foreach($this->v_enlaces as $enlaces)
{
$html .= " <tr>
<td class=\"enlaces__titulo__\">
<a href=\"".$enlaces['url']."\" title=\"".$enlaces['url_titulo']."\"
target='_blank'>
".ucfirst($enlaces['url_titulo'])."
</a>
</td>
</tr> ";
}
$html .= "</table>";
return $html;
}
/**
* Metodo encargado de presentar todos los enlaces en una
* única tabla. Los enlaces apareceran unos
* seguidos a otros de forma horizontal.
*
* @return varchar
*/
function pinta_enlaces_horizontal()
{
if($this->formato == 'HTML') $this->pinta_enlaces_html();
if(!$this->v_enlaces || !is_array($this->v_enlaces))
{
$this->gestor_errores(2);
return false;
}
$html = "<table class=\"enlaces__\"><tr>";
foreach($this->v_enlaces as $enlaces)
{
$html .= " <td class=\"enlaces__titulo__\">
<a href=\"".$enlaces['url']."\" title=\"".$enlaces['url_titulo']."\"
target='_blank'>
".ucfirst($enlaces['url_titulo'])."
</a>
</td> ";
}
$html .= "</tr></table>";
return $html;
}
function pinta_enlaces_html()
{
echo $this->v_enlaces;
return true;
}
function gestor_errores($error)
{
if( !$error ) return false;
$salida = false;
switch( $error )
{
case 1: $salida = "Error en file_get_contents"; break;
case 2: $salida = "Error vector enlaces vacÃo"; break;
}
if( $this->depurar && $salida )
{
echo "<!--".$salida."-->";
echo "<!--".$this->get_ruta()."-->";
}
return true;
}
}
?>