public function postPersist(LifecycleEventArgs $args) { $entity = $args->getEntity(); $em = $args->getEntityManager(); $templating = $this->container->get('templating'); $mailer = $this->container->get('mailer'); if ($entity instanceof Paysafecard) { $message = \Swift_Message::newInstance()->setSubject('Petición paysafecard desde todoapuestas')->setFrom('*****@*****.**')->setTo($entity->getEmail())->setContentType("text/html")->setBody($templating->render('ProjectFrontBundle:Paysafecard:registro-usuario.html.twig', array('object' => $entity))); $mailer->send($message); if (!is_null($entity->getEmailUsuario())) { $message = \Swift_Message::newInstance()->setSubject('Petición paysafecard desde todoapuestas')->setFrom('*****@*****.**')->setTo($entity->getEmailUsuario())->setContentType("text/html")->setBody($templating->render('ProjectFrontBundle:Paysafecard:registro-referido.html.twig', array('object' => $entity))); $mailer->send($message); } $message = \Swift_Message::newInstance()->setSubject('Petición paysafecard desde todoapuestas')->setFrom($entity->getEmailUsuario())->setTo('*****@*****.**')->setContentType("text/html")->setBody($templating->render('ProjectFrontBundle:Paysafecard:registro-administrador.html.twig', array('object' => $entity))); $mailer->send($message); } else { if ($entity instanceof Paysafecardbookies) { $message = \Swift_Message::newInstance()->setSubject('Registro en casas de apuestas')->setFrom('*****@*****.**')->setTo($entity->getEmail())->setContentType("text/html")->setBody($templating->render('ProjectFrontBundle:Paysafecardbookies:registro-usuario.html.twig', array('object' => $entity))); $mailer->send($message); $message = \Swift_Message::newInstance()->setSubject('Registro en casas de apuestas')->setFrom($entity->getEmail())->setTo('*****@*****.**')->setContentType("text/html")->setBody($templating->render('ProjectFrontBundle:Paysafecardbookies:registro-administrador.html.twig', array('object' => $entity))); $mailer->send($message); } else { if ($entity instanceof Fuente) { if ($entity->getRss() != null) { $data = simplexml_load_string(file_get_contents()); foreach ($data->channel->item as $noticia) { $articulo = $em->getRepository('ProjectUserBundle:Noticia')->findByNombre($noticia->title); if (!$articulo) { $object = new Noticia(); $object->setNombre($noticia->title); $object->setDescripcion($noticia->description); $em->persist($object); $em->flush(); } } } } } } }
public static function jocPrivatAction($em, $rutaImagenes, $array, $class) { //$em = $class -> getDoctrine() -> getManager(); //Ruta del listado de noticias de la web a analizar $url = 'http://noticias.jocprivat.com/'; //Con la funcion file_get_contents se obtiene todo el html que devuelve la web señalada $htm = file_get_contents($url); //Luego de estudiar el codigo fuente de la web, se descubre que todos los elementos de interes //Se encuentran dentro del div LATERAL_IZQUIERDO_DETALLE, por ende se hace un explode para poder //Obtener los argumentos que esten antes o despues (adentro del div) $str = 'blog-posts hfeed'; $arr = explode($str, $htm); $arr = explode('blog-pager', $arr[1]); $contenido = $arr[0]; //Una vez adentro del div de nuestro interes, se observa que todos los enlaces que se necesitan //Comienzan por detalle_noticia.php?id= $enlaces = explode("http://noticias.jocprivat.com/2014", $contenido); /* Elly aqui note que tu pagina tiene una caracteristica especial se insertan enlaces que no nos interesan ejemplo http://www.sectorgambling.com/category/internacional/ y http://www.sectorgambling.com/author/1stwriter/ Los enlaces de los articulos siempre comienzan por fecha asi que le coloque 2014 */ //Se hace un explode para obtener todos los codigos html que comiencen justo despues de detalle_noticia.php?id= $idNoticias = array(); //Se realiza un ciclo for para obtener todos los ids de las noticias for ($i = 1; $i < count($enlaces); $i++) { $cadena = $enlaces[$i]; //En estas cadenas resultados del ultimo explode hay mas contenido del que nos interesa //Un ejemplo de un link es detalle_noticia.php?id=83851" por ende se sabe que el codigo del id //termina justo antes de la comilla " para esto se usa strpos para ubicar la posicion y luego extraer el id $posicionFinal = strpos($cadena, "'"); $id = substr($cadena, 0, $posicionFinal); if (strpos($id, '#') == false) { $idNoticias[$i - 1] = $id; } //Se comienca en $i-1 porque el primer link que devuelve esta web siempre es vacio y se requieren //son los numeros de los id } /* Para el listado de noticias de sector del juego por cada cuadricula hay 3 enlaces, uno en el texto, otro en la imagen y otro en el titulo, por ende despues de buscar los links apareceran duplicados, para evitar este problema se usa la funcion array_unique que elimina los duplicados, pero conserva las antiguas claves, por esto se debe usar foreach y no un for normal */ $idNoticias = array_unique($idNoticias); /* Se procede a recorrer cada uno de los enlaces para extraer la data y almacenarla en la base de datos Se busca recorrer el listado de urls que se genero ejemplo: http://sectordeljuego.com/detalle_noticia.php?id=83851 http://sectordeljuego.com/detalle_noticia.php?id=83850 http://sectordeljuego.com/detalle_noticia.php?id=83849 . . . Y asi sucesivamente, se ira recorriendo y obteniendo los textos y descargando una imagen por cada articulo */ foreach ($idNoticias as $key => $value) { ini_set('max_execution_time', 300); // Tener en cuenta que no es igual la ruta lista_noticias a detalle_noticia $urlNoticia = "http://noticias.jocprivat.com/2014" . $value; /*A partir de este punto, hay que analizar de nuevo la estructura del codigo De una noticia en particular, en el caso de noticias hay que extraer 3 elementos siempre Titulo, imagen (descargarla, si hay varias solo la principal) y contenido Luego de analizar la data se observa que este caso sencillo, toda la data de interes se encuentra en el div <div id="NOTICIA_DETALLE"> */ //Con la funcion file_get_contents se obtiene todo el html que devuelve la web señalada $html = file_get_contents($urlNoticia); $busqueda = "BlogPosting'>"; $html = explode($busqueda, $html); $html = $html[1]; $html = explode('post-footer', $html); $html = $html[0]; //$str = '<div id="left-area">'; //$arr = explode($str, $html); //Se comienza a extraer los datos de interes, se comienza con el TITULO, el cual se almacena en //<div id="TITULAR_DETALLE"> $busqueda = "name'>"; $titulo = explode($busqueda, $html); $titulo = explode('</h3>', $titulo[1]); $titulo = $titulo[0]; $titulo = trim($titulo); //REVISAR SI EXISTE ESTE ELEMENTO ROMPER EL CICLO PARA NO GUARDAR NOTICIAS REPETIDAS $elemento = $em->getRepository('ProjectUserBundle:Noticia')->findByNombre($titulo); if ($elemento) { break; } //Se procede a buscar el contenido el cual se encuentra en <div class="CUERPO_DETALLE"> $busqueda = "articleBody'>"; $contenido = explode($busqueda, $html); $contenido = explode('<div', $contenido[1]); $contenido = $contenido[0]; $contenido = trim($contenido); //Se obtienen los datos basicos relacionados con la noticia $usuario = $em->getRepository('ProjectUserBundle:User')->find(1); $fuente = $em->getRepository('ProjectUserBundle:Fuente')->find(12); //Se almacena la noticia $object = new Noticia(); $object->setFuente($fuente); $object->setUser($usuario); $object->setNombre($titulo); //$object -> setImagen($imagen); $object->setDescripcion($contenido); $em->persist($object); $em->flush(); $array['contadorNoticias']++; } // $array = array('contadorImagenes' => $contadorImagenes, 'contadorPronosticos' => $contadorPronosticos, 'contadorNoticias' => $contadorNoticias); return $array; }