summaryrefslogtreecommitdiff
path: root/lib/nola_plugins/bourosama_plugin.ex
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nola_plugins/bourosama_plugin.ex')
-rw-r--r--lib/nola_plugins/bourosama_plugin.ex58
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/nola_plugins/bourosama_plugin.ex b/lib/nola_plugins/bourosama_plugin.ex
new file mode 100644
index 0000000..dd05144
--- /dev/null
+++ b/lib/nola_plugins/bourosama_plugin.ex
@@ -0,0 +1,58 @@
+defmodule Nola.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__, [], name: __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
+ regopts = [plugin: __MODULE__]
+ {:ok, _} = Registry.register(IRC.PubSub, "trigger:cac40", regopts)
+ {:ok, _} = Registry.register(IRC.PubSub, "trigger:caca40", regopts)
+ {: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