diff options
Diffstat (limited to '')
-rw-r--r-- | lib/lsg_irc/bourosama_plugin.ex | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/lib/lsg_irc/bourosama_plugin.ex b/lib/lsg_irc/bourosama_plugin.ex new file mode 100644 index 0000000..7dde662 --- /dev/null +++ b/lib/lsg_irc/bourosama_plugin.ex @@ -0,0 +1,57 @@ +defmodule LSG.IRC.BoursoramaPlugin do + + def irc_doc() do + """ + # bourses + + Un peu comme [finance](#finance), mais en un peu mieux, et un peu moins bien. + + Source: [boursorama.com](https://boursorama.com) + + * **!caca40** affiche l'état du cac40 + """ + end + + def start_link() do + GenServer.start_link(__MODULE__, []) + end + + @cac40_url "https://www.boursorama.com/bourse/actions/palmares/france/?france_filter%5Bmarket%5D=1rPCAC&france_filter%5Bsector%5D=&france_filter%5Bvariation%5D=50002&france_filter%5Bperiod%5D=1&france_filter%5Bfilter%5D=" + + def init(_) do + {:ok, _} = Registry.register(IRC.PubSub, "trigger:cac40", []) + {:ok, _} = Registry.register(IRC.PubSub, "trigger:caca40", []) + {:ok, nil} + end + + def handle_info({:irc, :trigger, cac, m = %IRC.Message{trigger: %IRC.Trigger{type: :bang}}}, state) when cac in ["cac40", "caca40"] do + case HTTPoison.get(@cac40_url, [], []) do + {:ok, %HTTPoison.Response{status_code: 200, body: body}} -> + html = Floki.parse(body) + board = Floki.find(body, "div.c-tradingboard") + + cac40 = Floki.find(board, ".c-tradingboard__main > .c-tradingboard__infos") + instrument = Floki.find(cac40, ".c-instrument") + last = Floki.find(instrument, "span[data-ist-last]") + |> Floki.text() + |> String.replace(" ", "") + variation = Floki.find(instrument, "span[data-ist-variation]") + |> Floki.text() + + sign = case variation do + "-"<>_ -> "▼" + "+" -> "▲" + _ -> "" + end + + m.replyfun.("caca40: #{sign} #{variation} #{last}") + + {:error, %HTTPoison.Response{status_code: code}} -> + m.replyfun.("caca40: erreur http #{code}") + + _ -> + m.replyfun.("caca40: erreur http") + end + end + +end |