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;
}