• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kingless

[PHP]Google Define

35 mensagens neste tópico

Este script que criei vai buscar definições de palavras ao google

Download:

http://www.kingless.net/download.php?filename=define.php

Source Code:

http://www.kingless.net/download.php?filename=define.php;source

Demo:

http://www.kingless.net/define.php

<?php
        ///////////////////////////////////////////
       /////         Google Define 	    ////// 
      ////  By kingless - blastelf@gmail.com //// 
     ///////////////////////////////////////////   
    /// Este script vai buscar definições   /// 
   // de palavras ao google.   		    // 
  ///////////////////////////////////////////

$google = new google;

$google->form( $_POST );

$google->define( $_POST );

class google {

var $lang = '';
var $num = '';
var $define = '';

function define( $post ) {

	if(empty( $post['define'] )) {
		die( '</body></html>' );
	}

	$this->define = $post['define'];
	$this->lang = $post['lang'];

	$this->num = empty( $post['num'] ) ? 1 : $post['num'];

	$data = $this->getData();

	if(empty( $data )) {
		return false;
	}

	$defined = $this->parse_data( $data );

	if(!$defined) {
		$msg  = 'Não foi encontrada nenhuma definição para <b>'. $this->define .'</b>. <br />Sugestões:<blockquote>- Verifique que nenhuma palavra contém erros ortográficos.<br>- <a href="http://www.google.pt/search?hl=pt-PT&q='. $this->define .'"> procura na web </a>  por documentos que contêm <b>"'. $this->define .'"</b><br></blockquote></body></html>';

		die( $msg );
	}

	echo $defined;
}

function parse_data( $data ) {

	$define = explode( '<ul type="disc">', $data );

	if(!empty( $define[1] )) {
		$define = explode( '</ul>', $define[1] );

		preg_match_all( '/<a href="(.*?)">/', $define[0], $links );

		foreach( $links[1] as $link ) {
			$pattern[] = "/". preg_quote( $link, '/'  ) ."/";
			$replace[] = "http://www.google.pt". $link;
		}

		$define = preg_replace( $pattern, $replace, $define[0] );

		$define = explode( '<p></p>', $define );

		$defined = '';

		for($x = 0; $x < $this->num; $x++ ) {
			if(count( $define ) >= $this->num) {
				$defined .= $define[$x].'<p></p>';
			}
		}

		if(empty( $defined )) {
			foreach( $define as $value ) {
				$defined .= $value."<p></p>";
			}
		}

		return utf8_decode( $defined ).'</body></html>';
	}

	return false;
}

function getData () {

	$fp = fsockopen( 'www.google.pt', 80, $errno, $errstr, 2 );

	if(!$fp) {
		die( "Não foi possivel conectar ao google $errno ($errstr)");
	}

	$header = 'GET /search?q=define%3A'. urlencode( $this->define ) .'&hl=pt-PT&oi=definel&defl='. $this->lang ." HTTP/1.1\r\n";
	$header .= "Host: www.google.pt\r\n";
	$header .= "User-Agent: {$_SERVER['HTTP_USER_AGENT']}\r\n";
	$header .= "Referer: http://www.google.pt/webhp?hl=pt-PT&btnG=Pesquisar\r\n";
	$header .= "Connection: close\r\n\r\n";

	fwrite( $fp, $header );

	$data = '';

	while(!feof( $fp )) {
		$data .= fgets( $fp, 4000 );
	}

	fclose( $fp );

	return $data;
}

function form ( $value = '' )  {

	$html[] = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
	$html[] = '<html>';
	$html[] = '<head>';
	$html[] = '<title>Google Define criado por kingless - blastelf@gmail.com</title>';
	$html[] = '<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />';
	$html[] = '<meta name="keywords" content="google, define, google define, kingless, defined, php, php5" /> ';
	$html[] = '<meta name="description" content="Script escrito em PHP que utiliza a funçao define do google para procurar por definições de plavavras" />';
	$html[] = '<style type="text/css">';
	$html[] = '#form { font-size: 0.9em; font-family: verdana, arial; margin-left: auto; margin-right: auto; }';
	$html[] = '#definir { border: 1px solid silver; }';
	$html[] = '.input { border: 1px solid silver; }';
	$html[] = 'a:link, a:visited, a:hover, a:active { text-decoration: none; }';
	$html[] = '</style>';
	$html[] = '</head>';
	$html[] = '<body>';

	$define = empty( $value['define'] ) ? '' : $value['define'];
	$num = empty( $value['num'] ) ? 1 : $value['num'];

	$form[] = '<form action="" method="post">';
	$form[] = '<table id="form"><tr><td>Definir:</td> <td><input class="input" type="text" name="define" value="'. $define .'" /></td></tr>';
	$form[] = '<tr><td>Idioma:</td> <td><select class="input" name="lang">';
	$form[] = '<option value="pt">Português</option>';
	$form[] = '<option value="en">Inglês</option>';
	$form[] = '<option value="es">Espanhol</option>';
	$form[] = '<option value="fr">Francês</option>';
	$form[] = '<option value="nl">Holandês</option>';
	$form[] = '<option value="it">italiano</option>';
	$form[] = '<option value="es">Espanhol</option>';
	$form[] = '<option value="all">Todas as linguas</option>';
	$form[] = '</select></td></tr>';
	$form[] = '<tr><td># Resultados:</td> <td><input class="input" type="text" name="num" value="'. $num .'" /></td></tr>';
	$form[] = '<tr> <td align="right" colspan="2"><input id="definir" type="submit" name="definir" value="definir" /></td></tr></table>';
	$form[] = '</form> <br />';

	echo implode( "\r\n", $html );
	echo implode( "\r\n", $form );
}
}
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens um problema com os acentos. :)

