Primeiro de tudo você vai precisar da biblioteca Synapse. O legal é que ela não é um componente pra se instalar, então não precisa reconstruir (rebuild) seu Lazarus.
Muitos sites e blogs oferecem uma cópia da biblioteca synapse hospedada no proprio site, sem indicar ou colocar o link para o site original do autor.
O site do outor do synapse é esse:
http://www.ararat.cz/synapse/doku.php
Lá você pode baixar a biblioteca original e atualizada dando créditos ao seu autor.
De posse dela, você vai precisar criar um método POST, já que a classe de HTTP da biblioteca não fornece um, mas fornece os meios para que você faça isso. (ela tem get, mas não post, então você terá de fazer o post no dedo, mas é facil).
Coloque dois edits, dois memos e um botão em uma form.
function TForm1.HttpPostURL(const URL, URLData: string; const Data: TStream): Boolean;
var
HTTP: THTTPSend;
begin
HTTP := THTTPSend.Create;
try
//para autenticação http simples, usuario
HTTP.UserName := txtLogin.Text;
//senha
HTTP.Password := txtPassword.Text;
//mando escrever os dados do tweet no documento
//Pointer(URLData)^ é o conteúdo (pelo menos o primeiro caracter) para onde o ponteiro da string aponta (toda string no lazarus é um ponteiro, igual no Delphi)
HTTP.Document.Write(Pointer(URLData)^, Length(URLData));
//digo o mimetype
HTTP.MimeType := 'application/x-www-form-urlencoded';
//mando executar o método post com os dados que eu já setei
Result := HTTP.HTTPMethod('POST', URL);
//vou para o começo do documento (o documento é um stream)
HTTP.Document.Seek(0,soFromBeginning);
//copio para a stream de saida que veio no parametro desse médtodo (já deve estar criada)
Data.CopyFrom(HTTP.Document, HTTP.Document.Size);
finally
//não esqueça: cuidado com os memory leaks
HTTP.Free;
end;
end;
procedure TForm1.btSendClick(Sender: TObject);
var
host: string;
st: TMemoryStream;
begin
//url da atualização de status no twitter. Optei por xml porque xml é mais fácil no lazarus, mas também pode ser usado json.
//tenho medo de json.... deve ser por causa da máscara e da motoserra. :P
host := 'http://api.twitter.com/1/statuses/update.xml';
try
//cria a memory stream
st:=TMemoryStream.Create;
//no post, você tem que ter uma variavel=um valor. Na api do twitter, para atualização de status,
//mtweet é o memo do status
HTTPpostURL(host, 'status=' + mTweet.Text, st);
//posiciono o stream de resultado (xml q o twitter me retorna) no inicio
st.Seek(0,soFromBeginning);
//mostro no outro memo
Memo1.Lines.LoadFromStream(st);
finally
st.Free;
end;
end;
Excelente postagem Vitor, valeu :)
ResponderExcluirSilvio Clécio
Valew ^^
ResponderExcluirFiz um também de consulta de CEP com lazarus + synapse, dá uma olhada. Essa é a parte 3 http://vitorrubio.blogspot.com/2010/08/busca-de-cep-com-o-lazarus-parte-3-xml.html
Muito bom! com base nessa dica consegui fazer um client bem simples para web services com kbmMW, valew!
ResponderExcluirsucesso!
JB
Obrigado pelo feedback, JB, mas creio que o método que usei para postar no titter não funcione mais agora. Terei que escrever outro artigo usando o novo método de autenticação.
ResponderExcluir