Current section
Files
Jump to
Current section
Files
src/scrapbook@page.erl
-module(scrapbook@page).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([get_event_collection/1, scrape_event_collection_from_url/1, scrape_past_event_collection_from_name/1, scrape_upcoming_event_collection_from_name/1, scrape_events_from_url/1, scrape_past_events_from_name/1, scrape_upcoming_events_from_name/1]).
-export_type([page_event_item/0, page_event_collection/0]).
-opaque page_event_item() :: {page_event_item, binary(), binary(), boolean()}.
-opaque page_event_collection() :: {page_event_collection,
binary(),
integer(),
list(page_event_item())}.
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 17).
-spec event_item_decoder() -> decode@zero:decoder(page_event_item()).
event_item_decoder() ->
decode@zero:field(
<<"id"/utf8>>,
{decoder, fun decode@zero:decode_string/1},
fun(Id) ->
decode@zero:field(
<<"name"/utf8>>,
{decoder, fun decode@zero:decode_string/1},
fun(Name) ->
decode@zero:field(
<<"is_canceled"/utf8>>,
{decoder, fun decode@zero:decode_bool/1},
fun(Canceled) ->
decode@zero:success(
{page_event_item, Id, Name, Canceled}
)
end
)
end
)
end
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 25).
-spec event_items_decoder() -> decode@zero:decoder(list(page_event_item())).
event_items_decoder() ->
decode@zero:list(
decode@zero:at([<<"node"/utf8>>, <<"node"/utf8>>], event_item_decoder())
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 30).
-spec get_event_collection(binary()) -> {ok, page_event_collection()} |
{error, list(scrapbook@error:property_error())}.
get_event_collection(Html) ->
Decoder = (decode@zero:field(
<<"name"/utf8>>,
{decoder, fun decode@zero:decode_string/1},
fun(Name) ->
decode@zero:then(
decode@zero:at(
[<<"items"/utf8>>, <<"count"/utf8>>],
{decoder, fun decode@zero:decode_int/1}
),
fun(Count) ->
decode@zero:then(
decode@zero:at(
[<<"pageItems"/utf8>>, <<"edges"/utf8>>],
event_items_decoder()
),
fun(Items) ->
decode@zero:success(
{page_event_collection, Name, Count, Items}
)
end
)
end
)
end
)),
scrapbook@internal@html:get_property(
Html,
<<"collection"/utf8>>,
fun(_capture) -> decode@zero:run(_capture, Decoder) end,
fun(_) -> true end
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 47).
-spec do_scrape_event_items(
list(page_event_item()),
list(scrapbook@event:event_data())
) -> {ok, list(scrapbook@event:event_data())} |
{error, scrapbook@error:scrape_error()}.
do_scrape_event_items(Items, Events) ->
case Items of
[] ->
{ok, Events};
[First | Rest] ->
gleam@result:'try'(
scrapbook@event:scrape_from_id(erlang:element(2, First)),
fun(Event) -> do_scrape_event_items(Rest, [Event | Events]) end
)
end.
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 60).
-spec scrape_event_items(list(page_event_item())) -> {ok,
list(scrapbook@event:event_data())} |
{error, scrapbook@error:scrape_error()}.
scrape_event_items(Items) ->
do_scrape_event_items(Items, []).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 66).
-spec scrape_events(binary()) -> {ok, list(scrapbook@event:event_data())} |
{error, scrapbook@error:scrape_error()}.
scrape_events(Url) ->
case scrapbook@internal@http:fetch(Url) of
{ok, Html} ->
gleam@result:'try'(case get_event_collection(Html) of
{ok, Event_collection} ->
{ok, Event_collection};
{error, Err} ->
{error, {property_error, Err}}
end, fun(Event_collection@1) ->
scrape_event_items(erlang:element(4, Event_collection@1))
end);
{error, Err@1} ->
{error, {fetch_error, Err@1}}
end.
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 81).
-spec scrape_event_collection(binary()) -> {ok, page_event_collection()} |
{error, scrapbook@error:scrape_error()}.
scrape_event_collection(Url) ->
case scrapbook@internal@http:fetch(Url) of
{ok, Html} ->
case get_event_collection(Html) of
{ok, Event} ->
{ok, Event};
{error, Err} ->
{error, {property_error, Err}}
end;
{error, Err@1} ->
{error, {fetch_error, Err@1}}
end.
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 95).
-spec scrape_event_collection_from_url(binary()) -> {ok,
page_event_collection()} |
{error, scrapbook@error:scrape_error()}.
scrape_event_collection_from_url(Url) ->
gleam@result:'try'(
gleam@result:replace_error(
scrapbook@internal@page@url:format_url(Url),
url_error
),
fun(Url@1) -> scrape_event_collection(Url@1) end
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 106).
-spec scrape_past_event_collection_from_name(binary()) -> {ok,
page_event_collection()} |
{error, scrapbook@error:scrape_error()}.
scrape_past_event_collection_from_name(Name) ->
gleam@result:'try'(
gleam@result:replace_error(
scrapbook@internal@page@url:name_to_past_url(Name),
url_error
),
fun(Url) -> scrape_event_collection(Url) end
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 115).
-spec scrape_upcoming_event_collection_from_name(binary()) -> {ok,
page_event_collection()} |
{error, scrapbook@error:scrape_error()}.
scrape_upcoming_event_collection_from_name(Name) ->
gleam@result:'try'(
gleam@result:replace_error(
scrapbook@internal@page@url:name_to_upcoming_url(Name),
url_error
),
fun(Url) -> scrape_event_collection(Url) end
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 125).
-spec scrape_events_from_url(binary()) -> {ok,
list(scrapbook@event:event_data())} |
{error, scrapbook@error:scrape_error()}.
scrape_events_from_url(Url) ->
gleam@result:'try'(
gleam@result:replace_error(
scrapbook@internal@page@url:format_url(Url),
url_error
),
fun(Url@1) -> scrape_events(Url@1) end
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 135).
-spec scrape_past_events_from_name(binary()) -> {ok,
list(scrapbook@event:event_data())} |
{error, scrapbook@error:scrape_error()}.
scrape_past_events_from_name(Name) ->
gleam@result:'try'(
gleam@result:replace_error(
scrapbook@internal@page@url:name_to_past_url(Name),
url_error
),
fun(Url) -> scrape_events(Url) end
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 145).
-spec scrape_upcoming_events_from_name(binary()) -> {ok,
list(scrapbook@event:event_data())} |
{error, scrapbook@error:scrape_error()}.
scrape_upcoming_events_from_name(Name) ->
gleam@result:'try'(
gleam@result:replace_error(
scrapbook@internal@page@url:name_to_upcoming_url(Name),
url_error
),
fun(Url) -> scrape_events(Url) end
).