Já tinha reparado nisso :P as definições já vêm do Google assim.. mas já estou a tentar resolver o problema...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já fiz um módulo para o Tarbot para fazer esse define. É basicamente isto:

$page = file_get_contents("http://google.com/search?q=define%20".urlencode($input));
if(preg_match("/width=40 height=30><td valign=top><font size=-1>([^<]*)<br>/", $page, $matches)){
echo "Definition for <b>$input:</b><br>  {$matches[1]}";
}else{
echo "No definition of <b>$input</b> found, please try another search-term.";
}

(Eu sei que sou desmancha prazeres)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

(Eu sei que sou desmancha prazeres)

Errado!!! :P

Antes de fazer o meu código já tinha visto o teu código :) eu prefiro ir ao google do que utilizar o teu código :):P  já com o meu é um bocado diferente porque tens varias opções.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

(Eu sei que sou desmancha prazeres)

Errado!!! :)

Antes de fazer o meu código já tinha visto o teu código :) eu prefiro ir ao google do que utilizar o teu código :D:P  já com o meu é um bocado diferente porque tens varias opções.

lol, whatever :P
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já acabei o código e ja postei  :P Já corrigi todos os erros e tudo esta a funcionar como pretendido  :)

PS: Vou me tornar um bocado convencido e vou dizer que sou bom em PHP digam o que disserem  :P:)

EDIT:

Mais um pequeno pormenor aqui lol

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já acabei o código e ja postei  :P Já corrigi todos os erros e tudo esta a funcionar como pretendido  :)

PS: Vou me tornar um bocado convencido e vou dizer que sou bom em PHP digam o que disserem  :P:)

EDIT:

Mais um pequeno pormenor aqui lol

Ainda tens problemas de acentos. Acho que devias resolver o problema de raiz, e não substituir os caracteres.

E já agora, começa a identar o código (X)HTML. :biggrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ainda tens problemas de acentos. Acho que devias resolver o problema de raiz, e não substituir os caracteres.

Como assim resolver o problema de raiz ?  substituir os caracteres foi a única e mais rápida forma que encontrei para resolver este problema, se sabes outra forma diz é que não me vem a cabeça outra forma  de resolver este problema.

E já agora, começa a identar o código (X)HTML. :biggrin:

O html esta embutido no PHP por isso é que não esta indentado :) se quisesse indentar tinha que colocar \r\n etc... e ficava um monte de confusão no código PHP.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E já agora, começa a identar o código (X)HTML. :biggrin:

O html esta embutido no PHP por isso é que não esta indentado :) se quisesse indentar tinha que colocar \r\n etc... e ficava um monte de confusão no código PHP.

Lol, not really. Só precisas de usar \t e \n, o \r n é necessário :P
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E já agora, começa a identar o código (X)HTML. :biggrin:

O html esta embutido no PHP por isso é que não esta indentado :) se quisesse indentar tinha que colocar \r\n etc... e ficava um monte de confusão no código PHP.

Lol, not really. Só precisas de usar \t e \n, o \r n é necessário :P

\r\n para criar o efeito de ENTER  e quando disse "etc" estava a falar do tab também :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

\r\n para criar o efeito de ENTER  e quando disse "etc" estava a falar do tab também :)

Eu percebi a parte do \r\n, era só para chatear :P
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sempre tão modesto...

E um código como o do djthyrax, é muito mais simples...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sempre tão modesto...

E um código como o do djthyrax, é muito mais simples...

Tu queres é conversa :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas fazem os dois as mesmas coisas?

Não fazem a mesma coisa... deixa-me dizer-te as diferenças

Meu código:

Mostra mais de uma definição

Podes escolher o idioma que queres ver a definição

Podes por o numero de resultado que queres ver

Dizem que é ilegal ir buscar dados ao google automaticamente foi por isso que utilizei o fsockopen  para enviar headers e tentar confundir o script com um browser.

