quarta-feira, 15 de julho de 2009

Twitter API via Oracle PL/SQL

Há alguns dias tive a idéia de usar algumas API's de redes sociais como Twitter e Facebook para gerar algum tipo de relatório estatístico e me parece que as API's não fornecem dados suficientes para isso. Ainda não desisti, mantenho vocês informados.

Continuei estudando um pouco mais sobre o assunto e achei um artigo interessante onde um cara que usa a API do Twitter via Oracle PL/SQL para recuperar o timeline dos seus amigos.

Uso PL/SQL há muito tempo e sempre que isso acontece, acabamos criando uma certa relação afetiva com a linguagem :-p Você que já programou sabe como é isso.

O arquivo XML recuperado contém os 20 updates mais recentes nas últimas 24 horas para o usuário autenticado e seus contatos no Twitter:

create or replace
FUNCTION get_twitter_timeline(t_user IN VARCHAR2,   t_pass IN VARCHAR2)
RETURN XMLTYPE
IS
http_req utl_http.req;
http_resp utl_http.resp;
t_update_send VARCHAR2(200);
res_value VARCHAR2(4000);
XML_RETURN CLOB;
BEGIN
t_update_send := '--head';
--utl_http.set_proxy('http://www-yourproxy.com:80'); --If you need to specify a proxy use this.
http_req := utl_http.begin_request('http://twitter.com/statuses/friends_timeline.xml',   'POST',   utl_http.http_version_1_1);
utl_http.set_response_error_check(TRUE);
utl_http.set_detailed_excp_support(TRUE);
utl_http.set_body_charset(http_req,   'UTF-8');
utl_http.set_header(http_req,   'User-Agent',   'Mozilla/4.0');
utl_http.set_header(http_req,   'Content-Type',   'application/x-www-form-urlencoded');
utl_http.set_header(http_req,   'Content-Length',   to_char(LENGTH(t_update_send)));
utl_http.set_transfer_timeout(to_char('60'));
utl_http.set_authentication(http_req,   t_user,   t_pass,   'Basic');
utl_http.write_text(http_req,   t_update_send);
http_resp := utl_http.get_response(http_req);
BEGIN
WHILE 1 = 1
LOOP
utl_http.read_line(http_resp,   res_value,   TRUE);
XML_RETURN := XML_RETURN || res_value;
END LOOP;
EXCEPTION
WHEN utl_http.end_of_body THEN
NULL;
END;
utl_http.end_response(http_resp);
return XMLTYPE(XML_RETURN);
EXCEPTION
WHEN others THEN
XML_RETURN := sqlerrm;
RAISE;
END get_twitter_timeline;
Via [ApexToday]