示例#1
0
function find_cinemas_brazil()
{
    $start = microtime(true);
    $cinemas_br = Env::path('temp/brasil.json');
    $cinemas_br = file_get_contents($cinemas_br);
    $cinemas_br = json_decode($cinemas_br);
    //loop em todos os estados e cidades do estado
    $new_cinemas = array();
    $invalid_cinemas = array();
    foreach ($cinemas_br as $value) {
        $estado = $value->nome;
        $uf = $value->codigo;
        $cidades = $value->cidades;
        $cinema_finder = new CinemaFinder('br', $uf, $cidades);
        $cinemas = $cinema_finder->get_all_cinemas();
        $template = new CinemaTemplate();
        foreach ($cinemas as $cinema) {
            $base_dir = "cinema/br/";
            //passa o codigo do estado temporariamente para depois alterar e verificar se o cinema é realmente desse local
            $cinema->state_code = $uf;
            $template->create($base_dir, $cinema);
        }
        $new_cinemas = array_merge($new_cinemas, $template->get_new_cinemas());
        $invalid_cinemas = array_merge($invalid_cinemas, $template->get_invalid_cinemas());
    }
    $total = Helper::elapsed_time($start);
    Log::write("Tempo total procurando cinemas: {$total}");
    Sendmail::to_admin(count($new_cinemas) . " cinemas novos", $new_cinemas);
    Sendmail::to_admin(count($invalid_cinemas) . " cinemas sem cidade", $invalid_cinemas);
}
示例#2
0
function update_showtimes()
{
    $start = microtime(true);
    $path = Env::path() . 'cinema/br';
    $cinemas = Helper::get_file_list($path);
    $updated = array();
    $invalid = array();
    $erros = array();
    foreach ($cinemas as $value) {
        $classname = basename($value, '.php');
        try {
            if (class_exists($classname)) {
                $cinema_class = new $classname();
                $cinema = $cinema_class->update();
                if (!empty($cinema)) {
                    $updated[] = $cinema;
                    if ($cinema->status == 'INVALID') {
                        $invalid[] = $cinema;
                    }
                }
            }
        } catch (Exception $e) {
            $erros[] = $classname . ' - ' . $e->getMessage();
        }
    }
    if (count($updated) > 0) {
        callback_subscribers($updated);
        Sendmail::to_admin(count($updated) . " cinemas atualizados", $updated);
    }
    Sendmail::to_admin(count($invalid) . " cinemas invalidos", $invalid);
    Sendmail::to_admin(count($erros) . " erros atualizando cinemas", $erros);
    $total = Helper::elapsed_time($start);
    Log::write("Tempo total atualizando cinemas: {$total}");
}
示例#3
0
 function xtest_get_file_list()
 {
     $path = Env::path() . 'cinema/br';
     $files = Helper::get_file_list($path);
     echo "<pre>";
     print_r($files);
     echo "</pre>";
 }