O meu é muito mais agradável e mais fácil de se usar

O código djthyrax:

Só mostra uma denifição

Se quiseres ver uma denifição tens que abrir o código e trocar o valor da função google_define('x'); e google_define('z');

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Meu código:

Mostra mais de uma definição

Podes escolher o idioma que queres ver a definição

Podes por o numero de resultado que queres ver

Dizem que é ilegal ir buscar dados ao google automaticamente foi por isso que utilizei o fsockopen  para enviar headers e tentar confundir o script com um browser.

O meu é muito mais agradável e mais fácil de se usar

O código djthyrax:

Só mostra uma denifição

Se quiseres ver uma denifição tens que abrir o código e trocar o valor da função google_define('x'); e google_define('z');

:)

Ou seja, o meu é mais simples e por consequinte mais fácil de reaproveitar. Para o utilizador final, o teu é mais agradável, não discordo, mas um programador só quer saber +/- cm funciona :P
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A única coisa que tem que se fazer no meu para se tornar um bocado mais simples e fácil de se reaproveitar é apagar a função form e mais nada, a única diferença em relação ao teu é que o meu vai retornar mais valores que o teu e ainda vai ser possível escolher o idioma e o numero de resultados :)

<?php

$google = new google;

$array = array( 'define' => 'a_definicao', 'lang' => 'O_idioma', 'num' => 'E_o_numero de resultados' );

$google->define( $array );

:P

EDIT:

Nem reparei que dizeste que um programador só quer saber +/- como funciona ..

Não fiz isto para programadores xD easy

Qualquer programador que sabe programar faz isto sem precisar de ajuda :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1º: E um pouco mais de modestia?! Este programita não te vai fazer milionário!

2º: No teu define.php do te server, aquilo tá muito mal! Pesquisas alguma coisa, e as descrições aparecem todas manhosas, e se puseres outro número de resultados, aquilo simplesmente não funciona...

3º: Só aparece um resultado...

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

1º: E um pouco mais de modestia?! Este programita não te vai fazer milionário!

Pois tens razão.. xD mas ajuda a melhorar a minha forma de programação de forma a que eu venha a ganhar mais dinheiro no futuro :P

2º: No teu define.php do te server, aquilo tá muito mal! Pesquisas alguma coisa, e as descrições aparecem todas manhosas, e se puseres outro número de resultados, aquilo simplesmente não funciona...

Aqui não aparecem todas manhosas :\  Se calhar não aparecem mais resultados quando alteras o número de resultados porque só tem um certo numero de definições para a palavra, não ?

3º: Só aparece um resultado...

Só aparece um resultado porque é o valor predefinido tenta procurar pela definição de PHP e altera o numero de resultados para veres quantos é que aparecem.

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu procurei por phpBB e em todas as línguas... :S

Mas o programa está bom... :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Qualquer programador que sabe programar faz isto sem precisar de ajuda :P

E os que se estão a iniciar em web spydering e em PHP? Qual é o código que lêem mais facilmente? O teu ou o meu? ;P

Anyway, se o teu propósito é servir o user final, está porreiro :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Conversa? Eu? Não percebi bem com que sentido disseste isso, mas whatever...

O meu é muito mais agradável e mais fácil de se usar

Não discordo, mas primeiro, fica-te mal dizer este tipode coisas, muita mal... principalmente quando o estas a fazer em comparação com outro user do forum, se ainda fosse alguem que não fizesse parte desta domunicade e fosse estrangeiro, ainda era naquela, um gajo só tem de apoiar o que é nacional. Agora, quando estás a equiparar o teu código com um utilizador nacional que faz parte desta comunidade e dizes coisas dessas, enfim...

Segundo, usando a técnica no código do djthyrax consegue-se fazer exactamente o que tu fizeste, mais simples, mais eficaz e com um código mais robusto. E a tua modéstia é que me parte todo, mas pronto. Vou mas é ficar caladinho, não vá o teu ego sofrer consequências devido ás minhas palavras.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
O meu é muito mais agradável e mais fácil de se usar

Não discordo, mas primeiro, fica-te mal dizer este tipode coisas, muita mal... principalmente quando o estas a fazer em comparação com outro user do forum, se ainda fosse alguem que não fizesse parte desta domunicade e fosse estrangeiro, ainda era naquela, um gajo só tem de apoiar o que é nacional. Agora, quando estás a equiparar o teu código com um utilizador nacional que faz parte desta comunidade e dizes coisas dessas, enfim...

A maioria do que falamos aqui não passa de brincadeira... Mesmo que não fosse brincadeira não existe nenhum mal em equiparar os códigos...  o meu código neste caso esta melhor do que o djthyrax e tenho a certeza que o djthyrax se quisesse fazia um código ainda melhor.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora