Giphy.py 0.0.2
An API wrapper for GIPHY
License: MIT
Keywords: api,api wrapper,gif,giphy,giphy api,wrapper,wrapper library

<div align="center">
<h1 style="font-size:9vw">GIPHY.PY</h1>

![powered-by-giphy](https://cdn.discordapp.com/attachments/655186216060321816/886480559331753994/PoweredBy_200_Horizontal_Light-Backgrounds_With_Logo.gif)
</div>

Giphy.py is a API wrapper for GIPHY that uses `async` and `await` syntax to maximize performance when interacting with the GIPHY API.

## Getting Started

* Sign up to GIPHY and obtain your free API key [here](https://developers.giphy.com/docs/api#quick-start-guide)
* Start using Giphy.py

<!-- ## Installing
To install this library, you need to either `pip` install it via git or clone it directly. It should be noted that the PyPI version (`v0.0.1`) is simply a placeholder for the Giphy.py name. That version contains no code and is not usable. For now during the initial release stage, this library will only be available on GitHub.
```
$ pip install git+https://github.com/Defxult/Giphy.py
```
This library is currently in it's alpha stage. Find a bug? Don't hesitate to submit an [issue](https://github.com/Defxult/Giphy.py/issues/new/choose). -->

## Example
```py
import asyncio
from giphy import Giphy

async def main():
    # you can use the public API key (Giphy.PUBLIC_KEY), but I HIGHLY suggest getting your own
    giphy = Giphy('your_api_key')

    spider_man_gif = await giphy.get_random_gif(Giphy.GIFS, tag='spiderman')
    await spider_man_gif.save()
    
    trending_gifs = await giphy.get_trending_gifs(Giphy.GIFS)


loop = asyncio.get_event_loop()
loop.run_until_complete(main())
```
![spider-man-gif](https://media.giphy.com/media/d54mmE4bayTyFsB9ul/giphy.gif?cid=790b7611e800be8023bb3832a6da2208b16baeb1abc17e0b&rid=giphy.gif&ct=g)

## Classes Documentation
<details>
    <summary>Click to show documentation</summary>

### Table of Contents

* [giphy.Analytics](#analytics)
* [giphy.Ancestor](#ancestor)
* [giphy.Category](#category)
* [giphy.Channel](#channel)
* [giphy.ChildPack](#childpack)
* [giphy.Gif](#gif)
* [giphy.Giphy](#giphy)
* [giphy.Images](#images)
* [giphy.Language](#language)
* [giphy.Rating](#rating)
* [giphy.StickerPack](#stickerpack)
* [giphy.SubCategory](#subcategory)
* [giphy.Tag](#tag)
* [giphy.Term](#term)
* [giphy.User](#user)

---

* [giphy.BadRequest](#badrequest)
* [giphy.Forbidden](#forbidden)
* [giphy.GiphyException](#giphyexception)
* [giphy.GiphyHTTPException](#giphyhttpexception)
* [giphy.NotFound](#notfound)
* [giphy.RequestTimedOut](#requesttimedout)
* [giphy.TooManyRequests](#toomanyrequests)

---
---
  

## Analytics
`class giphy.Analytics` - Provides URLs so you can register actions, such as when a user views, clicks, or sends a GIF
#### Attributes
* `on_load_url` (`str`) The URL to register a "view" action by a user    
* `on_click_url` (`str`) The URL to register a "click" action by a user
* `on_send_url` (`str`) The URL to register a "send" action by a user


## Ancestor
`class giphy.Ancestor` - Represents a parent channel
#### Attributes
* `id` (`int`) The ancestor Sticker Pack's unique numeric ID
* `slug` (`str`) URL-friendly name for the ancestor Sticker Pack
* `display_name` (`str`) Human-readable name for the ancestor Sticker Pack. (May contain formatting that other names don't)
* `short_display_name` (`str`) A more concise version of the ancestor Sticker Pack's display name
* `has_children` (`bool`) Describes whether or not the ancestor Sticker Pack contains child Sticker Packs
* `parent` (`int`) Numeric identifier for the parent Sticker Pack, if applicable
* `banner_image` (`str`) Will return a banner image for this Sticker Pack (either JPG, PNG, or GIF) with 1040x160 dimensions
* `featured_gif_id` (`str`) The ID of the GIF that will appear in a thumbnail, header image or other visual representation when referencing the ancestor Sticker Pack


## Category
`class giphy.Category` - Represents a category on GIPHY
#### Attributes
* `name` (`str`) Category name
* `name_encoded` (`str`) Encoded category name
* `sub_categories` (`List[SubCategory]`) List of subcategories
* `gif` (`Gif`) Featured GIF for category


## Channel
`class giphy.Channel` - Represents a channel on GIPHY
#### Attributes
* `id` (`int`) Channel unique ID
* `display_name` (`str`) The display name of the channel
* `parent` (`int`) Parent Channel ID
* `slug` (`str`) The unique channel slug. This slug is used in the channel URL
* `type` (`str`) The channel type
* `content_type` (`str`) If its a .gif or .mp4
* `user` (`User`) The user associated with the Channel
* `banner_image` (`str`) Channel banner image URL
* `short_display_name` (`str`) The short display name of the channel
* `description` (`str`) Channel description
* `has_children` (`bool`) Indicates that the channel has sub-channels
* `featured_gif` (`Gif`) The channel's featured GIF


## ChildPack
`class giphy.ChildPack` - Represents a Child Pack on GIPHY. A Child Pack is a collection of Stickers in a Sticker Pack
#### Attributes
* `id` (`int`) The Sticker Pack's unique numeric ID
* `parent` (`int`) Numeric identifier for the parent Sticker Pack
* `type` (`str`) Will return "community" or "editorial". This describes whether the Sticker Pack is curated by GIPHY or by the community
* `content_type` (`str`) Will always return "sticker" in this case
* `slug` (`str`) URL-friendly name for the Sticker Pack
* `display_name` (`str`) Human-readable name for the Sticker Pack. (May contain formatting that other names don't)
* `short_display_name` (`str`) A more concise version of the Sticker Pack's display name
* `description` (`str`) Long form description of the Sticker Pack
* `banner_image` (`str`) Will return a banner image for the Sticker Pack (either JPG, PNG, or GIF) with 1040x160 dimensions
* `has_children` (`bool`) Describes whether or not the Sticker Pack contains child Sticker Packs
* `user` (`User`) The GIPHY user associated with the Sticker Pack
* `featured_gif` (`Gif`) The GIF that will appear in a thumbnail, header image or other visual representation when referencing the Sticker Pack


## Gif
`class giphy.Gif` - Represents a GIF on GIPHY
#### Attributes
* `type` (`str`) The image type. This is almost always "gif"
* `id` (`str`) The GIF's unique ID
* `slug` (`str`) The unique slug used in the GIF's URL
* `url` (`str`) The unique URL for the GIF
* `bitly_url` (`str`) The unique bit.ly URL for the GIF
* `embed_url` (`str`) A URL used for embedding the GIF
* `is_sticker` (`bool`) If the GIF is a sticker
* `username` (`str`) The username the GIF is attached to, if applicable
* `source` (`str`) The page on which the GIF was found
* `rating` (`str`) The MPAA-style rating for the content
* `user` (`User`) The user associated with the GIF, if applicable
* `source_tld` (`str`) The top level domain of the source URL
* `source_post_url` (`str`) The URL of the webpage on which this GIF was found
* `uploaded_at` (`datetime.datetime`) The creation or upload date from the GIF
* `trending_at` (`datetime.datetime`) The date on which the GIF was marked trending, if applicable 
* `images` (`Images`) Contains data for various available formats and sizes of the GIF
* `title` (`str`) The title that appears on giphy.com for the GIF
* `analytics` (`Analytics`) Provides URLs so you can register actions, such as when a user views, clicks, or sends a GIF
#### Methods
* `await` **save**(`path = None`) - Save the GIF
  * **Parameters**
    * **path** (`Optional[str]`) - The path to save the GIF to. If `None`, it saves to the current working directory


## Giphy
`class giphy.Giphy(api_key, timeout = 300.0)` - Represents a GIPHY client
#### Parameters
* `api_key` (`str`) Your API key. You can use the public API key with `Giphy.PUBLIC_KEY`, but it is *highly* recommended to get your own
* `timeout` (`float`) How long the client should wait before a timeout error is raised when performing requests to the GIPHY API
#### Class Attributes
* `GIFS` (`str`) The type of GIF to receive
* `STICKERS` (`str`) The type of GIF to receive
* `PUBLIC_KEY` (`str`) The public key
#### Methods
* `await` **apply_action_register**(`gif`) - Applies the Action Register URLs. "Action Register" registers each time a user views, clicks, or sends a GIF or Sticker and plays an important role in helping GIPHY improve a user’s search results
  * **Parameters**
    * **gif** (`Gif`) The `Gif` you'd like the Action Register URLs for. That `Gif` must have analytics
  * **Returns**
    * `Dict[str, str]` - The dictionary "values" contain the full Action Register URLs
  * **Raises**
    * `GiphyException` - The `Gif` did not have analytics
    * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
    * `TooManyRequests` - Your API Key is making too many requests
    * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **autocomplete**(`tag, limit = 5, offset = 0`) - Provides a list of valid terms that would autocomplete the given tag
  * **Parameters**
    * **tag** (`str`) What to autocomplete
    * **limit** (`int`) The maximum number of autocompletes to return
    * **offset** (`int`) Specifies the starting position of the results
  * **Raises**
    * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
    * `TooManyRequests` - Your API Key is making too many requests
    * `RequestTimedOut` - The GIPHY API took too long to respond

* `async for ... in` **bulk_request**(`tag = None, amount = 5, rating = Rating.PG_13`) - An asynchronous generator to request GIFs. The GIPHY API does not provide a way to get a mass amount of randomly generated GIFs at once.
        Whatever you set for your `amount` is the total amount of HTTP requests made, and setting that parameter to an absurd value could get you rate limited
  * **Parameters**
    * **tag** (`Optional[str]`) The type of GIFs to search for. If `None`, the GIF will be completely random
    * **amount** (`int`) The amount of GIFs to request
    * **rating** (`Rating`) Age rating pertaining to the GIF received
  * **Yields**
    * `Gif` - The GIF matching the given parameters
  * **Raises**
    * `BadRequest` - The request was formatted incorrectly or missing a required parameter(s)
    * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
    * `GiphyException` - The `image_type` was not recognized
    * `TooManyRequests` - Your API Key is making too many requests
    * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **get_trending_gifs**(`image_type, limit = 25, rating = Rating.PG_13`) - Get the currently trending GIFs
    * **Parameters**
      * **image_type** (`str`) The type of GIFs to get. Either `Giphy.GIFS` or `Giphy.STICKERS`
      * **limit** (`int`) The amount of GIFs you would like to receive. Typically this is limited to a maximum of 50
      * **rating** (`Rating`) Age rating pertaining to the GIFs received
    * **Returns**
      * `List[Gif]` - The currently trending GIFs
    * **Raises**
      * `BadRequest` - The request was formatted incorrectly or missing a required parameter(s)
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `GiphyException` - The `image_type` was not recognized
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **get_random_gif**(`image_type, tag = None, rating = Rating.PG_13`) - Get a random GIF
    * **Parameters**
        * **image_type** (`str`) The type of GIFs to get. Either `Giphy.GIFS` or `Giphy.STICKERS`
        * **tag** (`Optional[str]`) If set, it will return a random GIF or Sticker related to the word or phrase entered. If no tag is specified, the GIF or Sticker returned is completely random
        * **rating** (`Rating`) Age rating pertaining to the GIF received
    * **Returns**
        * `Gif` - Can be `None` if there were no results
    * **Raises**
      * `BadRequest` - The request was formatted incorrectly or missing a required parameter(s)
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `GiphyException` - The `image_type` was not recognized
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **get_trending_searches**( ) - Get a list of the most popular trending search terms on GIPHY
    * **Returns**
      * `List[str]`
    * **Raises**
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **get_gifs_by_id**(`*ID`) - Get a GIF by its ID. If a single GIF was found in a list of multiple IDs, `NotFound` will not be raised. Only the found GIFs will be returned and the ones not found will be skipped.
    * **Parameters**
      * **\*ID** (`str`) An argument list of GIF IDs
    * **Returns**
      * `List[Gif]` - The GIFs that were found
    * **Raises**
      * `BadRequest` - The request was formatted incorrectly or missing a required parameter(s)
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `NotFound` - The particular GIF or Sticker you are requesting was not found
      * `GiphyException` - The `ID` argument list cannot was empty
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **get_categories**( ) - Get all categories that are available on GIPHY
    * **Returns**
        * `List[Category]`
    * **Raises**
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **get_channels**(`query, limit = 25, offset = 0`) - Get all the GIPHY channels matching the query
    * **Parameters**
        * **query** (`str`) What to search for
        * **limit** (`int`) The number of channels to return (50 maximum)
        * **offset** (`int`) Specifies the starting position of the results
    * **Returns**
        * `List[Channel]` - The channels that matched the query. Can be `None` if there were no results
    * **Raises**
      * `BadRequest` - The request was formatted incorrectly or missing a required parameter(s)
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **get_search_suggestions**(`tag`) - Get a list of tag terms related to the given tag on GIPHY
    * **Parameters**
        * **tag** (`str`) What to search for
    * **Returns**
      * `List[Term]` - The term suggestions related to the tag. Can be `None` if there were no results
    * **Raises**
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **get_sticker_pack**(`ID`) - Get a sticker pack on GIPHY
    * **Parameters**
      * **ID** (`int`) The sticker pack ID
    * **Returns**
      * `StickerPack` - Can also return `None` if the sticker pack with the given ID was not found
    * **Raises**
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `NotFound` - The sticker pack ID was not found
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **get_stickers_from_pack**(`pack_id`) - Get the stickers from a pack ID
    * **Parameters**
      * **pack_id** (`int`) The sticker pack ID
    * **Returns**
      * `List[Gif]` - The stickers associated with the `pack_id`. Can be `None` if there were no results
    * **Raises**
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `NotFound` - The sticker pack ID was not found
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **get_children_sticker_packs**(`pack_id`) - Get the children pack from the sticker pack with the given pack ID. For example, the "Reactions" pack would have an "OMG" child pack
        
    * **Parameters**
        * **pack_id** (`int`) The sticker pack ID
    * **Returns**
        * `List[ChildPack]` - The child packs associated with the `pack_id`. Can be `None` if there were no results
    * **Raises**
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `NotFound` - The sticker pack ID was not found
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **get_all_sticker_packs**( ) - Get all sticker packs available on GIPHY
    * **Returns**
      * `List[StickerPack]`
    * **Raises**
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **generate_random_id**( ) - Generate a random ID from the GIPHY API
    * **Returns**
        * `str` - The randomly generated ID
    * **Raises**
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **search**(`image_type, query, limit = 25, offset = 0, rating = Rating.PG_13, language = Language.English`) - Search for specific types of GIFs
    * **Parameters**
      * **image_type** (`str`) The type of GIFs to get. Either `Giphy.GIFS` or `Giphy.STICKERS`
      * **query** (`str`) The GIFs to search for
      * **limit** (`int`) The amount of GIFs you would like to receive
      * **offset** (`int`) Specifies the starting position of the results. Has a minimum value of 0 and a maximum value of 4999
      * **rating** (`Rating`) Age rating pertaining to the GIFs received
      * **language** (`Language`) Specify for regional content
    * **Returns**
        * `List[Gif]` - The GIFs related to the `query`. Can be `None` if there were no results
    * **Raises**
      * `BadRequest` - The request was formatted incorrectly or missing a required parameter(s)
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `GiphyException` - The `image_type` was not recognized
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **translate**(`image_type, search_term, weirdness = 0`) - Converts words and phrases to a related GIF or Sticker
    * **Parameters**
      * **image_type** (`str`) The type of GIFs to get. Either `Giphy.GIFS` or `Giphy.STICKERS`
      * **search_term** (`str`) What to search for
      * **weirdness** (`int`) Value from 0-10 which makes results weirder as you go up the scale
    * **Returns**
      * `Gif` - Can be `None` if there were no results
    * **Raises**
      * `BadRequest` - The request was formatted incorrectly or missing a required parameter(s)
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `GiphyException` - The `image_type` was not recognized
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond

* `await` **upload**(`*, file_path = None, source_image_url = None, source_post_url = None, tags = None`) - Upload animated GIFs or video files up to 100MB. Either `file_path` or `source_image` should be specified but not both. If both are specified, `file_path` will supersede
  * **Parameters**
    * **file_path** (`Optional[str]`) The file path of the GIF or video file
    * **source_image_url** (`Optional[str]`) The URL for the GIF or video you wish to upload (required if no `file_path` parameter is specified)
    * **source_post_url** (`Optional[str]`) The URL source of the GIF or video file
    * **tags** (`Optional[Sequence[str]]`) A list of tags to be applied to the upload
    * **Raises**
      * `BadRequest` - The request was formatted incorrectly or missing a required parameter(s)
      * `Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key
      * `GiphyException` - You used a public API ket, the file was not found, or the proper parameters were not specified
      * `TooManyRequests` - Your API Key is making too many requests
      * `RequestTimedOut` - The GIPHY API took too long to respond


## Images
`class giphy.Images` - Contains a series of Rendition (formats) properties. These Rendition properties includes the URLs and sizes for the many different renditions. Each property returns a `NamedTuple` which has attributes that are shown below.
#### Properties
* **fixed_height** (`NamedTuple`) Height set to 200px, variable width, to fit in preview grids and other smaller applications
  * `url` (`str`) The publicly-accessible direct URL for this GIF for this size of the GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
  * `size`  (`int`) The size of this GIF in bytes
  * `mp4` (`str`) The URL for this GIF in .MP4 format
  * `mp4_size` (`int`) The size in bytes of the .MP4 file corresponding to this GIF
  * `webp` (`str`) The URL for this GIF in .webp format
  * `webp_size` (`int`) The size in bytes of the .webp file corresponding to this GIF
* **fixed_height_still** (`NamedTuple`) - A still version of the first frame of the `fixed_height` rendition for previews and pre-loading 
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
* **fixed_height_downsampled** (`NamedTuple`) - Downsampled to six frames for faster-loading unlimited scroll preview grids. Not for user selection
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
  * `size` (`int`) The size of this GIF in bytes
  * `webp` (`str`) The URL for this GIF in .webp format
  * `webp_size` (`int`) The size in bytes of the .webp file corresponding to this GIF
* **fixed_width** (`NamedTuple`) - Width set to 200px, variable height, to fit in preview grids and other smaller applications
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
  * `size` (`int`) The size of this GIF in bytes
  * `mp4` (`str`) The URL for this GIF in .MP4 format
  * `mp4_size` (`int`) The size in bytes of the .MP4 file corresponding to this GIF
  * `webp` (`str`) The URL for this GIF in .webp format
  * `webp_size` (`int`) The size in bytes of the .webp file corresponding to this GIF
* **fixed_width_still** (`NamedTuple`) - A still version of the first frame of the `fixed_width` rendition for previews and pre-loading
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
* **fixed_width_downsampled** (`NamedTuple`) - Downsampled to six frames for faster-loading unlimited scroll preview grids. Not for user selection
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
  * `size` (`int`) The size of this GIF in bytes
  * `webp` (`str`) The URL for this GIF in .webp format
  * `webp_size` (`int`) The size in bytes of the .webp file corresponding to this GIF
* **fixed_height_small** (`NamedTuple`) - Height set to 100px, variable width. Good for smaller screen sizes with preview grids
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
  * `size` (`int`) The size of this GIF in bytes
  * `mp4` (`str`) The URL for this GIF in .MP4 format
  * `mp4_size` (`int`) The size in bytes of the .MP4 file corresponding to this GIF
  * `webp` (`str`) The URL for this GIF in .webp format
  * `webp_size` (`int`) The size in bytes of the .webp file corresponding to this GIF
* **fixed_height_small_still** (`NamedTuple`) - A still version of the first frame of the `fixed_height_small` rendition for previews and pre-loading
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
* **fixed_width_small** (`NamedTuple`) - Width set to 100px, variable height. Good for smaller screen sizes with preview grids
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
  * `size` (`int`) The size of this GIF in bytes
  * `mp4` (`str`) The URL for this GIF in .MP4 format
  * `mp4_size` (`int`) The size in bytes of the .MP4 file corresponding to this GIF
  * `webp` (`str`) The URL for this GIF in .webp format
  * `webp_size` (`int`) The size in bytes of the .webp file corresponding to this GIF
* **fixed_width_small_still** (`NamedTuple`) - A still version of the first frame of the `fixed_width_small` rendition for previews and pre-loading
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
* **downsized** (`NamedTuple`) - Resized and downsampled to meet 2MB limit
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
  * `size` (`int`) The size of this GIF in bytes
* **downsized_still** (`NamedTuple`) - A still version of the first frame of the downsized rendition for previews and pre-loading   
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
* **downsized_large** (`NamedTuple`) - Resized and downsampled to meet 8MB limit
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
  * `size` (`int`) The size of this GIF in bytes
* **downsized_medium** (`NamedTuple`) - Resized and downsampled to meet 5MB limit    
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
  * `size` (`int`) The size of this GIF in bytes
* **downsized_small** (`NamedTuple`) - Resized and downsampled to meet 200KB limit
  * `mp4` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
  * `mp4_size (`int`) The size of this GIF in bytes
* **original** (`NamedTuple`) - Original file size and dimensions
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
  * `size` (`int`) The size of this GIF in bytes
  * `frames` (`int`) The number of frames in this GIF
  * `mp4` (`str`) The URL for this GIF in .MP4 format
  * `mp4_size` (`int`) The size in bytes of the .MP4 file corresponding to this GIF
  * `webp` (`str`) The URL for this GIF in .webp format
  * `webp_size` (`int`) The size in bytes of the .webp file corresponding to this GIF
* **original_still** (`NamedTuple`) - A still version of the first frame of the original for previews and pre-loading
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
* **looping** (`NamedTuple`) - A version of the original set to loop for exactly 15 seconds
  * `mp4` (`str`) The URL for this GIF in .MP4 format.
* **preview** (`NamedTuple`) - Resized and trimmed to meet 50kB limit. Not recommended for most use cases
  * `mp4` (`str`) The URL for this GIF in .MP4 format.
  * `mp4_size` (`int`) The size in bytes of the .MP4 file corresponding to this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels
* **preview_gif** (`NamedTuple`) - Resized and trimmed to meet 50kB limit. Not recommended for most use cases
  * `url` (`str`) The publicly-accessible direct URL for this GIF
  * `width` (`int`) The width of this GIF in pixels
  * `height` (`int`) The height of this GIF in pixels


## Language
`class giphy.Language` - Represents the regional content on the GIPHY Network
#### Class Attributes
* `English` (`str`)
* `Spanish` (`str`)
* `Portuguese` (`str`)
* `Indonesian` (`str`)
* `French` (`str`)
* `Arabic` (`str`)
* `Turkish` (`str`)
* `Thai` (`str`)
* `Vietnamese` (`str`)
* `German` (`str`)
* `Italian` (`str`)
* `Japanese` (`str`)
* `ChineseSimplified` (`str`)
* `ChineseTraditional` (`str`)
* `Russian` (`str`)
* `Korean` (`str`)
* `Polish` (`str`)
* `Dutch` (`str`)
* `Romanian` (`str`)
* `Hungarian` (`str`)
* `Swedish` (`str`)
* `Czech` (`str`)
* `Hindi` (`str`)
* `Bengali` (`str`)
* `Danish` (`str`)
* `Farsi` (`str`)
* `Filipino` (`str`)
* `Finnish` (`str`)
* `Hebrew` (`str`)
* `Malay` (`str`)
* `Norwegian` (`str`)
* `Ukrainian` (`str`)


## Rating
`class giphy.Rating` - Represents the content rating of the GIF
#### Class Attributes
* `G` (`str`)
* `PG` (`str`)
* `PG_13` (`str`)
* `R` (`str`)


## StickerPack
`class giphy.StickerPack` - Represents a Sticker Pack on GIPHY. A Sticker Pack is a collection of Stickers
#### Attributes
* `id` (`int`) The Sticker Pack's unique numeric ID
* `display_name` (`str`) Human-readable name for the Sticker Pack. (May contain formatting that other names don't)
* `slug` (`str`) URL-friendly slug for the Sticker Pack
* `content_type` (`str`) Will always return "sticker" in this case.
* `short_display_name` (`str`) A more concise version of the Sticker Pack's display name
* `description` (`str`) Long form description of the Sticker Pack
* `banner_image` (`str`) Will return a banner image for the Sticker Pack (either JPG, PNG, or GIF) with 1040x160 dimensions
* `has_children` (`bool`) Describes whether or not the Sticker Pack contains Child Sticker Packs
* `user` (`User`) The GIPHY user associated with the Sticker Pack
* `featured_gif` (`Gif`) The GIF that will appear in a thumbnail, header image or other visual representation when referencing this Sticker Pack
* `ancestors` (`List[Ancestors]`) All ancestor Sticker Packs


## SubCategory
`class giphy.SubCategory` - Represents a sub-category of a category on GIPHY 
#### Attributes
* `name` (`str`) Category name
* `name_encoded` (`str`) Encoded category name


## Tag
`class giphy.Tag` - Represents a GIPHY tag. These are the words that make it discoverable via a search
#### Attributes
* `name` (`str`) The tag name
* `rank` (`int`) Rank of the tag


## Term
`class giphy.Term` - Represents the autocomplete value
#### Attributes
* `name` (`str`) The term name


## User
`class giphy.User` - Contains information about the user associated with a GIF and URLs to assets such as that user's avatar image, GIPHY profile, and more
#### Attributes
* `avatar_url` (`str`) The URL for the user's avatar image
* `banner_url` (`str`) The URL for the banner image that appears atop the user's profile page
* `profile_url` (`str`) The URL for the user's GIPHY profile
* `instagram_url` (`str`) The URL for the user's Instagram
* `website_url` (`str`) The URL for the user's website
* `username` (`str`) The username associated with the user
* `display_name` (`str`) The display name associated with this user
* `is_verified` (`bool`) If the user is verified
* `description` (`str`) The user profile description


---
---

## BadRequest
`exception giphy.errors.BadRequest` - The request was formatted incorrectly or missing a required parameter(s).
## Forbidden
`exception giphy.errors.Forbidden` - You weren't authorized to make your request; most likely this indicates an issue with your API Key.
## GiphyException
`exception giphy.errors.GiphyException` - Base Giphy Exception
## GiphyHTTPException
`exception giphy.errors.GiphyHTTPException` - Base Giphy HTTP Exception
## NotFound
`exception giphy.errors.NotFound` - The particular GIF or Sticker you are requesting was not found. This occurs, for example, if you request a GIF by using an id that does not exist.
## RequestTimedOut
`exception giphy.errors.RequestTimedOut` - The GIPHY API didn't respond within the given time
## TooManyRequests
`exception giphy.errors.TooManyRequests` - Your API Key is making too many requests

</details>