private static Option <IMedia> GetVideo(IMediaEntity media, string thumbnailUrl) { IVideoInformationEntity videoInfo = media.VideoDetails; IVideoEntityVariant[] variants = videoInfo.Variants; IVideoEntityVariant bestVideo = variants.OrderByDescending(variant => variant.Bitrate) .FirstOrDefault(); Dictionary <string, IMediaEntitySize> sizes = media.Sizes; IMediaEntitySize size = sizes.GetValueOrDefault("large") ?? sizes.GetValueOrDefault("medium") ?? sizes.GetValueOrDefault("small"); if (bestVideo != null) { return(Option.Some <IMedia>( new Video( bestVideo.URL, thumbnailUrl, TimeSpan.FromMilliseconds(videoInfo.DurationInMilliseconds), size?.Width, size?.Height))); } return(Option.None <IMedia>()); }
public static List <MediaItem> ExtractMediaFromTweet(ITweet tweet) { List <MediaItem> mediaList = new List <MediaItem>(); if (tweet.Media.Count > 0) { int indexCount = 1; foreach (MediaEntity media in tweet.Media) { MediaItem mediaItem = new MediaItem(); //Add details to new media item mediaItem.MediaId = (long)media.Id; mediaItem.MediaClass = media.MediaType; if (media.VideoDetails != null) //Video or GIF { IVideoEntityVariant baseVariant = media.VideoDetails.Variants[0]; //Set a baseline media variant foreach (IVideoEntityVariant variant in media.VideoDetails.Variants) { if (variant.Bitrate > baseVariant.Bitrate) //Check if batter quality than baseline { baseVariant = variant; } } mediaItem.FileType = "." + baseVariant.ContentType.Substring(baseVariant.ContentType.LastIndexOf('/') + 1).Trim(); //Get file extension mediaItem.MediaURL = baseVariant.URL; //Get URL that points to media (not page with media) } else { //Photo or singular type mediaItem.FileType = media.MediaURL.Substring(media.MediaURL.LastIndexOf('.')).Trim(); mediaItem.MediaURL = media.MediaURL; } mediaItem.MediaIndex = indexCount; //Add index value, then increment indexCount++; mediaList.Add(mediaItem); //Add media item to list } } return(mediaList); }