Current section

Files

Jump to
thetvdb lib series.ex
Raw

lib/series.ex

defmodule TheTVDB.Series do
use TheTVDB.Model
model do
field "airsDayOfWeek"
field "airsTime"
field "aliases"
field "banner"
field "firstAired"
field "genre"
field "id"
field "imdbId"
field "lastUpdated"
field "network"
field "networkId"
field "overview"
field "rating"
field "runtime"
field "seriesId"
field "seriesName"
field "siteRating"
field "siteRatingCount"
field "status"
field "zap2itId"
end
defmodule Actor do
use TheTVDB.Model
model do
field "id"
field "image"
field "imageAdded"
field "imageAuthor"
field "lastUpdated"
field "name"
field "role"
field "seriesId"
field "sortOrder"
end
end
defmodule BasicEpisode do
use TheTVDB.Model
model do
field "absoluteNumber"
field "airedEpisodeNumber"
field "airedSeason"
field "dvdEpisodeNumber"
field "dvdSeason"
field "episodeName"
field "firstAired"
field "id"
field "lastUpdated"
field "overview"
end
end
defmodule SeriesSearch do
use TheTVDB.Model
model do
field "aliases"
field "banner"
field "firstAired"
field "id"
field "network"
field "overview"
field "seriesName"
field "status"
end
end
@spec exists?(integer) :: boolean
def exists?(id) do
case TheTVDB.API.head("/series/#{id}") do
{:ok, code} ->
code == 200
{:error, reason} ->
{:error, reason}
end
end
@spec info(integer) :: t
def info(id) do
case TheTVDB.API.get("/series/#{id}") do
{:ok, %{"data" => data}} ->
from_json(data)
{:error, reason} ->
{:error, reason}
end
end
@spec actors(integer) :: [Actor.t]
def actors(series_id) do
case TheTVDB.API.get("/series/#{series_id}/actors") do
{:ok, %{"data" => data}} ->
data |> Enum.map(&Actor.from_json(&1))
{:error, reason} ->
{:error, reason}
end
end
@spec episodes(integer) :: [BasicEpisode.t]
def episodes(series_id) do
TheTVDB.API.get_stream("/series/#{series_id}/episodes")
|> Stream.map(&BasicEpisode.from_json/1)
end
@spec search_by_name(String.t) :: [t]
def search_by_name(name) do
search_by("name", name)
end
@spec search_by_imdb_id(binary | integer) :: [t]
def search_by_imdb_id(id) do
search_by("imdbId", id)
end
@spec search_by_zap2it_id(binary | integer) :: [t]
def search_by_zap2it_id(id) do
search_by("zap2itId", id)
end
defp search_by(param, query) do
endpoint = "/search/series?#{URI.encode_query(%{param => query})}"
IO.puts endpoint
case TheTVDB.API.get(endpoint) do
{:ok, %{"data" => data}} ->
data |> Enum.map(&SeriesSearch.from_json(&1))
{:error, reason} ->
{:error, reason}
end
end
end