File: //home/arjun/projects/env/lib/python3.10/site-packages/tweepy/media.py
# Tweepy
# Copyright 2009-2023 Joshua Roesslein
# See LICENSE for details.
from tweepy.mixins import DataMapping
#: All the potential fields for :class:`Media` objects
MEDIA_FIELDS = [
"alt_text",
"duration_ms",
"height",
"media_key",
"non_public_metrics",
"organic_metrics",
"preview_image_url",
"promoted_metrics",
"public_metrics",
"type",
"url",
"variants",
"width",
]
class Media(DataMapping):
"""Media refers to any image, GIF, or video attached to a Tweet. The media
object is not a primary object on any endpoint, but can be found and
expanded in the Tweet object.
The object is available for expansion with
``?expansions=attachments.media_keys`` to get the condensed object with
only default fields. Use the expansion with the field parameter:
``media.fields`` when requesting additional fields to complete the object..
.. versionadded:: 4.0
.. versionchanged:: 4.5
Added ``url`` field
.. versionchanged:: 4.12
Added ``variants`` field
Attributes
----------
data : dict
The JSON data representing the media.
media_key : str
Unique identifier of the expanded media content.
type : str
Type of content (animated_gif, photo, video).
url : str | None
A direct URL to the media file on Twitter.
duration_ms : int | None
Available when type is video. Duration in milliseconds of the video.
height : int | None
Height of this content in pixels.
non_public_metrics : dict | None
Non-public engagement metrics for the media content at the time of the
request.
Requires user context authentication.
organic_metrics: dict | None
Engagement metrics for the media content, tracked in an organic
context, at the time of the request.
Requires user context authentication.
preview_image_url : str | None
URL to the static placeholder preview of this content.
promoted_metrics : dict | None
Engagement metrics for the media content, tracked in a promoted
context, at the time of the request.
Requires user context authentication.
public_metrics : dict | None
Public engagement metrics for the media content at the time of the
request.
width : int | None
Width of this content in pixels.
alt_text : str | None
A description of an image to enable and support accessibility. Can be
up to 1000 characters long. Alt text can only be added to images at the
moment.
variants: list[dict] | None
Each media object may have multiple display or playback variants,
with different resolutions or formats
References
----------
https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/media
"""
__slots__ = (
"data", "media_key", "url", "type", "duration_ms", "height",
"non_public_metrics", "organic_metrics", "preview_image_url",
"promoted_metrics", "public_metrics", "width", "alt_text",
"variants"
)
def __init__(self, data):
self.data = data
self.media_key = data["media_key"]
self.type = data["type"]
self.url = data.get("url")
self.duration_ms = data.get("duration_ms")
self.height = data.get("height")
self.non_public_metrics = data.get("non_public_metrics")
self.organic_metrics = data.get("organic_metrics")
self.preview_image_url = data.get("preview_image_url")
self.promoted_metrics = data.get("promoted_metrics")
self.public_metrics = data.get("public_metrics")
self.width = data.get("width")
self.alt_text = data.get("alt_text")
self.variants = data.get("variants")
def __eq__(self, other):
if isinstance(other, self.__class__):
return self.media_key == other.media_key
return NotImplemented
def __hash__(self):
return hash(self.media_key)
def __repr__(self):
return f"<Media media_key={self.media_key} type={self.type}>"