register(new DerAlex\Silex\YamlConfigServiceProvider(__DIR__ . '/settings.yml')); $app['debug'] = $app['config']['debug']; // lector de datos JSON $app['dataLoader'] = function () { return new dataLoader(); }; /* Importando listado completo canciones */ $dataChamps = 'data/twittsfinal.json'; $app['dataLoader']->getData($dataChamps, 'champs', $app, 'json'); // -> nos genera $app['dataLoader.songs'] /* Importando listado completo canciones */ $dataChamps = 'data/dataflowics.json'; $app['dataLoader']->getData($dataChamps, 'feed', $app, 'json', true); // -> nos genera $app['dataLoader.songs'] // postproceso $app['dataLoader.champs'] = dataChampsProcess($app['dataLoader.champs']); //$app['dataLoader.feed'] = dataChampsFeedProcess($app['dataLoader.feed']); //TWIG $app->register(new Silex\Provider\TwigServiceProvider(), array( 'twig.path' => __DIR__.'/twigs', )); $app['twig'] = $app->share($app->extend('twig', function ($twig, $app) { /* sample Twig filter $twig->addExtension(new Services\twigYearsToUrl($app));*/ return $twig; })); putenv('LC_ALL=es_ES'); $app->register(new MarkdownServiceProvider()); $app['routes'] = $app->extend('routes', function (RouteCollection $routes, $app) { $loader = new YamlRouting(new FileLocator(__DIR__ . '/')); $collection = $loader->load('routes.yml'); $routes->addCollection($collection); return $routes; }); $app->error(function (\Exception $e, $code) use($app) { if(!$app['debug']) { return new Response($app['twig']->render('error.html.twig'), $code); } }); $app->register(new Silex\Provider\UrlGeneratorServiceProvider()); $app->run(); function dataChampsProcess($data){ // palabras prohibidas separadsas por comas $blackList = 'streaming, Echenique, Somoano, manipulación, live, maricón, mono, puta, hijoputa, hijo de puta, irina, carbonero, traidor, mierda, webcam, sex, sexo, tetas, culo, imbécil, idiota, retrasado, subnormal, puto, digital +, gilipollas, gitano, macaco, negrata, cabrón, hitler, fascista, facha, Franco, paquete, matao, payaso, frente, ultra, ultrasur, muerto, muerte, matao, fantasma, chulo'; $userBlackList = 'ichsara'; // borrando palabras de la black list $blackListArray = explode(',', $blackList); $userblackListArray = explode(',', $userBlackList); $outp = array('twtsMad' => array(), 'twitsAtl' => array()); foreach ($data->twitsMad as $key => $tweet) { $valid = true; foreach ($blackListArray as $word) { if(strpos(strtolower($tweet->text), trim(strtolower($word)))) $valid = false; } foreach ($userblackListArray as $word) { if(strpos(strtolower($tweet->screen_name), trim(strtolower($word)))) $valid = false; } if($valid) { $tweet->text = processTweetText($tweet->text); array_push($outp['twtsMad'], $tweet); } } foreach ($data->twitsAtl as $key => $tweet) { $valid = true; foreach ($blackListArray as $word) { if(strpos(strtolower($tweet->text), trim(strtolower($word)))) $valid = false; } foreach ($userblackListArray as $word) { if(strpos(strtolower($tweet->screen_name), trim(strtolower($word)))) $valid = false; } if($valid) { $tweet->text = processTweetText($tweet->text); array_push($outp['twitsAtl'], $tweet); } } shuffle($outp['twitsAtl']); shuffle($outp['twtsMad']); return $outp; } function dataChampsFeedProcess($data){ // configuracion del gráfico // fechas límite del stream $initStream = '05170000'; $endStream = '05250000'; // minutos entre puntos de la gràfica $minutosXPunto = 20; $totalWidth = 1000 / 2; $altoGraph = 90; $outp = array( 'totalmad' => 0, 'totalatl' => 0, 'graph' => '' ); $partialAtl = 0; $partialMad = 0; $maxMad = 0; $maxAtl = 0; $count = array(); $totalPoints = 0; // los minutos que son procesados // recorre los datos y genera los definitivos foreach ($data as $wrap) { foreach ($wrap as $date => $value) { if(intval($date) > intval($initStream) && intval($date) < intval($endStream)) { $partialAtl += $value->tweetsAtl; $partialMad += $value->tweetsMad; if((intval($date) - intval($initStream)) % $minutosXPunto == 0 && intval($date) != intval($initStream)) { $count[$date] = array( 'atl' => $partialAtl, 'mad' => $partialMad ); if($partialAtl > $maxAtl) $maxAtl = $partialAtl; if($partialMad > $maxMad) $maxMad = $partialMad; $partialAtl = 0; $partialMad = 0; $totalPoints ++; } if(isset($value->tweetsMad)) $outp['totalmad'] += $value->tweetsMad; if(isset($value->tweetsAtl)) $outp['totalatl'] += $value->tweetsAtl; } } } if($totalPoints == 0) return $outp; $initDate = processDate(intval($initStream,10)); $endDate = processDate(intval($endStream,10)); $restaDate = date_diff($initDate, $endDate); $totalPoints = $restaDate->days * 24 * 60 / $minutosXPunto; // precálculos dela gráfica $elmsWidth = $totalWidth / $totalPoints; // el ancho entre cada punto $anchoDay = $elmsWidth *24 * 60 / $minutosXPunto; // con todos los datos, genera el string del svg $strMad = ''; $strAtl = ''; $contador = 0; foreach ($count as $key => $value) { if($contador == 0) { $strMad = 'M0 '.($altoGraph * $value['mad'] / $maxMad); $strAtl = 'M'.$totalWidth.' '.($altoGraph * $value['atl'] / $maxAtl); } else { $strMad .= 'L'.($contador * $elmsWidth).' '.($altoGraph + (-1 * $altoGraph * $value['mad'] / $maxMad)); $strAtl .= 'L'.($totalWidth - ($contador * $elmsWidth)).' '.($altoGraph + (-1 * $altoGraph * $value['atl'] / $maxAtl)); } $contador ++; } $outp['graph']['width'] = $totalWidth; $outp['graph']['height'] = $altoGraph; $outp['graph']['mad'] = $strMad; $outp['graph']['atl'] = $strAtl; $outp['graph']['anchoDay'] = $anchoDay; $outp['graph']['totalDays'] = $restaDate->days; $outp['graph']['initDate'] = $initDate; return $outp; } function processDate($date) { $mins = $date%100; $hours = (($date-$mins)%10000)/100; $days = (($date-$mins-($hours*100))%1000000)/10000; $month = (($date-$mins-($hours*100)-($days*10000))%100000000)/1000000; return date_create('2014-'.$month.'-'.$days.' '.$hours.':'.$mins); } //http://saturnboy.com/2010/02/parsing-twitter-with-regexp/ function processTweetText($text) { $text = preg_replace( '@(https?://([-\w\.]+)+(/([\w/_\.]*(\?\S+)?(#\S+)?)?)?)@', '$1', $text); $text = preg_replace( '/@(\w+)/', '@$1', $text); $text = preg_replace( '/\s+#(\w+)/', ' #$1', $text); return $text; }