示例#4
0
 public function test_find()
 {
     // $cinema_finder = new CinemaFinder('br','SP', array('Bauru'));
     // $cinemas =  $cinema_finder->get_all_cinemas();
     $dir = Env::path("cinema/br/");
     echo $dir;
     if (Helper::recursive_file_exists('cine_araujo_bauru.php', $dir)) {
         echo "existe";
     }
     // echo "<pre>";
     // print_r($cinemas);
     // echo "</pre>";
     //1. gera cinemas por todo o brasil com fallback para o google
     //
     //pega o json das cidades e faz loop em todas as cidades
     //no resultado de cada find cria a estrutura de diretorios se NÃO existir
     //para cada cinema gerar um class que é o fallback para o google movies...
     //cada classe de cinema tem q se registrar no couchdb para rodar via loop sem precisar navegar na estrutura
     //sempre que um cinema for chamado, browser ou via polling cron atualizar seu status no couchdb.
     //se no update executar e não tiver cinema remover do couchdb
     // $dir = "/cinema/br/sc/florianopolis/";
     //
     // $template = new CinemaTemplate();
     //
     // $arr = array("nome" => "GNC Iguatémi", "id" => "123", "endereco" => "endereco", "url" => "http://www.google.com.br/movies?near=porto+alegre,+rs,+bra&tid=8731d7134e5b461a");
     //
     // $template->create($dir, $arr);
     // echo $file;
     //
     // file_put_contents($file, "ssss");
     // $fh = fopen($myFile, 'w') or die("can't open file");
     // $stringData = "Subject\n";
     // fwrite($fh, $stringData);
     // $stringData = "Message\n";
     // fwrite($fh, $stringData);
     // fclose($fh);
     //$template_class = file_get_contents($url_template);
     // $cinema_finder = new CinemaFinder('br','RS', 'Florianópolis');
     // 		echo $cinema_finder->find();
     //2. rotina de polling - update de horarios
     //loop em todos os cinemas registrados no couchdb, so rodar a classe dinamica...
     //gerar e armazenar hash md5 do cinema e horarios para comparar e so fazer push para clientes com novidades.
     //no couch guardar id do cinema como array [pais, estado, cidade] ou ver como filtrar por estrutura... TALVEZ...
     //chamar callback do cliente registrado passando a lista de cinemas com horarios novos
     //controle de erros quando cinema não retornar horarios, pensar em outras..
     //3. Diariamente rodar o CinemaFinder usando o arquivo json de cidades para encontrar novos cinemas
     //para cada lista de cinemas por cidade retornada comparar com a ja existente no couchdb verificando o tid com o cinema do google e fazendo
     //reflexao para so validar os que implementar o googlemoviesadapter. o resultado disso cria a estrutura de dir e template como cinema novo e
     //notifica por email
     //quando pegar o cinema para gravar armazenar como literal estatico, tid do cinema, nome, endereco, e gps do endereco
 }
示例#5
0
文件: Helper.php 项目: xxdf/showtimes
 public static function transliterate($string)
 {
     static $i18n_loaded = false;
     static $translations = array();
     if (!$i18n_loaded) {
         $path = Env::path('helper/i18n-ascii.txt');
         if (is_file($path)) {
             $translations = parse_ini_file($path);
         }
         $i18n_loaded = true;
     }
     return strtr($string, $translations);
 }
示例#6
0
 /**
  * Automatically resize and create images on the fly.
  * If the image already exists then it's path is just passed back.
  *
  * $options:
  * - string "path" The path that the images reside in (default: "images/img")
  * - string "basename" The filename, without extension, of the image, the extension will be automatically established and appended
  * - string "filename" The filename, including extension, of the image. Either this or "basename" must be set
  * - int "width" The maximum width that the image can be, if the image is wider it will be resized (maintaining the same aspect ratio)
  * - int "height" The maximum height that the image can be, if the image is taller it will be resized (maintaining the same aspect ratio)
  *
  * @param array $options An array of options (see above)
  *
  * @return string
  */
 public static function img($options = null)
 {
     $options = Helper::getOptions($options, ["path" => "images/img", "basename" => null, "filename" => null, "width" => null, "height" => null]);
     $path = $options["path"];
     if ($path[0] == "/") {
         $fullpath = $path;
     } else {
         $fullpath = Env::path($path, Env::PATH_DOCUMENT_ROOT);
     }
     $filename = $options["filename"];
     if ($basename = $options["basename"]) {
         $original = $fullpath . "/original/" . $basename;
         if (file_exists($original)) {
             if ($ext = static::getExtension($original)) {
                 $filename = $basename . "." . $ext;
                 copy($original, $fullpath . "/original/" . $filename);
             }
         }
     }
     if (!$filename) {
         throw new \Exception("No image filename provided to use");
     }
     $original = $fullpath . "/original/" . $filename;
     if (!file_exists($original)) {
         throw new \Exception("Original image file does not exist (" . $original . ")");
     }
     $w = $options["width"];
     $h = $options["height"];
     if (!$w && !$h) {
         return $path . "/original/" . $filename;
     }
     if ($w && $h) {
         $dir = "max" . $w . "x" . $h;
     } elseif ($w) {
         $dir = "width" . $w;
     } elseif ($h) {
         $dir = "height" . $h;
     }
     $fullpath .= "/" . $dir;
     $newfile = $fullpath . "/" . $filename;
     $newpath = $path . "/" . $dir . "/" . $filename;
     if (file_exists($newfile)) {
         return $newpath;
     }
     if (!is_dir($fullpath)) {
         mkdir($fullpath, 0777, true);
     }
     static::resize(["fromPath" => $original, "toPath" => $newfile, "width" => $w, "height" => $h]);
     return $newpath;
 }
