From f7c3692fcef963eba97231d504f156e03dbf746a Mon Sep 17 00:00:00 2001 From: Vegard Matthey Date: Sun, 21 Sep 2025 14:58:50 +0200 Subject: [PATCH] init steam api lib --- steam_api/.formatter.exs | 4 ++++ steam_api/.gitignore | 23 +++++++++++++++++++++++ steam_api/README.md | 13 +++++++++++++ steam_api/lib/steam_api.ex | 11 +++++++++++ steam_api/mix.exs | 28 ++++++++++++++++++++++++++++ steam_api/mix.lock | 11 +++++++++++ steam_api/test/steam_api_test.exs | 8 ++++++++ steam_api/test/test_helper.exs | 1 + 8 files changed, 99 insertions(+) create mode 100644 steam_api/.formatter.exs create mode 100644 steam_api/.gitignore create mode 100644 steam_api/README.md create mode 100644 steam_api/lib/steam_api.ex create mode 100644 steam_api/mix.exs create mode 100644 steam_api/mix.lock create mode 100644 steam_api/test/steam_api_test.exs create mode 100644 steam_api/test/test_helper.exs diff --git a/steam_api/.formatter.exs b/steam_api/.formatter.exs new file mode 100644 index 0000000..d2cda26 --- /dev/null +++ b/steam_api/.formatter.exs @@ -0,0 +1,4 @@ +# Used by "mix format" +[ + inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] +] diff --git a/steam_api/.gitignore b/steam_api/.gitignore new file mode 100644 index 0000000..ebdcb9b --- /dev/null +++ b/steam_api/.gitignore @@ -0,0 +1,23 @@ +# The directory Mix will write compiled artifacts to. +/_build/ + +# If you run "mix test --cover", coverage assets end up here. +/cover/ + +# The directory Mix downloads your dependencies sources to. +/deps/ + +# Where third-party dependencies like ExDoc output generated docs. +/doc/ + +# If the VM crashes, it generates a dump, let's ignore it too. +erl_crash.dump + +# Also ignore archive artifacts (built via "mix archive.build"). +*.ez + +# Ignore package tarball (built via "mix hex.build"). +steam_api-*.tar + +# Temporary files, for example, from tests. +/tmp/ diff --git a/steam_api/README.md b/steam_api/README.md new file mode 100644 index 0000000..16eafec --- /dev/null +++ b/steam_api/README.md @@ -0,0 +1,13 @@ +# SteamApi + +**A library to get the relevant information from the steam api** + +## Adding the library as a dependency + +```elixir +def deps do + [ + {:steam_api, path: "../steam_api"} + ] +end +``` diff --git a/steam_api/lib/steam_api.ex b/steam_api/lib/steam_api.ex new file mode 100644 index 0000000..b4a4156 --- /dev/null +++ b/steam_api/lib/steam_api.ex @@ -0,0 +1,11 @@ +defmodule SteamApi do + @moduledoc """ + Documentation for `SteamApi`. + """ + + def get_games(steam_id) do + # TODO: Add case statement to check for nil + steam_api_key = System.get_env("STEAM_API_KEY") + Req.get!("http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=#{steam_api_key}&steamid=#{steam_id}&format=json").body["response"]["games"] + end +end diff --git a/steam_api/mix.exs b/steam_api/mix.exs new file mode 100644 index 0000000..fed903f --- /dev/null +++ b/steam_api/mix.exs @@ -0,0 +1,28 @@ +defmodule SteamApi.MixProject do + use Mix.Project + + Application.ensure_started(:telemetry) + + def project do + [ + app: :steam_api, + version: "0.1.0", + elixir: "~> 1.18", + start_permanent: Mix.env() == :prod, + deps: deps() + ] + end + + # Run "mix help compile.app" to learn about applications. + def application do + [ + extra_applications: [:logger] + ] + end + + defp deps do + [ + {:req, "~> 0.5.15"} + ] + end +end diff --git a/steam_api/mix.lock b/steam_api/mix.lock new file mode 100644 index 0000000..78496f2 --- /dev/null +++ b/steam_api/mix.lock @@ -0,0 +1,11 @@ +%{ + "finch": {:hex, :finch, "0.20.0", "5330aefb6b010f424dcbbc4615d914e9e3deae40095e73ab0c1bb0968933cadf", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2658131a74d051aabfcba936093c903b8e89da9a1b63e430bee62045fa9b2ee2"}, + "hpax": {:hex, :hpax, "1.0.3", "ed67ef51ad4df91e75cc6a1494f851850c0bd98ebc0be6e81b026e765ee535aa", [:mix], [], "hexpm", "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"}, + "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, + "mime": {:hex, :mime, "2.0.7", "b8d739037be7cd402aee1ba0306edfdef982687ee7e9859bee6198c1e7e2f128", [:mix], [], "hexpm", "6171188e399ee16023ffc5b76ce445eb6d9672e2e241d2df6050f3c771e80ccd"}, + "mint": {:hex, :mint, "1.7.1", "113fdb2b2f3b59e47c7955971854641c61f378549d73e829e1768de90fc1abf1", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1 or ~> 0.2.0 or ~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "fceba0a4d0f24301ddee3024ae116df1c3f4bb7a563a731f45fdfeb9d39a231b"}, + "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, + "nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"}, + "req": {:hex, :req, "0.5.15", "662020efb6ea60b9f0e0fac9be88cd7558b53fe51155a2d9899de594f9906ba9", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 2.0.6 or ~> 2.1", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "a6513a35fad65467893ced9785457e91693352c70b58bbc045b47e5eb2ef0c53"}, + "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, +} diff --git a/steam_api/test/steam_api_test.exs b/steam_api/test/steam_api_test.exs new file mode 100644 index 0000000..40e7efa --- /dev/null +++ b/steam_api/test/steam_api_test.exs @@ -0,0 +1,8 @@ +defmodule SteamApiTest do + use ExUnit.Case + doctest SteamApi + + test "greets the world" do + assert SteamApi.hello() == :world + end +end diff --git a/steam_api/test/test_helper.exs b/steam_api/test/test_helper.exs new file mode 100644 index 0000000..869559e --- /dev/null +++ b/steam_api/test/test_helper.exs @@ -0,0 +1 @@ +ExUnit.start()