Current section

Files

Jump to
scrapbook src scrapbook@page.erl
Raw

src/scrapbook@page.erl

-module(scrapbook@page).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([get_event_collection/1, construct_event_items_requests/2, scrape_event_items_responses/1, construct_event_collection_request_from_url/2, construct_past_event_collection_request_from_name/2, construct_upcoming_event_collection_request_from_name/2, scrape_event_collection_response/1]).
-export_type([page_event_item/0, page_event_collection/0]).
-type page_event_item() :: {page_event_item, binary(), binary(), boolean()}.
-type page_event_collection() :: {page_event_collection,
binary(),
integer(),
list(page_event_item())}.
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 97).
-spec event_item_decoder() -> gleam@dynamic@decode:decoder(page_event_item()).
event_item_decoder() ->
gleam@dynamic@decode:field(
<<"id"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Id) ->
gleam@dynamic@decode:field(
<<"name"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Name) ->
gleam@dynamic@decode:field(
<<"is_canceled"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_bool/1},
fun(Canceled) ->
gleam@dynamic@decode:success(
{page_event_item, Id, Name, Canceled}
)
end
)
end
)
end
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 105).
-spec event_items_decoder() -> gleam@dynamic@decode:decoder(list(page_event_item())).
event_items_decoder() ->
gleam@dynamic@decode:list(
gleam@dynamic@decode:at(
[<<"node"/utf8>>, <<"node"/utf8>>],
event_item_decoder()
)
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 110).
-spec get_event_collection(binary()) -> {ok, page_event_collection()} |
{error, list(scrapbook@error:property_error())}.
get_event_collection(Html) ->
Decoder = (gleam@dynamic@decode:field(
<<"name"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_string/1},
fun(Name) ->
gleam@dynamic@decode:then(
gleam@dynamic@decode:at(
[<<"items"/utf8>>, <<"count"/utf8>>],
{decoder, fun gleam@dynamic@decode:decode_int/1}
),
fun(Count) ->
gleam@dynamic@decode:then(
gleam@dynamic@decode:at(
[<<"pageItems"/utf8>>, <<"edges"/utf8>>],
event_items_decoder()
),
fun(Items) ->
gleam@dynamic@decode:success(
{page_event_collection, Name, Count, Items}
)
end
)
end
)
end
)),
scrapbook@internal@html:get_property(
Html,
<<"collection"/utf8>>,
Decoder,
fun(_) -> true end
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 127).
-spec do_construct_event_items_requests(
list(page_event_item()),
binary(),
list(gleam@http@request:request(binary()))
) -> {ok, list(gleam@http@request:request(binary()))} |
{error, scrapbook@error:scrape_error()}.
do_construct_event_items_requests(Items, User_agent, Reqs) ->
case Items of
[] ->
{ok, Reqs};
[First | Rest] ->
gleam@result:'try'(
scrapbook@event:construct_event_request_from_id(
erlang:element(2, First),
User_agent
),
fun(Event_request) ->
do_construct_event_items_requests(
Rest,
User_agent,
[Event_request | Reqs]
)
end
)
end.
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 148).
-spec construct_event_items_requests(list(page_event_item()), binary()) -> {ok,
list(gleam@http@request:request(binary()))} |
{error, scrapbook@error:scrape_error()}.
construct_event_items_requests(Items, User_agent) ->
do_construct_event_items_requests(Items, User_agent, []).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 155).
-spec do_scrape_event_items_responses(
list(gleam@http@response:response(binary())),
list(scrapbook@event:event_data())
) -> {ok, list(scrapbook@event:event_data())} |
{error, scrapbook@error:scrape_error()}.
do_scrape_event_items_responses(Resps, Events) ->
case Resps of
[] ->
{ok, Events};
[First | Rest] ->
gleam@result:'try'(
scrapbook@event:scrape_event_response(First),
fun(Event) ->
do_scrape_event_items_responses(Rest, [Event | Events])
end
)
end.
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 170).
-spec scrape_event_items_responses(list(gleam@http@response:response(binary()))) -> {ok,
list(scrapbook@event:event_data())} |
{error, scrapbook@error:scrape_error()}.
scrape_event_items_responses(Resps) ->
do_scrape_event_items_responses(Resps, []).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 177).
-spec construct_event_collection_request_from_url(binary(), binary()) -> {ok,
gleam@http@request:request(binary())} |
{error, scrapbook@error:scrape_error()}.
construct_event_collection_request_from_url(Url, User_agent) ->
gleam@result:'try'(
gleam@result:replace_error(
scrapbook@internal@page@url:format_url(Url),
url_error
),
fun(Url@1) ->
case scrapbook@internal@http:construct_request(Url@1, User_agent) of
{ok, Req} ->
{ok, Req};
{error, Err} ->
{error, {request_error, Err}}
end
end
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 193).
-spec construct_past_event_collection_request_from_name(binary(), binary()) -> {ok,
gleam@http@request:request(binary())} |
{error, scrapbook@error:scrape_error()}.
construct_past_event_collection_request_from_name(Name, User_agent) ->
gleam@result:'try'(
gleam@result:replace_error(
scrapbook@internal@page@url:name_to_past_url(Name),
url_error
),
fun(Url) ->
case scrapbook@internal@http:construct_request(Url, User_agent) of
{ok, Req} ->
{ok, Req};
{error, Err} ->
{error, {request_error, Err}}
end
end
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 209).
-spec construct_upcoming_event_collection_request_from_name(binary(), binary()) -> {ok,
gleam@http@request:request(binary())} |
{error, scrapbook@error:scrape_error()}.
construct_upcoming_event_collection_request_from_name(Name, User_agent) ->
gleam@result:'try'(
gleam@result:replace_error(
scrapbook@internal@page@url:name_to_upcoming_url(Name),
url_error
),
fun(Url) ->
case scrapbook@internal@http:construct_request(Url, User_agent) of
{ok, Req} ->
{ok, Req};
{error, Err} ->
{error, {request_error, Err}}
end
end
).
-file("/home/norbert/projects/scrapbook/src/scrapbook/page.gleam", 225).
-spec scrape_event_collection_response(gleam@http@response:response(binary())) -> {ok,
page_event_collection()} |
{error, scrapbook@error:scrape_error()}.
scrape_event_collection_response(Resp) ->
case get_event_collection(erlang:element(4, Resp)) of
{ok, Event} ->
{ok, Event};
{error, Err} ->
{error, {property_error, Err}}
end.