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>());
        }
Exemple #2
0
        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);
        }