defmodule Extube do @moduledoc """ Extube is a wrapper for the hubtraffic API. It gathers data from multiple tube sites including pornhub, redtube, tube8, youporn, xtube, spankwire, keezmovies, and extremetube. """ @doc """ Queries the hubtraffic API to search for videos given a map of parameters. Parameters right now include the following: `:category` `:page` `:search` `:ordering` `:period` `:thumbsize` (Required) For information on possible values of the parameters, see here """ def search_videos(params \\ %{thumbsize: "medium"}) do base_url = "https://www.pornhub.com/webmasters/search?" handle_hubtraffic_call(base_url, params) end @doc """ Retrieves additional information about specific video by id parameter. ## Parameters: `id` (Required) Integer `thumbsize` (Optional) If set, provides additional thumbnails in different formats. Possible values are small,medium,large,small_hd,medium_hd,large_hd """ def get_video_by_id(video_id, thumbsize \\ "medium") do base = "https://www.pornhub.com/webmasters/video_by_id?" handle_hubtraffic_call(base, %{ id: video_id, thumbsize: thumbsize }) end @doc """ Retrieves embed code for specific video by video_id parameter, which is useful to automatically embed videos. ## Parameters: `id` (Required) Integer """ def get_video_embed_code(video_id) do base = "https://www.pornhub.com/webmasters/video_embed_code?" handle_hubtraffic_call(base, %{ id: video_id }) end @doc """ Retrieves all deleted videos. ## Parameters: `page` (Required) Integer """ def get_deleted_videos(page) do base = "https://www.pornhub.com/webmasters/deleted_videos?" handle_hubtraffic_call(base, %{ page: page }) end @doc """ Retrieves state of a specific video specified by is_video_active parameter, which is useful in order to keep your embedded videos up to date. ## Parameters: `id` (Required) Integer """ def is_video_active(video_id) do base = "https://www.pornhub.com/webmasters/is_video_active?" handle_hubtraffic_call(base, %{ id: video_id }) end @doc """ Retrieves all available categories. """ def get_categories_list do handle_hubtraffic_call("http://www.pornhub.com/webmasters/categories", %{}) end @doc """ Retrieves all tags available. ## Parameters: `list` a-z for tag starting letter, 0 for other. """ def get_tags_list(starts_with) do base = "https://www.pornhub.com/webmasters/tags?" handle_hubtraffic_call(base, %{ list: starts_with }) end @doc """ Retrieves all pornstars available. """ def get_star_list do handle_hubtraffic_call("https://www.pornhub.com/webmasters/stars", %{}) end @doc """ Retrieves all pornstars available with details (page url and star's thumb). """ def get_star_detailed_list do handle_hubtraffic_call("https://www.pornhub.com/webmasters/stars_detailed", %{}) end defp handle_hubtraffic_call(base_url, params) do url = base_url <> URI.encode_query(params) {:ok, data} = HTTPoison.get(url) data_map = Poison.decode!(data.body) case hubtraffic_error_code(data_map["code"]) do :error -> {:error, data_map["message"]} :success -> {:success, data_map} end end defp hubtraffic_error_code(code) do error_codes = [ "1001", "1002", "1003", "2001", "2002", "3001", "3002", "3003", ] case (code in error_codes) do true -> :error false -> :success end end end