Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: 5378453 en 18 de Agosto 2015, 02:26
-
Estoy haciendo un programa para hacer web scrapping para obtener el texto que aparece en cierta pagina, ya pude obtener el texto y acomodarlo conforme a su seccion y publicacion, el problema es como decirle que cierta publicacion pertenece a cierta seccion
En la imagen los que estan encerrados en amarillo representan las secciones y los de verde son las publicaciones, ya estan ordenadas, pero quiero saber como hacerle para decirle que esas publicaciones pertenecen a cierta seccion
(https://lh3.googleusercontent.com/-AKoQ2PcDGjE/VdJ7Dou7_3I/AAAAAAAAAf0/z_Kl53XC-ZM/s912-Ic42/titulos%252520y%252520secciones.png)
Aqui esta el codigo
<?php
$html = file_get_contents("http://dof.gob.mx/index.php?year=2015&month=07&day=27");
file_put_contents('dof.html',$html);
$xml = new DomDocument();
@$xml->loadHTML($html);
$xml->normalizeDocument();
$xpath = new DOMXPath($xml);
/////////////////SECCIONES/////////////////////////
$titulos = $xpath->query('//td[@class="subtitle_azul"]');
$tituloSecciones= new ArrayObject();
$codigoSecciones = new ArrayObject();
foreach($titulos as $item){
// print_r($item);
$tituloSecciones -> append(trim($item->textContent));
foreach(($item->getElementsByTagName("a")) as $new){
$atributo = $new->getAttribute("href");
// print_r($atributo);
$arr = explode("=", $atributo);
$codigoSecciones -> append($arr[1]);
// echo $arr[1];
}
}
$final = new ArrayObject();
for($i = 0;$i < count($tituloSecciones); $i ++){
$final -> append(array($codigoSecciones[$i] => $tituloSecciones[$i]));
}
// var_dump($titulo);
////////////////PUBLICACIONES/////////////////
$titulo = array();
$tituloPublicaciones= new ArrayObject();
$codigoPublicaciones= new ArrayObject();
$enlaces = $xpath -> query('//a[@class="enlaces"]');
// print_r($enlaces);
foreach($enlaces as $item){
$test = $item -> getAttribute("href");
$test2= str_replace('&' , '=',$test);
$explo = explode("=", $test2);
@$codigoPublicaciones -> append($explo[1]);
$tituloPublicaciones -> append(trim($item -> textContent));
}
//////////////////// CICLO PARA ORDENAR //////////////////////////
$maximo = count($codigoSecciones) - 1;
for($a = 0; $a < count($codigoSecciones) ; $a++){
for($b = 0; $b < count($codigoPublicaciones) - 1; $b++){
if($a == $maximo){
if($codigoPublicaciones[$b] > $codigoSecciones[$maximo]){
$final[$a][] = array($tituloPublicaciones[$b]);
}
}
else{
if($codigoPublicaciones[$b] > $codigoSecciones[$a] and $codigoPublicaciones[$b] < $codigoSecciones[$a + 1]){
$final[$a][] = array($tituloPublicaciones[$b]);
}
}
}
}
// $final[0][] = array($tituloPublicaciones[0]); /* asi da */
// var_dump($final[0][$codigoPublicaciones[0]]);
var_dump($final);
////////////////////// CICLO PARA ORDENAR LAS PUBLICACIONES EN SU SECCION //////////////////////////////////////////
?>
-
Hola, por lo que he entendido tienes datos y quieres establecer relaciones entre ellos, en este caso de pertenencia. Eso se puede hacer de diferentes maneras:
CON BASE DE DATOS
- Creas una base de datos con una tabla denominada secciones con clave primaria id_secciones
- En otra tabla denominada secciones_publicaciones estableces como clave primaria id_secciones_publicaciones y como clave foránea id_secciones. Cada fila representará una publicación indicando cuál es su sección asociada.
CON PROGRAMACIÓN ORIENTADA A OBJETOS
Creas una clase denominada Sección que tenga como atributo lo que sea necesario y una lista o array de publicaciones. Necesitarás un método para añadir publicaciones.
Creas otra clase denominada Publicación con los atributos que deba llevar una publicación.
A partir de aquí puedes crear los objetos Seccion que te sean necesario, y cada objeto llevar asociados las publicaciones que sean necesarias.
Ejemplo de una clase php:
// clase base con propiedades y métodos miembro
class Verdura {
var $comestible;
var $color;
function Verdura($comestible, $color="verde")
{
$this->comestible = $comestible;
$this->color = $color;
}
function es_comestible()
{
return $this->comestible;
}
function qué_color()
{
return $this->color;
}
} // fin de la clase Verdura
CON ARRAYS
No te lo recomiendo porque es menos limpio y puede generar problemas, pero podrías crear un array:
$seccionesConPublicaciones = array(
array('seccion' => '1001', 'publicaciones' => '606,607,608'),
array('seccion' => '1002', 'publicaciones' => '121,333,555,999'),
.
.
);
Aquí $seccionesConPublicaciones[0] ['seccion'] = '1001'
$seccionesConPublicaciones[0] ['publicaciones'] = '606,607,608'
La lista de publicaciones sería una cadena de texto que podrías dividir y extraer usando un explode sobre la cadena usando como caracter separador la coma.
OTRAS FORMAS
Hay más formas de crear asociaciones de datos
Salu2
-
Gracias por tu ayuda, orita intentare hacerlo para ver si me queda