示例#7
0
 private function new_template($dir, Cinema $cinema)
 {
     $nome = $cinema->name;
     $class = Helper::clean_string($nome, -1, '_');
     $file = $class . '.php';
     $tid = $cinema->id;
     //se ja tem uma classe para o cinema descarta entao
     //pesquisa classe com mesmo nome recursivo a partir do diretorio do estado...
     if (!Helper::recursive_file_exists($file, $dir)) {
         $temp_uf = $cinema->state_code;
         $cinema = $this->geo_cinema($cinema);
         $endereco = $cinema->address;
         $telefone = $cinema->phone;
         $url = $cinema->url;
         $lat = $cinema->lat;
         $long = $cinema->long;
         $cidade = $cinema->city;
         $estado = $cinema->state;
         $uf = $cinema->state_code;
         //esse if deve evitar o compartamente do google de procurar cinemas proximos tipo colocar volta redonda dentro de sp
         if (empty($uf)) {
             //se caiu aqui é pq o geocode do endereco do cine falhou entao usa a uf temp pelo menos para colocar o cine no dir correto
             $uf = $temp_uf;
             $path = $dir . $uf . '/';
         } else {
             //bug do google maps
             if (Helper::clean_string($uf) == 'sao-paulo') {
                 $uf = 'SP';
             }
             $path = $dir . $uf . '/' . Helper::clean_string($cinema->city);
         }
         $path = strtolower($path);
         $this->create_dir($path);
         $tpl = Env::path('helper/CinemaClass.tpl');
         if (!is_file($tpl)) {
             Log::write("Não achou {$tpl}");
             exit(1);
         }
         //a classe do cinema fica sempre em cinema/uf/cidade/file.php
         $file = $path . '/' . $file;
         $handle = fopen($file, 'w');
         if ($handle == false) {
             Log::write("Erro criando {$file}");
             exit(1);
         }
         $cinema_class = file_get_contents($tpl);
         $content = str_replace("%class", $class, $cinema_class);
         $content = str_replace("%nome", $nome, $content);
         $content = str_replace("%id", $tid, $content);
         $content = str_replace("%endereco", $endereco, $content);
         $content = str_replace("%telefone", $telefone, $content);
         $content = str_replace("%cidade", $cidade, $content);
         $content = str_replace("%estado", $estado, $content);
         $content = str_replace("%uf", $uf, $content);
         $content = str_replace("%lat", $lat, $content);
         $content = str_replace("%long", $long, $content);
         $content = str_replace("%url", $url, $content);
         fwrite($handle, $content);
         fclose($handle);
         //guarda todos os novos cinemas criados para depois notificar via email para o admin controlar...
         //se não achou a cidade do cinema via geolocation vai colocar em um lugar errado, entao tem q notificar...
         $cinema_path = str_replace(Env::path(), "", $file);
         if (empty($cidade)) {
             $this->invalid_cinemas[] = $cinema_path;
         } else {
             $this->new_cinemas[] = $cinema_path;
         }
     }
 }