Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,62 @@
|
|||
-module(rosseta_examples).
|
||||
-include_lib("xmerl/include/xmerl.hrl").
|
||||
|
||||
-export([main/0]).
|
||||
|
||||
main() ->
|
||||
application:start(inets),
|
||||
Titles = read_titles(empty),
|
||||
Result = lists:foldl(fun(Title,Acc) -> Acc + calculate_one(Title) end, 0, Titles),
|
||||
io:format("Total: ~p examples.\n",[Result]),
|
||||
application:stop(inets).
|
||||
|
||||
read_titles(CurrentContinue) ->
|
||||
URL0 = "http://rosettacode.org/mw/api.php?" ++
|
||||
"action=query&list=categorymembers&cmtitle=Category:Programming_Tasks" ++
|
||||
"&cmlimit=500&format=xml",
|
||||
URL =
|
||||
case CurrentContinue of
|
||||
empty -> URL0;
|
||||
_ -> URL0 ++ "&cmcontinue=" ++ CurrentContinue
|
||||
end,
|
||||
{ok,Answer} = httpc:request(URL),
|
||||
{Document,_} = xmerl_scan:string(lists:last(tuple_to_list(Answer))),
|
||||
Continue =
|
||||
[Value || #xmlAttribute{value = Value} <- xmerl_xpath:string("//@cmcontinue", Document)],
|
||||
Titles =
|
||||
[Value || #xmlAttribute{value = Value} <- xmerl_xpath:string("//@title", Document)],
|
||||
case Continue of
|
||||
[]->
|
||||
Titles;
|
||||
[ContValue | _] ->
|
||||
Titles ++ read_titles(ContValue)
|
||||
end.
|
||||
|
||||
calculate_one(Title0) ->
|
||||
Title = replace_chars(Title0),
|
||||
URL = "http://www.rosettacode.org/w/index.php?title=" ++
|
||||
Title ++ "&action=raw",
|
||||
case httpc:request(URL) of
|
||||
{ok,Result} ->
|
||||
{match,Found} =
|
||||
re:run(lists:last(tuple_to_list(Result)), "\n=={{header(|)", [global]),
|
||||
io:format("~ts: ~p examples.\n",[Title0,length(Found)]),
|
||||
length(Found);
|
||||
{error,socket_closed_remotely} ->
|
||||
io:format("Socket closed remotely. Retry.\n"),
|
||||
calculate_one(Title0)
|
||||
end.
|
||||
|
||||
replace_chars(String) ->
|
||||
replace_chars(String,[]).
|
||||
|
||||
replace_chars([$ | T],Acc) ->
|
||||
replace_chars(T, [$_| Acc]);
|
||||
replace_chars([$+| T],Acc) ->
|
||||
replace_chars(T, lists:reverse("%2B") ++ Acc);
|
||||
replace_chars([8211| T],Acc) ->
|
||||
replace_chars(T, lists:reverse("%E2%80%93") ++ Acc);
|
||||
replace_chars([Other| T],Acc) ->
|
||||
replace_chars(T, [Other| Acc]);
|
||||
replace_chars([],Acc) ->
|
||||
lists:reverse(Acc).
|
||||
Loading…
Add table
Add a link
Reference in a new issue