Ir para o conteúdo

Marco Paris

Cadastrado: 01 Out 2010
Offline Última atividade: Out 02 2010 01:11
-----

#117 Lendo scraps recebidos no Orkut por Ruby

Postado por Marco Paris em 02 outubro 2010 - 01:09

Uma vez conectado ao Orkut, já postei este código aqui, abaixo você pode ver um código criado pelo Thiago Bueno que lê os scraps recebidos.

require 'mechanize'
require 'hpricot'

class Orkut

  def initialize(email, pass)
    @agent = WWW::Mechanize.new
    @email = email
    @pass = pass
  end

  def print_scraps
    page = scrap_page
    scraps = page.search "div[@class='mblock']/div"
    scraps.each do |l|
      parts = Hpricot(l).inner_html.split("\n")
      puts "Name: #{parts[1]}"
      puts "Date: #{parts[3]}"
      puts "Message: "
      parts[4..parts.size-2].each {|line| puts line}
      puts "-" * 50
   end
  end

  private

  def scrap_page
    log_in
    #Call home page to get the temporary URL that google generates
    page = @agent.get "http://m.orkut.com/Home"
    #Try to access the temporary URL to pass the authentication token
    page = @agent.get page.meta[0].uri.to_s
    #Now, with authentication ready we can access the content
    page = @agent.get "http://m.orkut.com/Scrapbook"
  end

  def log_in
    page = @agent.get "https://www.google.com/accounts/ServiceLogin?service=orkut&hl=en-US&rm=false&continue=http%3A%2F%2Fm.orkut.com%2FRedirLogin%3Fmsg%3D0%26page%3Dhttp%253A%252F%252Fm.orkut.com%252FHome&cd=US&nui=5&btmpl=mobile&ltmpl=mobile&passive=true&skipvpage=true&sendvemail=false"

    form = page.forms.first
    form.Email = @email
    form.Passwd = @pass
    page = @agent.submit form
  end
end

o = Orkut.new('your_email@gmail.com', 'your_pass')
o.print_scraps



#116 Conectar ao Orkut com um pequeno script Ruby

Postado por Marco Paris em 02 outubro 2010 - 01:04

O Wagner Andrade publicou no iMasters um excelente código para conectarmos facilmente ao Orkut. O código está abaixo. Quem quiser ver o artigo na íntegra onde o Wagner apresenta e excplica o código, clique aqui.

require 'net/http'
require 'net/https'
 
@user = 'user@email.com'
@pass = 'password'
 
@google = Net::HTTP.new 'www.google.com', 443
@google.use_ssl = true
@google.verify_mode = OpenSSL::SSL::VERIFY_NONE
auth = @google.get("/accounts/ClientLogin?Email=#{@user}&Passwd=#{@pass}&service=orkut").body.split("\n")[2].gsub('Auth', 'auth')
 
@orkut = Net::HTTP.new 'www.orkut.com'
cookie_parts = @orkut.get("/RedirLogin.aspx?msg=0&#{auth}")['set-cookie'].split(';')
@cookie = "#{cookie_parts[0]};#{cookie_parts[3]};"
 
resp = @orkut.get('/Home.aspx', 'Cookie' => @cookie).body
 
File.open('resp.html', 'w') { |file| file << resp }



#115 Adicionando um texto qualquer que some ao clicar no campo

Postado por Marco Paris em 02 outubro 2010 - 00:48

Usando o código abaixo podemos adicionar um texto simples como "buscar..." dentro de um campo de busca que, ao clicar, o texto desaparecerá.

No exemplo abaixo o código funciona no campo de busca do tema. Mas você pode usar em qualquer outra campo substituindo o "#edit-search-theme-form-1" pelo id do campo desejado.

Crie um arquivo javascript, insira no arquivo seu_tema.info e digite no arquivo:

$(function(){

$('#edit-search-theme-form-1').attr('value','pesquisar...');
  $('#edit-search-theme-form-1').click(function(){
    $(this).attr('value','');
  });


});



#109 Busca aproximada

Postado por Marco Paris em 01 outubro 2010 - 23:40

Um código muito bom indicado pelo próprio fórum do iMasters chamado shift and aproximado.

