Erlangでpublic_timelineを取得

30分プログラム、その570。Erlangでpublic_timelineを取得してみる。
前にHTTPでGETXML解析をやったので、それを組合せてTwitterpublic_timelineを取得してみた。
あとはBASIC認証さえできれば、立派なTwitterライブラリになると思う。

使い方

% public_timelineをXMLで取得
1>X = twitter:public_timeline().
{xmlElement,statuses,statuses,[],
            {xmlNamespace,[],[]},
            [],1,
            [{xmlAttribute,type,[],[],[],[],1,[],"array",false}],
....

% //textだけを表示してみる
2> twitter:show_text(Xml).
first time on twitter lets see how this goes
What in the world am doing waking um soo earlyyyy? =/ achgrr
.....

ソースコード

-module(twitter).
-include_lib("/opt/local/lib/erlang/lib/xmerl-1.1.10/include/xmerl.hrl").
-compile([export_all]).

% http://twitter.com/statuses/public_timeline.xml
call(Api) ->
    Url = io_lib:format("http://twitter.com/~s.xml",[Api]),
    {ok,{{_Version,200, _Reason},_Header,Body}} = http:request(Url),
    Body.

public_timeline() ->
    Text = call("statuses/public_timeline"),
    {Xml,_} = xmerl_scan:string(Text),
    Xml.

text_only(Xs) ->
    lists:flatmap(fun(X) -> case X of
				#xmlText{value=Text} ->
				    Text;
				_ ->
				    []
			    end
		  end,Xs).

show_text(Xml) ->
    lists:foreach(
      fun(Item)->
	      case Item of
		  #xmlElement{content=Text} ->
		      io:format("~s~n",[text_only(Text)]);
		  _ ->
		      io:format("~p~n",[Item])
	      end
      end,
      xmerl_xpath:string("//text",Xml)).

start() ->
    inets:start().