Erlangで2ch用のモジュールを作りたい
出来そうな所だけつくってgithubにあげました。 (https://github.com/ymzkey/2ch_module_elr)
書き込みはどうやったらよいかよくわからないのでいまのところはdatの取得、利用しやすく整形が出来るようにしたい、というような感じ。
現在出来るのはsubject.txtの取得、datの取得ローカルにあるdatの読み込み、datをタプルに収納、など。
データの形式は以下の様な感じ、
Server = {Domain,[Board1,Board2...]}
Board = {Name,Subjects,[Thread1,Thread2...]}
Subjects = [Subject1,Subject2...]
Subject = {Title,DatNo,Post}
Thread = {Tilte,Posts}
Posts = [Post1,Post2,....]
Post = {Index,Name,Mail,Date,Id,Body}
一応サーバーもデータの形式としてかんがえてあるけれど実際はBorad以下しか使わない気がする。
最終的にはコレをつかって、
http://localthost/yuzuru/news4vip/subject.xml
http://localthost/yuzuru/news4vip/12344353.xml
とかするとdatとかをxmlに整形して出力するサーバーがつくりたい。
-module(cherl). -compile(export_all). start() -> inets:start(). getSubjectTxt(ServerName,BoardName) -> Url = string:join(["http://",ServerName,".2ch.net/",BoardName,"/","subject.txt"],""), {ok,{{_Version,200, _Reason},_Header,Body}} = httpc:request(Url), Body. getDat(ServerName,BoardName,DatName) -> Url = string:join(["http://",ServerName,".2ch.net/",BoardName,"/dat/",DatName],""), {ok,{{_Version,200, _Reason},_Header,Body}} = httpc:request(Url), Body. loadDat(FilePath) -> {ok, Binary} = file:read_file(FilePath), binary_to_list(Binary). loadSubjectTxt(FilePath) -> {ok, Binary} = file:read_file(FilePath), binary_to_list(Binary). datToThread(Dat) -> [Post|Rest] = re:split(Dat,"\n",[{return,list}]), [Name,Mail,DateId,Body,Title] = re:split(Post,"<>",[{return,list}]), [Date,Id] = re:split(DateId,"ID:",[{return,list}]), {Title,[{1,Name,Mail,Date,Id,Body}] ++ datToThread(2,Rest)}. datToThread(_,[[]]) -> []; datToThread(Index,Posts) -> [Post|Rest] = Posts, [Name,Mail,DateId,Body,_] = re:split(Post,"<>",[{return,list}]), [Date,Id] = re:split(DateId,"ID:",[{return,list}]), [{Index,Name,Mail,Date,Id,Body}] ++ datToThread(Index+1,Rest).