3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Engine_ extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('engine_model','objEngine'); //$this->load->library('verificausuario',array('tipo'=>'sistema')); } public function index() { if($_SERVER['REQUEST_METHOD']=='POST') { $opcoes = array( 'edicao'=>true, 'artista'=>true, 'raridade'=>true, 'tipo'=>true, 'subtipo'=>true, 'carta'=>true ); $url = $this->input->post('url'); $idioma = explode('/',$url); $idioma = explode('.',$idioma[4]); $idioma = $idioma[0]; $dados = array( 'resultado' => $this->getLinks($url,$opcoes,$idioma) ); } $this->load->view('head'); $this->load->view('header'); $this->load->view('sidebar'); $this->load->view('page',@$dados); $this->load->view('footer'); } function getLinks($url,$opcoes,$idioma){ $html = file_get_html($url); $rows = $html->find('tr'); $dados = array(); foreach ($rows as $row) { $cells = $row->find('td'); $cellData = array(); foreach ($cells as $cell) { $cellData[] = $cell->outertext; } $dados[] = $cellData; } unset ($dados[count($dados)-1]);//elimina contagem das paginas e lista e... for ($i=0;$i < 4;$i++){ unset ($dados[$i]);//elimina menu, lista etc... } //for ($i=5;$i < 300;$i++){ // unset ($dados[$i]);//elimina menu, lista etc... //} $html->clear(); unset($html); $idioma = $idioma; //echo '<meta charset="utf-8">'; foreach($dados as $d){ $info = $this->getInfo($d,$idioma); $json['nome'] = $info['edicao']; $json['idioma'] = $info['idioma']; $json['sigla_edicao'] = $info['sigla_edicao']; $json['cards'][] = $this->getInfo($d,$idioma); $json_criado = json_encode($json); if($opcoes['edicao']){ //cadastra Edicao/////////////////////////// $this->objEngine->nome = $info['edicao']; $this->objEngine->idioma = $info['idioma']; $this->objEngine->sigla = $info['sigla_edicao']; $this->objEngine->cadastraEdicao(); unset($this->objEngine->idioma); unset($this->objEngine->sigla); unset($this->objEngine->nome); ///////////////////////////////////////////// } if($opcoes['artista']){ ///////CADASTRA ARTISTA////////////////////// $this->objEngine->nome = $info['artista']; $this->objEngine->cadastraArtista(); unset($this->objEngine->nome); } ///////////////////////////////////////////// if($opcoes['tipo']){ //cadastrando tipo se nao existir//////////// $this->objEngine->nome = $info['tipo']; $this->objEngine->cadastraTipo(); unset($this->objEngine->nome); } ///////////////////////////////////////////// if($opcoes['subtipo']){ //cadastraSubTipo se nao existir///////////// $this->objEngine->nome = $info['subtipo']; $this->objEngine->cadastraSubTipo(); unset($this->objEngine->nome); } ///////////////////////////////////////////// if($opcoes['raridade']){ //CADASTRA RARIDADE se nao existir/////////// $this->objEngine->nome = $info['raridade']; $this->objEngine->cadastraRaridade(); unset($this->objEngine->nome); ///////////////////////////////////////////// } //recupera o ID do tipo/////////////////////// $this->objEngine->nome = $info['tipo']; $id_tipo = $this->objEngine->pegaTipo(); unset($this->objEngine->nome); $id_tipo = $id_tipo[0]->id_tipo; ////////////////////////////////////////////// if($opcoes['carta']){ //recupera o ID do subtipo/////////////////////// $this->objEngine->nome = $info['subtipo']; $id_subtipo = $this->objEngine->pegaSubTipo(); unset($this->objEngine->nome); @$id_subtipo = $id_subtipo[0]->id_subtipo; if ($id_subtipo == '' || $id_subtipo == null) $id_subtipo = 2; ////////////////////////////////////////////// //recupera o ID do subtipo/////////////////////// $this->objEngine->nome = $info['edicao']; $this->objEngine->idioma = $info['idioma']; $id_edicao = $this->objEngine->pegaEdicao(); unset($this->objEngine->nome); unset($this->objEngine->idioma); $id_edicao = $id_edicao[0]->id_edicao; ////////////////////////////////////////////// //recupera o ID do artista/////////////////////// $this->objEngine->nome = $info['artista']; $id_artista = $this->objEngine->pegaArtista(); unset($this->objEngine->nome); $id_artista = $id_artista[0]->id_artista; ////////////////////////////////////////////// //recupera o ID do raridade/////////////////////// $this->objEngine->nome = $info['raridade']; $id_raridade = $this->objEngine->pegaRaridade(); unset($this->objEngine->nome); $id_raridade = $id_raridade[0]->id_raridade; ////////////////////////////////////////////// $this->objEngine->artista_id_artista = $id_artista; $this->objEngine->raridade_id_raridade = $id_raridade; $this->objEngine->subtipo_id_subtipo = $id_subtipo; $this->objEngine->edicao_id_edicao = $id_edicao; $this->objEngine->tipo_id_tipo = $id_tipo; $this->objEngine->nome = $info['nome']; $this->objEngine->idioma = $info['idioma']; $this->objEngine->ataque = $info['ataque']; $this->objEngine->resistencia = $info['resistencia']; $this->objEngine->descricao = $info['descricao']; $this->objEngine->descricao_en = @$info['descricao_en']; $this->objEngine->texto = $info['texto']; $this->objEngine->regras = $info['regras']; if (isset($info['mana_c'])) $this->objEngine->mana_c = $info['mana_c']; if (isset($info['mana'])) $this->objEngine->mana = trim(@$info['mana']); $this->objEngine->imagem = $info['cod_imagem']; $this->objEngine->imagem_src = $info['imagem_src']; $this->objEngine->cadastraCarta(); unset($this->objEngine->nome); unset($this->objEngine->idioma); unset($this->objEngine->artista_id_artista); unset($this->objEngine->raridade_id_raridade); unset($this->objEngine->subtipo_id_subtipo); unset($this->objEngine->edicao_id_edicao); unset($this->objEngine->tipo_id_tipo); unset($this->objEngine->ataque); unset($this->objEngine->resistencia); unset($this->objEngine->descricao); unset($this->objEngine->descricao_en); unset($this->objEngine->texto); unset($this->objEngine->regras); unset($this->objEngine->mana_c); unset($this->objEngine->custo); unset($this->objEngine->mana); unset($this->objEngine->imagem); unset($this->objEngine->imagem_src); unset($id_edicao); unset($id_artista); unset($id_subtipo); unset($id_tipo); unset($id_raridade); $resultado[$info['nome']]['nome'] = $info['nome']; $resultado[$info['nome']]['descricao'] = substr($info['descricao'],0,200); } } $fp = fopen('jsons/'.trim($json['nome']).$json['idioma'].".json", "a"); fwrite($fp, $json_criado); fclose($fp); return $resultado; } function getInfo($cont,$idioma){ $html = str_get_html($cont[1]); $resul['cod_imagem'] = strip_tags($cont[0]);//COD IMAGEM $resul['raridade'] = strip_tags($cont[4]);//RARIDADE $resul['edicao'] = strip_tags($cont[6]);//edicao $conn[] = $html->find('a'); $nome = $html->find('a'); $nome = strip_tags($nome[0]); $url = 'http://magiccards.info'.$conn[0][0]->href; $html = file_get_html($url); $descricao[] = $html->find('p'); foreach ($descricao as $carta) { //pega tipo if(strpos($carta[0], '—')){ $tipo = explode('—',$carta[0]); $e = explode(',',$tipo[1]); $e = explode(' ',$e[0]); $res = explode('/', $e[count($e)-1]); if (count($res) >= 2){ $resul['ataque'] = strip_tags($res[0]);//ATAQUE $resul['resistencia'] = strip_tags($res[1]);//RESISTENCIA }else{ $resul['ataque'] = '';//ATAQUE $resul['resistencia'] = '';//RESISTENCIA } for($i = 0;$i < count($e) -1;$i++){ @$subtipo .= $e[$i].' '; } }else{ $tipo = explode(',',$carta[0]); @$subtipo = ''; $resul['ataque'] = ''; $resul['resistencia'] =''; } $tipo = $tipo[0]; $resul['tipo'] = strip_tags($tipo);//TIPO $resul['subtipo'] = strip_tags($subtipo);//SUBTIPO $resul['nome'] = $nome; //NOME //captura a parte que tem a mana convertida if(!strpos($resul['tipo'] , 'Mágica') && !strpos($resul['tipo'] , 'Artefato') && !strpos($resul['tipo'] , 'Planeswalker') && !strpos($resul['tipo'] , 'Feitiço') && !strpos($resul['tipo'] , 'Terreno') && !strpos($resul['tipo'] , 'Sorcery') && !strpos($resul['tipo'] , 'Instant') && !strpos($resul['tipo'] , 'Enchantment') && !strpos($resul['tipo'] , 'Artifact') && !strpos($resul['tipo'] , 'Land') && !strpos($resul['tipo'] , 'Encantamento') ){ $mana_c = explode('(',$carta[0]); if(strpos($mana_c[0],'Planeswalker')){ $mana = explode(',',$mana_c[1]); if($mana_c[1]) $resul['mana_c'] = substr($mana_c[2],0,1);//MANA_C if($mana[1]) $resul['mana'] = trim($mana[1]); //MANA SEM CONVERTER }else{ $mana = explode(',',$mana_c[0]); if(@$mana[1]) @$resul['mana'] = trim(@$mana[1]); //MANA SEM CONVERTER //remove o ) do final if(@$mana_c[1]) @$mana_c = substr(@$mana_c[1],0,1); @$resul['mana_c'] = strip_tags(@$mana_c);//MANA_C } } $htmldesc = str_get_html($carta[1]);//gera um array com o html do texto $desc = $htmldesc->find('b');//pega dentro do array somente a tag b que é a que tem a descricao $resul['descricao'] = $desc[0]->innertext;//gera a descricao $htmldesc = str_get_html($carta[2]); $desc = $htmldesc->find('b'); if(@$desc[0]->innertext != null) @$resul['descricao_en'] = @$desc[0]->innertext;//DESCRICAO_EN //SALVAR IMAGEM//////////////////////////////// $imagem[] = $html->find('table');//pega tabela que tem a imagem $htmlimg = str_get_html($imagem[0][3]); //gera o html $img = $htmlimg->find('img');//recupera todos os possiveis IMG $url_q = explode('/',$img[0]->src);//pega o primeiro IMG encontrado que eh a foto da carta $resul['imagem_src'] = $img[0]->src; if($this->criar_pasta('../cartas/'.$url_q[5].'/'.$url_q[4], 0777 )){ //criar pasta no servidor $destino='../cartas/'.$url_q[5].'/'.$url_q[4].'/'.$url_q[6];//gera o endereço de destino (pasta criada a cima junto com o nome da imagem ex: 1.jpg) $resul['sigla_edicao'] = $url_q[5]; $resul['idioma'] = $idioma;//$url_q[4]; if (copy($img[0]->src,$destino)) { $resul['imagem'] = 'OK'; //copia a imagem pro servidor }else{ $resul['imagem'] = 'ERRO AO COPIAR IMAGEM'; } }else{ $resul['imagem'] = 'ERRO AO CRIAR PASTA'; } //FIM SALVAR IMAGEM//////////////////////////// if($resul['idioma'] != 'en'){ $resul['texto'] = strip_tags($carta[3]);//TEXTO $resul['artista'] = strip_tags($carta[4]);//ARTISTA }else{ $resul['texto'] = strip_tags($carta[2]);//TEXTO $resul['artista'] = strip_tags($carta[3]);//ARTISTA } } //DESCRICAO DAS REGRAS $descricao[] = $html->find('ul');// como algumas cartas nao possuem as mudanças de regras aki ele pega as duas possiveis foreach ($descricao as $carta) { $resul['regras'] = @$carta[1]; $resul['regras'] .= @$carta[0]; } $htmlimg->clear(); $htmldesc->clear(); $html->clear(); unset($nome); unset($mana); unset($mana_c); unset($e); unset($res); unset($subtipo); unset($tipo); unset($desc); unset($imagem); unset($img); unset($url_q); unset($descricao); unset($cont); unset($destino); unset($htmlimg); unset($htmldesc); unset($html); unset($conn); return $resul; } private function criar_pasta($path, $mode = 0777){ $dirs = explode(DIRECTORY_SEPARATOR , $path); $count = count($dirs); $path = '.'; for ($i = 0; $i < $count; ++$i) { $path .= DIRECTORY_SEPARATOR . $dirs[$i]; if (!is_dir($path) && !mkdir($path, $mode)) { return false; } } return true; } }
Output for 5.3.0 - 5.6.28, hhvm-3.10.0 - 3.12.0, 7.0.0 - 7.1.0
No direct script access allowed