Alan H. 0 Denunciar post Postado Maio 20, 2010 Olá pessoal! Estou trabalhando em uma função que retorna uma um array com URL de imagens da pesquisa de imagens avaçadas do Goole, mas não qual RegEx usar para capturar as urls... function getGoogleImg($keyWord, $imgW, $imgH) { htmlImgs = file_get_contents("http-~~-//images.google.com.br/images?as_q=".url_encode($keyWord)."&safe=images&tbs=isch:1,isz:ex,iszw:".$imgW.",iszh:".$imgH); preg_match_all("/uma_regex/", $htmlImgs, $imgFetched); return $imgFetched; } No HTML do Google o pedaço de código onde fica o endereço da imagem é apresentado assim <a href="/imgres?imgurl=http://media.techeblog.com/images/robot_wont_fall_down.jpg&imgrefurl=http://www.techeblog.com/index.php/tech-gadget/video-robot-gets-bullied-won-t-fall-down&usg=__DXKw1H0JNIoVLHUnUjSnodiWC1g=&h=455&w=450&sz=84&hl=pt-BR&start=7&sig2=LfxprCfDhGli_3tR01nHkg&um=1&itbs=1&tbnid=6eDPbHJ7wRWU4M:&tbnh=128&tbnw=127&prev=/images%3Fq%3Drobot%26um%3D1%26hl%3Dpt-BR%26sa%3DG%26tbs%3Disch:1&ei=LY_1S_TAEsT48Ab-vpXJCg" id="apf6"><img style="border:1px solid #ccc;padding:1px;vertical-align:bottom" src="http://media.techeblog.com/images/robot_wont_fall_down.jpg"'>http://t3.gstatic.com/images?q=tbn:6eDPbHJ7wRWU4M:http://media.techeblog.com/images/robot_wont_fall_down.jpg" id="ipf6eDPbHJ7wRWU4M:" width="127" height="128"></a> O que eu preciso é o pedaço de código entre "&imgurl=" e "&imgrefurl=", no caso do código assima: imgurl=http://media.techeblog.com/images/robot_wont_fall_down.jpg&imgrefurl= E me retornaria um valor dentro da array $imgFetched : http://media.techeblog.com/images/robot_wont_fall_down.jpg Alguém poderia me ajudar? EDITADO: Pelo o que eu vi o endereço da imagem também é citado no atributo src="" do link, então temos duas alternativas. Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Maio 20, 2010 Você poderia fazer algo assim: (?<=imgurl=).*(?=&imgrefurl=)Tradução: Selecione TUDO, onde atras tenha "imgurl=" e à frente tenha "&imgrefurl=" Compartilhar este post Link para o post Compartilhar em outros sites
Alan H. 0 Denunciar post Postado Maio 21, 2010 Você poderia fazer algo assim: (?<=imgurl=).*(?=&imgrefurl=)Tradução: Selecione TUDO, onde atras tenha "imgurl=" e à frente tenha "&imgrefurl=" Essa RegEx captura perfeitamente as urls das imagens, testei no GSkinner.com, mesmo assim esse código está me retornando uma array vazia... <?php $keyWord = "robot"; $imgW = "200"; $imgH = "200"; $htmlImgs = file_get_contents("http-~~-//images.google.com.br/images?as_q=".urlencode($keyWord)."&safe=images&tbs=isch:1,isz:ex,iszw:".$imgW.",iszh:".$imgH); $preg = preg_match_all("/(?<=imgurl=).*(?=&imgrefurl=)/", $htmlImgs, $imgFetched); print_r($imgFetched); ?> Alguém pode me dar uma luz? Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 21, 2010 Não seria mais fácil você analisar o documento obtido da mesma forma como se analisa um XML? Usando a DOMXPath, em conjunto com a DOMDocument obviamente, você poderia casar todas as tags IMG da DIV#ImgCont Primeiro você usaria a DOMDocument para pegar todas as DIV's, com getElementsByTagName(). Isso te retorna um DOMNodeList que, através de DOMNodeList::item() te retorna um DOMNode, que é justamente o tipo esperado pelo segundo argumento de DOMXPath::query(), o qual permitirá restringir o contexto de busca da query. Muito embora eu nãotenha certeza, já que não manjo muito de XPath, acredito ser possível fazer direto por DOMXPath::query(), sem a necessidade do segundo parâmetro. Bastaria para isso criar a query de uma forma mais precisa. Acredito que essa resolva: div@ImgCont/img Compartilhar este post Link para o post Compartilhar em outros sites
Alan H. 0 Denunciar post Postado Maio 21, 2010 Não seria mais fácil você analisar o documento obtido da mesma forma como se analisa um XML? A idéia é válida, mais eu prefiro usando o PHP, que é o que eu mais tenho conhecimento no momento... Não seria mais fácil você analisar o documento obtido da mesma forma como se analisa um XML? Além do mais se fosse para usar javascript e poderia usar a API própria do Google: /* * How to search for images and restrict them by size. * This demo will also show how to use Raw Searchers, aka a searcher that is * not attached to a SearchControl. Thus, we will handle and draw the results * manually. */ google.load('search', '1'); function searchComplete(searcher) { // Check that we got results if (searcher.results && searcher.results.length > 0) { // Grab our content div, clear it. var contentDiv = document.getElementById('content'); contentDiv.innerHTML = ''; // Loop through our results, printing them to the page. var results = searcher.results; for (var i = 0; i < results.length; i++) { // For each result write it's title and image to the screen var result = results[i]; var imgContainer = document.createElement('div'); var title = document.createElement('h2'); // We use titleNoFormatting so that no HTML tags are left in the title title.innerHTML = result.titleNoFormatting; var newImg = document.createElement('img'); // There is also a result.url property which has the escaped version newImg.src = result.tbUrl; imgContainer.appendChild(title); imgContainer.appendChild(newImg); // Put our title + image in the content contentDiv.appendChild(imgContainer); } } } function OnLoad() { // Our ImageSearch instance. var imageSearch = new google.search.ImageSearch(); // Restrict to extra large images only imageSearch.setRestriction(google.search.ImageSearch.RESTRICT_IMAGESIZE, google.search.ImageSearch.IMAGESIZE_MEDIUM); // Here we set a callback so that anytime a search is executed, it will call // the searchComplete function and pass it our ImageSearch searcher. // When a search completes, our ImageSearch object is automatically // populated with the results. imageSearch.setSearchCompleteCallback(this, searchComplete, [imageSearch]); // Find me a beautiful car. imageSearch.execute("Subaru STI"); } google.setOnLoadCallback(OnLoad); O único problema dessa API é que eu não faço a mínima idéia de como retornar imagens com valores personalizados.... Na documentação da API só diz isso: google.search.ImageSearch.RESTRICT_IMAGESIZE - Quando especificado como o valor de type, os resultados da pesquisa de imagens são restritos às imagens com determinadas dimensões em pixels. Os valores opcionais válidos para este tipo são: * google.search.ImageSearch.IMAGESIZE_SMALL - restringe a imagens pequenas e ícones * google.search.ImageSearch.IMAGESIZE_MEDIUM - restringe a imagens coloridas * google.search.ImageSearch.IMAGESIZE_LARGE - restringe a imagens grandes * google.search.ImageSearch.IMAGESIZE_EXTRA_LARGE - restringe a imagens muito grande Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 21, 2010 E em que momento eu mencionei JavaScript, André? Você por acaso pelo menos passou o mouse pelos links ao longo do post? Todos apontam para o PHP.NET O fato é que, devido a semelhança no resultado, tanto o JavaScript como a DOMDocumment do PHP possuem um médodo com o mesmo nome, no caso getElementsByTagName() ;) Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Maio 21, 2010 Alguém pode me dar uma luz?Hm... tente acessar a URL com javascript desabilitado...Sim, o content é contruido através de js =/ Compartilhar este post Link para o post Compartilhar em outros sites
Dr_H0us3 0 Denunciar post Postado Maio 22, 2010 /(?<url>[a-z]{3,5}:\/{2}[^\&]+)/i Compartilhar este post Link para o post Compartilhar em outros sites
Alan H. 0 Denunciar post Postado Maio 26, 2010 E em que momento eu mencionei Javascript, André? Você por acaso pelo menos passou o mouse pelos links ao longo do post? Todos apontam para o PHP.NET O fato é que, devido a semelhança no resultado, tanto o Javascript como a DOMDocumment do PHP possuem um médodo com o mesmo nome, no caso getElementsByTagName() ;) Pura desatenção minha! Vou tentar aqui do seu jeito! Finalmente consegui rodar rodar o código, para mim ele está funcionando, eu uso o PHP 5.3.2, porém no meu servidor que usa o PHP 5.2.11 ele não está funcionando, sempre retorna o valor $outPut['error']['empty']... Alguém sabe por que? <?php function getImages($termSearch = "", $imgW = "", $imgH = "", $startAt = "") { if (empty($termSearch)) { $outPut['error']['term'] = "Você precisa especificar um termo para a pesquisa!"; } else { $term = urlencode("$termSearch"); if(!empty($imgW) && !empty($imgH)) $imgSize = "&tbs=isch:1,isz:ex,iszw:$imgW,iszh:$imgH"; else $imgSize = ""; $url = "http-~~-//www.google.com.br/images?as_q=$term&hl=pt-BR&btnG=Pesquisa+Google&as_epq=&as_oq=&as_eq=&as_sitesearch=&safe=images&as_st=y$imgSize&sa=N&start=$startAt"; $htmlImgs = file_get_contents($url); $doc = new DOMDocument(); libxml_use_internal_errors(true); $doc->loadHTML($htmlImgs); $xml = simplexml_import_dom($doc); $images = $xml->xpath('//img'); $i = 1; foreach ($images as $img) { if (preg_match("/gstatic/", $img['src'])) { $imgGoogle = preg_replace("/(?=http).*(?=http)/", "", $img['src']); $outPut['img'][$i] = $imgGoogle; $i++; } } if(!isset($outPut['img'])) $outPut['error']['empty'] = "Sua consulta não retornou resultados"; } return $outPut; } $imagens = getImages("angelina jolie"); print_r($imagens); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 27, 2010 Modifiquei algumas coisas no script, teste e veja se retorna algo: <?php error_reporting( E_ALL | E_STRICT ); define( 'URL', $url = 'http://www.google.com.br/images?as_q=%s&hl=pt-BR&btnG=Pesquisa+Google&as_epq=&as_oq=&as_eq=&as_sitesearch=&safe=images&as_st=y%s&sa=N&start=%d' ); function getImages( $search, $width = NULL, $height = NULL, $start = 0 ) { $output = array(); if( empty( $search ) ) { $output['error']['term'] = 'Você precisa especificar um termo para a pesquisa!'; } else { $search = urlencode( $search ); $dimensions = '&tbs=isch:1,isz:ex'; $dimensions .= ( ! empty( $width ) ? ',iszw:' . $width : '' ); $dimensions .= ( ! empty( $height ) ? ',iszh:' . $height : '' ); libxml_use_internal_errors( TRUE ); $DOM = new DOMDocument(); $DOM -> loadHTML( file_get_contents( sprintf( URL, $search, $dimensions, intval( $start ) ) ) ); $XML = simplexml_import_dom( $DOM ); $images = $XML -> xpath( '//img' ); foreach( $images as $image ) { if( strpos( $image['src'], 'gstatic' ) !== FALSE ) { $output['images'][] = preg_replace( '/(http.*?)http/', 'http', $image['src'] ); } } if( ! isset( $output['images'] ) ) { $output['error']['empty'] = sprintf( 'Sua busca por %s não retornou resultados', urldecode( $search ) ); } } return $output; } $imagens = getImages("angelina jolie"); print '<pre>'; print_r($imagens); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Alan H. 0 Denunciar post Postado Maio 27, 2010 Modifiquei algumas coisas no script, teste e veja se retorna algo: Imaggens sua alteração no script ficou super profissional, gostei mesmo e ainda aprendi um bocado de como fazer as coisas mais práticas, porém quando o script roda no meu servidor pago, ele ainda retorna output['error']['empty'], e nenhuma imagem.. Compartilhar este post Link para o post Compartilhar em outros sites
Alan H. 0 Denunciar post Postado Maio 27, 2010 Tenho umas perguntas também sobre sua alteração no script: error_reporting( E_ALL | E_STRICT ); O error_reposting é necessário? define( 'URL', $url = 'http://www.google.com.br/images?as_q=%s&hl=pt-BR&btnG=Pesquisa+Google&as_epq=&as_oq=&as_eq=&as_sitesearch=&safe=images&as_st=y%s&sa=N&start=%d' );Por que esta constante está fora da função? Certamente eu teria que definir manualmente o valor de URL todas as vezes que eu fosse chamar a função, e por que simplesmente não deixa somente a variável $url = ..........., ao invés de definir uma constante? Existe vantagens? E por que o valor desta constante não é simplesmente a url, ao invés de uma variável que tem o valor da url? function getImages( $search, $width = NULL, $height = NULL, $start = 0 )Por que o PHP não retorna um Warning: Undefined variable para o $rearch, quando eu não especifico o $search na minha chamada par a função?E qual a diferença entre $width = NULL e $width = ""? $dimensions .= ( ! empty( $width ) ? ',iszw:' . $width : '' );Eu acho que entendi essa linha, é pra ser algo parecido com o if? se $width não estiver vazio ",iszw:".$width, caso contrário "", é isso? Eu sempre achei que seria necessário o uso do CASE... $DOM -> loadHTML( file_get_contents( sprintf( URL, $search, $dimensions, intval( $start ) ) ) );Eu não entendi o uso do intval aqui, na verdade o intval é muito confuso pra mim, isso é para evitar o uso de números com decimais? E eu também desconhecia o poder do sprintf, hehehe $output['images'][] = preg_replace( '/(http.*?)http/', 'http', $image['src'] );Aquele valor em branco da array ['images'][] serve para automaticamente inserir mais uma informação? Acho que por enquanto é isso. Agradeço se você puder responder. Compartilhar este post Link para o post Compartilhar em outros sites
Alan H. 0 Denunciar post Postado Maio 27, 2010 Problema resolvido! O meu problema era que eu tinha que definir um User Agent antes de executar o file_get_contents... Essa linha resolveu o problema: ini_set('user_agent', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3'); Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Augusto 417 Denunciar post Postado Maio 27, 2010 Tenho umas perguntas também sobre sua alteração no script: error_reporting( E_ALL | E_STRICT ); O error_reposting é necessário? Dessa forma qualquer posível erro é disparado, o que facilita a depuração (achar o problema). define( 'URL', $url = 'http://www.google.com.br/images?as_q=%s&hl=pt-BR&btnG=Pesquisa+Google&as_epq=&as_oq=&as_eq=&as_sitesearch=&safe=images&as_st=y%s&sa=N&start=%d' ); Por que esta constante está fora da função? Certamente eu teria que definir manualmente o valor de URL todas as vezes que eu fosse chamar a função, e por que simplesmente não deixa somente a variável $url = ..........., ao invés de definir uma constante? Existe vantagens? E por que o valor desta constante não é simplesmente a url, ao invés de uma variável que tem o valor da url? Troquei o CODE por QUOTE para pode negritar as mudanças. Esses %s e %d não fazem parte da URL do Google, mas quando usado em conjuntocom o sprintf() eles são substituídos por strings (%s) e/ou números (%d). Eu nunca tentei, nem de curiosidade colocar um define() dentrode uma função. Mas acredito que não seja possível mesmo. Se fosse uma classe, ao invés de do define() eu armazenaria num const e acessaria self::$URL A vantagem eu vejo na legibilidade. Compare a forma como você fez, concatenando as variáveis com essa. function getImages( $search, $width = NULL, $height = NULL, $start = 0 )Por que o PHP não retorna um Warning: Undefined variable para o $rearch, quando eu não especifico o $search na minha chamada par a função? Porque eu estou condicionando ela com o empty(). Toda a rotina de conexão ao Google, listagem e análises (para não dizer "parseamento" que é feio :P ) só é feito SE $search não estiver vazio, ouse ja, possuir valor. E qual a diferença entre $width = NULL e $width = ""? Não estou bem certo. É apenas costume. :lol: $dimensions .= ( ! empty( $width ) ? ',iszw:' . $width : '' );Eu acho que entendi essa linha, é pra ser algo parecido com o if? se $width não estiver vazio ",iszw:".$width, caso contrário "", é isso? Eu sempre achei que seria necessário o uso do CASE... Isso se chama operadores ternários. Não sei o link pro manual, mas funciona assim: ( teste_logico ? acao_se_verdadeiro : acao_se_falso ) Como $dimensions já existe eu concateno algo à ela. Mas eu só concateno de acordo com uma condição, um teste lógico. Eu poderia fazer: if( ! empty( $width ) ) { $dimensions .= ',iszw:' . $width; } Mas, eu posso fazer em uma linha, o que desse modo faria em três ;) $DOM -> loadHTML( file_get_contents( sprintf( URL, $search, $dimensions, intval( $start ) ) ) );Eu não entendi o uso do intval aqui, na verdade o intval é muito confuso pra mim, isso é para evitar o uso de números com decimais? E eu também desconhecia o poder do sprintf, hehehe O intval() converte algo passado como primeiro argumento para um número. Se a conversão falhar, como tentar converter um texto em número, intval() vai retornar um zero numérico. Se ocorrer com sucesso, vai retornar a representação numérica do argumento: $string = '5'; var_dump( $string ); // string(5) var_dump( intval( $string ) ); // int(5) $output['images'][] = preg_replace( '/(http.*?)http/', 'http', $image['src'] );Aquele valor em branco da array ['images'][] serve para automaticamente inserir mais uma informação? Exato. Leia sobre Criando/modificando com a sintaxe de colchetes no manual. Quando você usa [] ao fim de um array ou uma variável não definida, você modifica-o, adicionando aquilo que estiver depois do sinal de igualdade ao seu fim. É quase como array_push(). A diferença é que usando os colchetes, se a variável não existir, ela é criada na hora, como um array vazio acrescido do elemento passado, ao passo que o array_push() vai emitirum aviso de que o primeiro parâmetro não é um array. Acho que por enquanto é isso. Agradeço se você puder responder. Taí. ^^ Problema resolvido! O meu problema era que eu tinha que definir um User Agent antes de executar o file_get_contents... Essa linha resolveu o problema: ini_set('user_agent', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3'); Como é? Que raio de servidor você está PAGANDO? O user agent é definido na variável superglobal de ambiente $_SERVER, com base nas definições do navegador. Ela não, por padrão, não existir. Você até pode removê-la manualmente, mas ela existe: error_reporting( E_ALL | E_STRICT ); var_dump( $_SERVER['HTTP_USER_AGENT'] ); print '<br />'; unset( $_SERVER['HTTP_USER_AGENT'] ); var_dump( $_SERVER['HTTP_USER_AGENT'] ); Vai retornar, aqui pra mim, no Firefox com minhas extensões: string(121) "Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3 (.NET CLR 3.5.30729) FirePHP/0.4" Notice: Undefined index: HTTP_USER_AGENT in C:\Arquivos de programas\Zend\Apache2\htdocs\teste.php on line 8 NULL Seria o caso de entrar em contato com seu host e, se "chiarem", vai pra outro. Ultimamente andam falando muito bem do UolHost, mas eu não sei porque não uso. Ufa! :P Compartilhar este post Link para o post Compartilhar em outros sites
Alan H. 0 Denunciar post Postado Maio 27, 2010 Ultimamente andam falando muito bem do UolHost, mas eu não sei porque não uso. Ufa! :P Obrigado mesmo pelas respostas, aprendi um monte de coisas que eu nem sabia existir e tudo isso hoje de manha :] Poisé, quando eu mandei um e-mail pra eles perguntando se por acaso não seria problema de alguma versão diferente de alguma dependência do PHP, eles me responderam assim: Dear Alan, The problem is that your script doesn't send HTTP User-Agent header. You need to correct your script in order to send correct User-Agent header, e.g. put something like the following somewhere in your script: ini_set('user_agent', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3'); Also please take into consideration that unfortunately we do not provide our customers with debugging/custom php code support. E ainda me passaram o sermão por eu ter perguntado UHAuheuh Não sei por que, mas não gosto de servidor nacional... Tenho um preconceito enorme quanto a isso, acho que é pelo preço cobrado... Meu próximo passo vai ser perguntar pra eles por que essa superglobal não está definida por padrão... Aliás, estou implementando o código um pouco mais, botando mais funções como a safe search e retornos para análise, quando estiver pronto faço questão que a comunidade veja e opine... Está ficando melhor que a própria API do Google Images, ahahaha Abração! Compartilhar este post Link para o post Compartilhar em outros sites
Alan H. 0 Denunciar post Postado Maio 27, 2010 Enfim está pronto o script, se alguém tiver uma sugestão para o melhoramento do mesmo.. <?php function getImages( $search, $width = NULL, $height = NULL, $start = 0, $safeMode = NULL, $json = FALSE, $rand = FALSE ) { $output = array(); $start = intval( $start ); if( empty( $search ) ) { $output['error']['term'] = 'Você precisa especificar um termo para a pesquisa!'; } else { $search = urlencode( $search ); $safe = '&safe='; if( ! empty( $safeMode )) { switch ($safeMode) { case 1 : $safe .= "off"; break; case 2 : $safe .= "images"; break; case 3 : $safe .= "strict"; break; } } else { $safe .= "strict"; } $dimensions = '&tbs=isch:1,isz:ex'; $dimensions .= ( ! empty( $width ) ? ',iszw:' . $width : '' ); $dimensions .= ( ! empty( $height ) ? ',iszh:' . $height : '' ); libxml_use_internal_errors( TRUE ); //ini_set('user_agent', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3'); $DOM = new DOMDocument(); if( $rand == FALSE ) { define( 'URL', $url = 'http://www.google.com.br/images?as_q=%s%s&as_st=y%s&sa=N&start=%d' ); $DOM -> loadHTML( file_get_contents( sprintf( URL, $search, $safe, $dimensions, $start ) ) ); } if( $rand == TRUE) { if($start <= 0) { define( 'URL', $url = 'http://www.google.com.br/images?as_q=%s%s&as_st=y%s&sa=N' ); $pages = file_get_contents(sprintf( URL, $search, $safe, $dimensions)); $pages = preg_match('/(?<=mente).*(?=resultados)/', $pages, $export); if (isset($export['0'])) { $pages = preg_replace('/\./', '', $export['0']); } $pages = $pages / 20; if ($pages <= 50) { $start = rand(1, $pages) * 20; } else { $start = rand(1, 50) * 20; } $DOM -> loadHTML( file_get_contents( sprintf( URL, $search, $safe, $dimensions, intval( $start ) ) ) ); } else { $output['error']['rand'] = "Você não pode especificar a pagina e ter um resultado randômico ao mesmo tempo."; } } if (!isset ($output['error']['rand'])) { $XML = simplexml_import_dom( $DOM ); $images = $XML -> xpath( '//img' ); $queryResults = preg_match('/(?<=mente).*(?=resultados)/', json_encode($XML), $export); if (isset($export['0'])) { $queryResults = preg_replace('/\./', '', $export['0']); } $i = 1; foreach( $images as $image ) { if( strpos( $image['src'], 'gstatic' ) !== FALSE ) { $output['images'][$i]['image']['url'] = preg_replace( '/(http.*?)http/', 'http', $image['src'] ); $output['images'][$i]['thumb']['url'] = preg_replace( '/(?=:http).*/', '', $image['src'] ); $output['images'][$i]['thumb']['width'] = urlencode( $image['width'] ); $output['images'][$i]['thumb']['height'] = urlencode( $image['height'] ); $i++; } } if ($rand == TRUE) { $imagesResult = count( $output['images'] ); $imageResult = rand(1, $imagesResult); $randImage = $output['images'][$imageResult]; $output['images'] = $randImage; } } if( ! isset( $output['images'] ) and ! isset ( $output['error'] ) ) { $output['error']['empty'] = sprintf( 'Sua busca por %s não retornou resultados', urldecode( $search ) ); } } $output['analytics']['date'] = date("d/m/Y H:i:s"); if( ! isset( $output['error'] ) ) { $output['analytics']['url'] = sprintf( URL, $search, $safe, $dimensions, $start ); if( !isset($output['images']['image'])) { $output['analytics']['count'] = count( $output['images'] ); } else { $output['analytics']['count'] = count( $output['images']['image'] ); } if (isset ($export['0'])) { $output['analytics']['pages'] = ceil( $queryResults / 20 ); } else { $output['analytics']['pages'] = 1; } if (isset ($export['0'])) { $output['analytics']['results'] = preg_replace( "/ /", "", $queryResults ); } else { $output['analytics']['results'] = count( $output['images'] ); } if ($rand == TRUE) { $output['analytics']['randon'] = 1; } else { $output['analytics']['randon'] = 0; } //$output['analytics']['xml'] = $XML; } if( $json == TRUE ) $output = json_encode( $output ); return $output; } $imagens = getImages("nature wallpaper", "1280", "800", "", "1", FALSE, TRUE); //print "<pre>"; print_r ($imagens); print "</pre>"; if (isset ($imagens['images']['image']['url'])) { echo "<img src=\"".$imagens['images']['image']['url']."\" />"; } else { print "<pre>"; print_r ($imagens); print "</pre>"; } ?> Editado: esqueci de dizer o que eu mudei ;D * Opção para SafeSearch * Opção para uma imagem randômica * Opção para retornar em formato json ;D Compartilhar este post Link para o post Compartilhar em outros sites