Dado um texto T, um padrao P, e uma tolerancia a erros E, realiza a busca de uma substring do texto T que se aproxime do padrao P por um número de caracteres de diferença E.

Este algoritmo foi adaptado do Nivio Ziviani e pode ser encontrado no site: Algoritmos em C

O código foi publicado no iMasters pelo usuário "tigredonorte".

Vamos implementar a classe:


/*
* Class: PHPFile
* Autor: Thompson Moreira Filgueiras
* Contato: tigredonorte3@gmail.com
*/
class PHPFile
{
/*
* Função: ShiftAndAproximado
* Algoritmo original em C
* Créditos: Nivio ziviani
* Url: http://www2.dcc.ufmg.br/livros/algoritmos/cap8/codigo/c/8.1a8.6e8.8-pesquisacadeia.c
* Complexidade do algoritmo: O(n * E) onde n é o tamanho do texto e E o número de erros
*
* Parâmetros: $texto -> texto fonte, onde será feita a busca pelo padrao
* $Padrao -> string que será procurada no texto
* $num_erros -> Número de letras que pode estar errada ao fazer a busca.
* Caso numerros seje maior do que 10 por exemplo, a maioria das palavras irao casar
* Um valor recomendado é entre 0 e 2, o google faz casamentos de tamanho 1
*
* Resumo: Compara um Texto com uma string Padrao com uma tolerancia num_erros na busca.
* Cria uma máscara de bits onde marca a posição de cada ocorrência de uma letra no texto padrao
* Atravéz de operacoes logicas, shift, and e or compara onde ocorreu casamento de strings
*
* Mais Informações: Projeto de algoritmos e implementações em c e pascal, nívio zivianni
*
* Description: this function search in a $Text some string in argument $padrao. This $padrao can be
* different by text for some error parameter $num_errors. This is a implementation of shiftAndAproach algorithm
*/
public function ShiftAndAproximado($Texto, $Padrao, $num_erros = 1)
{
//recupera tamanho das strings
$n = strlen($Texto);
$m = strlen($Padrao);

//define o maior numero de erros e o maior tamanho da mascara
$MAXCHAR = 256;
$NUMMAXERROS = 10;

//inicializações
$Masc[$MAXCHAR];
$R[$NUMMAXERROS];

//zera a máscara de bits e marca nesta as posicoes onde apareceram determinados caracteres
for ($i = 0; $i < $MAXCHAR; $i++) $Masc[$i] = 0;
for ($i = 1; $i <= $m; $i++) {$Masc[ord($Padrao[$i-1]) + 127] |= 1 << ($m - $i);}

//inivializa r0 com o valor 0
$R[0] = 0;

//este valor será constante no resto do algoritmo
$Ri = 1 << ($m - 1);

//algoritmo propriamente dito
for ($j = 1; $j <= $num_erros; $j++) $R[$j] = (1 << ($m - $j)) | $R[$j-1];
for ($i = 0; $i < $n; $i++)
{
$Rant = $R[0];
$Rnovo = ((($Rant) >> 1) | $Ri) & $Masc[ord($Texto[$i]) + 127];
$R[0] = $Rnovo;
for ($j = 1; $j <= $num_erros; $j++)
{
$Rnovo = ((($R[$j]) >> 1) & $Masc[ord($Texto[$i]) + 127]) | $Rant | ((($Rant | $Rnovo)) >> 1);
$Rant = $R[$j];
$R[$j] = $Rnovo | $Ri;
}

//se o ultimo bit é 1, então houve casamento!
if (($Rnovo & 1) != 0)
{
echo(" Casamento na posicao ". ($i + 1) . "<br />");
}
}
}
}

$Texto = "abcdefghijkl Lorem a ipsun ahahahahavcdef abcd";
$Palavra = "abcda";

$phpfile_obj = new PHPFile();
$phpfile_obj->ShiftAndAproximado($Texto, $Padrao, 1);


A idéia de separar esta função em uma classe é complementá-la posteriormente, ao invés de imprimir a posição onde encontrou-se um casamento, podemos retornar esta posição e utilizá-la em algo mais útil do que simplesmente imprimir na tela.