public function indexAction(Request $request) { $user = $this->getUser(); if ($user == null) { return $this->redirect($this->generateUrl('fos_user_security_login')); } $em = $this->getDoctrine()->getManager(); $firstArray = array(); $firstArray['usuariosRegistrados'] = $em->getRepository('ProjectUserBundle:User')->getAllLength(); /*$firstArray['backgrounds'] = $em->getRepository('ProjectUserBundle:Background') ->getAllLength(); $firstArray['pages'] = $em->getRepository('ProjectUserBundle:Page') ->getAllLength(); $firstArray['terminosBuscados'] = $em->getRepository('ProjectUserBundle:Search') ->getAllLength(); $firstArray['terminos'] = $em->getRepository('ProjectUserBundle:Search') ->getDistinctRankingAll(); for ($i=0; $i < count($firstArray['terminos']); $i++) { $firstArray['terminos'][$i]['color'] = DefaultController::randColor($this); } */ $url = $this->generateUrl('project_back_homepage'); $locale = UtilitiesAPI::getLocale($this); $form = null; $filtros = null; $dql = "SELECT o FROM ProjectUserBundle:User o "; $query = $em->createQuery($dql); $paginator = $this->get('knp_paginator'); $pagination = $paginator->paginate($query, $this->getRequest()->query->get('page', 1), 30); $secondArray = array('pagination' => $pagination, 'filtros' => $filtros, 'url' => $url); $array = array_merge($firstArray, $secondArray); return $this->render('ProjectBackBundle:Default:index.html.twig', $array); }
public static function procesar($array, Request $request, $class) { $data = $array['data']; $em = $class->getDoctrine()->getManager(); $user = $class->getUser(); $form = $class->createForm(self::NOMBRE_RUTA, $data); $form->handleRequest($request); if ($form->isValid()) { // Procesa accion en base de datos $data->setUser($user); $em->persist($data); $em->flush(); $manager = $data->getAcceso()->getNombre(); $customerEm = $class->get('doctrine')->getManager($manager); $entity = $data; $arreglo = array('post_author' => 1, 'post_date' => $entity->getUpdated()->format('Y-m-d H:i:s'), 'post_date_gmt' => $entity->getUpdated()->format('Y-m-d H:i:s'), 'post_content' => $entity->getDescripcion(), 'post_title' => $entity->getNombre(), 'post_excerpt' => '', 'post_status' => 'publish', 'comment_status' => 'open', 'ping_status' => 'open', 'post_password' => '', 'post_name' => 'item-' . UtilitiesAPI::getFriendlyName($entity->getNombre(), $class), 'to_ping' => '', 'pinged' => '', 'post_modified' => $entity->getUpdated()->format('Y-m-d H:i:s'), 'post_modified_gmt' => $entity->getUpdated()->format('Y-m-d H:i:s'), 'post_content_filtered' => '', 'post_parent' => 0, 'guid' => 'http://milcasinos.com/item-' . UtilitiesAPI::getFriendlyName($entity->getNombre(), $class), 'menu_order' => 0, 'post_type' => 'post', 'post_mime_type' => '', 'comment_count' => 0); if ($entity->getFechaPublicacion() != null) { $arreglo['post_date'] = $entity->getFechaPublicacion()->format('Y-m-d H:i:s'); $arreglo['post_date_gmt'] = $entity->getFechaPublicacion()->format('Y-m-d H:i:s'); $arreglo['post_modified'] = $entity->getFechaPublicacion()->format('Y-m-d H:i:s'); $arreglo['post_modified_gmt'] = $entity->getFechaPublicacion()->format('Y-m-d H:i:s'); $arreglo['post_status'] = 'future'; } $stmt = $customerEm->getConnection()->insert('wp_posts', $arreglo); return $class->redirect($class->generateUrl('project_back_parser_' . self::NOMBRE_RUTA . '_list')); } $dql = "SELECT o FROM ProjectUserBundle:Imagen o "; $query = $em->createQuery($dql); $paginator = $class->get('knp_paginator'); $page = $class->getRequest()->query->get('page', 1); //La página de los comentarios, si no hay petición(es null) por defecto es 1 $pagination = $paginator->paginate($query, $page, 30); //Los comentarios de la página (10 por página) if ($class->getRequest()->query->get('page') != null) { $arreglo = array('pagination' => $pagination); return $class->render('ProjectBackBundle:Helpers:modal-imagenes-listado.html.twig', $arreglo); } //$pagination = $paginator -> paginate($query, $class -> getRequest() -> query -> get('page', 1), 30); $array['pagination'] = $pagination; $array['form'] = $form->createView(); $array['nombreClase'] = self::NOMBRE_CLASE; $array['nombreRuta'] = self::NOMBRE_RUTA; return $class->render('ProjectBackBundle:' . self::NOMBRE_CLASE . ':new-edit.html.twig', $array); }
public static function yogonetLatinoamericaAction($em, $rutaImagenes, $array, $fuente, $class) { //$em = $class -> getDoctrine() -> getManager(); //Ruta del listado de noticias de la web a analizar $url = 'http://www.yogonet.com/latinoamerica/'; //Con la funcion file_get_contents se obtiene todo el html que devuelve la web señalada set_time_limit(0); $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) //Noticias Principales en <div class="panel-col-top panel-panel"> $str = 'panel-col-top panel-panel'; $arr = explode($str, $htm); $arr = explode('panel-col-bottom panel-panel', $arr[1]); $contenido = $arr[0]; //var_dump($contenido);exit; //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("\"/latinoamerica/", $contenido); //Se hace un explode para obtener todos los codigos html que comiencen justo despues de http://www.apuestas-deportivas.es/pronostico/ $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); //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 $idNoticias[$i - 1] = $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://www.yogonet.com/latinoamerica/" . $value; $html = file_get_contents($urlNoticia); $busqueda = 'buildmode-full'; $html = explode($busqueda, $html); $html = explode('field-field-fuente', $html[1]); $html = $html[0]; //Titulo $busquedaTituloInicio = 'field-title-noticia-importada">'; $busquedaTituloFin = '<div id="plugins-sociales">'; $parteTitulo = explode($busquedaTituloInicio, $html); $parteTitulo = explode($busquedaTituloFin, $parteTitulo[1]); $titulo = $parteTitulo[0]; $busquedaTituloInicio = 'field-item">'; $busquedaTituloFin = '</div>'; $parteTitulo = explode($busquedaTituloInicio, $titulo); $parteTitulo = explode($busquedaTituloFin, $parteTitulo[1]); $titulo = $parteTitulo[0]; $elemento = $em->getRepository('ProjectUserBundle:Noticia')->findByNombre($titulo); if ($elemento) { break; } //echo'<br>'.$titulo; $busquedaInicio = 'http://www.yogonet.comlatinoamerica/sites/default/files/noticias/imagenes/'; $busquedaFin = '?'; $elemento = explode($busquedaInicio, $html); $imagen = null; if (count($elemento) > 1) { $elemento = explode($busquedaFin, $elemento[1]); $imagen = $elemento[0]; $imagen = $busquedaInicio . $imagen; $urlImagen = $imagen; $extension = explode(".", $urlImagen); $extension = $extension[count($extension) - 1]; $path = $rutaImagenes; //$path = 'C:/wamp/www/parseoYogonet/uploads'; $nombreImagen = sha1($urlImagen); ini_set('max_execution_time', 300); $ch = curl_init($urlImagen); $fp = fopen(sprintf('%s/%s.%s', $path, $nombreImagen, $extension), 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); fclose($fp); $nombreLimpio = UtilitiesAPI::limpiaNombre($titulo, $class); $imagen = new Imagen(); $imagen->setNombre($nombreLimpio); $imagen->setTags(UtilitiesAPI::convierteATags($nombreLimpio, $class)); $imagen->setPath($nombreImagen . '.' . $extension); //$imagen -> setIp($class -> container -> get('request') -> getClientIp()); $em->persist($imagen); $em->flush(); $array['contadorImagenes']++; } $busquedaInicio = 'sumario-noticia-importada">'; $busquedaFin = '<div class="field field-type-text field-field-fuente-noticia-importada">'; $busqueda = explode($busquedaInicio, $html); $busqueda = explode($busquedaFin, '<div>' . $busqueda[1]); $texto = $busqueda[0]; $usuario = $em->getRepository('ProjectUserBundle:User')->find(1); $object = new Noticia(); $object->setFuente($fuente); $object->setUser($usuario); $object->setNombre($titulo); if ($imagen != null) { $object->setImagen($imagen); } $object->setDescripcion($texto); $em->persist($object); $em->flush(); $array['contadorNoticias']++; } return $array; }