June 14, 2009 | In: Ruby
Acessando o Twitter via Interactive Ruby Shell (irb)
Estava procurando por uma solução simples em Ruby para fazer o update de mensagens via irb.
Achei as seguintes opções de classes Ruby:
- Twitter -> John Nunemaker ( essa é a mais completa )
- Twittery – uma classe bem simplista que faz upload de fotos pela TwitPic’s API. Esse projeto é administrado por Chris Ledet
Eu tomei como base para aprendizado, a classe do projeto Twittery, pois queria uma solução rápida e simples. Apesar dela não ter a segurança do protocolo de autenticação oAuth que já consta no projeto de John Nuremaker.
A idéia foi a seguinte: colocar o código Ruby para ser pré-carregado no arquivo .irbrc toda vez que o irb for acionado via shell.
Depois de vários teste o código final você pode ver abaixo:
# twitting by irb
require 'net/http'
class Object
def twitter_config(username, password)
@username = username
@password = password
end
# the message must be between 1 and 160 characters
def twitter(status = nil, format = 'json')
if status.empty? or status.length > 160
puts "twitter 'message with spaces' (IRB)"
puts "Obs. (The message must been less than 160 characters and cannot be empty)"
else
api_url = 'http://twitter.com/statuses/update.' + format
url = URI.parse(api_url)
req = Net::HTTP::Post.new(url.path)
req.basic_auth(@username, @password)
req.set_form_data({ 'status'=> status }, ';')
res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
puts res
end
end
alias :twit :twitter
end
twitter_config('username', 'password')
Os dados de usário e senha já são pré-carregados na inicialização do irb. A vantagem é que esses dados ficam ocultos no arquivo .irbrc, dando um pouquinho de privacidade, caso tenha alguém do lado.
Para “twittar” é só usar o seguinte comando, a qualquer momento, dentro do irb:
irb> twitter "mensagem via irb" ou ainda irb> twit "outra mensagem via irb"
Obs.: Esse exemplo usa a forma de autenticação mais simples, via HTTP. O twitter está em processo de mudança da autenticação para usar oAuth. A tendência é que a autenticação básica via HTTP deixe de ser usada, mas isso ainda vai demorar um pouco. Enquanto isso não acontece, vou continuar “twittando” por esse script via irb.
![]()
Fico por aqui.
Até a próxima.
3 Responses to Acessando o Twitter via Interactive Ruby Shell (irb)
Mauricio
July 3rd, 2009 at 12:01 am
Ao invés de colocar os métodos dentro da classe Object, é melhor definir eles fora da classe… pq dessa forma, vc permite coisas malucas tipo
“”.twit “Uma Mensagem”
1.twit “Outra mensagem”
Valério Farias
July 3rd, 2009 at 11:36 am
Beleza Maurício, Valeu pela dica! Vou testar aqui.
Valério Farias
July 3rd, 2009 at 1:08 pm
Mauricio. Eu fiz os testes aqui e detectei que tanto faz o meu jeito ou o seu.
)
O resultado é o mesmo. (se você tiver outro exemplo de código pode mandar
Digite os seguintes comandos no irb:
# Object.class.superclass # => Module
# Object.class.superclass.superclass # => Object -> Topo da hierarquia
Já deu pra perceber que a hierarquia de classes no ruby segue o padrão:
Object -> Module -> Class
Isso indica que tudo herda a configuração da classe Object.
Se você digita self.class no irb aparece:
Isso quer dizer que tanto faz eu digitar no irb somente os métodos:
Ou incluir o método literalmente na classe object:
Nos dois exemplos acima o método say estará incluído na classe Object e qualquer outra classe herdará esse método, já que tudo herda de Object.
O Problema do meu exemplo inicial é que o método twitter_config utiliza variáveis de instância e eu inicializo no arquivo .irbrc como uma instância da classe Object
twitter_config('username', 'password')Para usar 1.twit como você sugere, no meu exemplo eu tenho que iniciar uma instância da classe inteiro:
1.twitter_config('username', 'password')Mas tenho outra sugestão para deixar o código do jeito que você quer. É só mudar as variáveis de instância para variáveis de classe. Pois, apesar dos valores do usuário e senha serem armazenados inicialmente na classe Object, qualquer instância de qualquer classe poderá ter acesso a esses valores: string, integer, etc.
O código final utilizando variáveis de classe é o seguinte
def twitter_config(username, password) @@username = username @@password = password endNo método twitter é só modificar a linha 19 para:
Agora é só brincar!
Mauricio, pode enviar mais sugestões. Só aprendi tudo isso hoje graças ao seu exemplo. O propósito aqui é experimentar, trocar idéias e aprender cada vez mais em conjunto.
Um grande abraço.