LinqToTwitter: проблема с синхронизацией видеоносителя

#c# #linq-to-twitter

#c# #linq-to-twitter

Вопрос:

Я использую Linqtotwitter версии 5. Приведенный ниже код иногда работает, иногда нет. Если я установлю точку останова там, где я указал, и подожду некоторое время, это почти всегда работает.

Когда это не работает, я получаю сообщение об исключении «Недопустимое видео».

Я разместил образец видео здесь, но они соответствуют требованиям, приведенным здесь, опубликованным Twitter. Размер видео 75 МБ, длительность 34 секунды. Практически любое видео действует одинаково.

Я основал этот код на приведенномздесь примере

Я извлек код и поместил его в консольное приложение, где оно ведет себя точно так же.

 class Program
{
        static void Main(string[] args)
        {
            Task.Run(async () =>
            {
                UploadMedia theMedia = new UploadMedia();
                int theResult = await theMedia.doitAsync();
                Console.Write("Return value ="   theResult.ToString());

            } ).GetAwaiter().GetResult();
        }


}

public class UploadMedia { 

    public async Task<int> doitAsync()
    {
        TwitterContext twitterContext = getContext();

        List<string> _theMedia = new List<string>();
        _theMedia.Add(@"C:TempRecentMediaMOV_1963.mp4");

        try
        {
            string lsMediaType = "video/mp4";
            string lsMediaCat = "tweet_video";
            var imageUploadTasks = new List<Task<Media>>();
            Task<Media> lsoImageMedia;
            foreach (var lsItem in _theMedia)
            {
                Console.Write("Sending "   lsItem);
                lsoImageMedia = twitterContext.UploadMediaAsync(System.IO.File.ReadAllBytes(lsItem), lsMediaType, lsMediaCat);
                imageUploadTasks.Add(lsoImageMedia);
            };

            await Task.WhenAll(imageUploadTasks);

            List<ulong> mediaIds =
            (from tsk in imageUploadTasks
             select tsk.Result.MediaID)
            .ToList();

            // PUT A BREAKPOINT HERE AND WAIT A WHILE, AND THE VIDEO WILL UPLOAD
            Status tweet = await twitterContext.TweetAsync("This is an example video", mediaIds);

            if (tweet != null)
            {
                Console.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")   " Status returned: "   "("   tweet.StatusID   ")"  
                    tweet.User.Name   ", "   tweet.Text);
            }

            return 0;

        }
        catch (Exception ex)
        {
            Console.Write("Exception whilst sending/processing media: "   ex.Message   " : "   ex.ToString());
            return -1;
        }
    }

    static private TwitterContext getContext()
    {
        SingleUserAuthorizer authorizer = new SingleUserAuthorizer();

        SingleUserInMemoryCredentialStore cred = new SingleUserInMemoryCredentialStore();
        cred.ConsumerKey = TwitterConstants.sConsumerKey;
        cred.ConsumerSecret = TwitterConstants.sConsumerKeySecret;
        cred.AccessToken = TwitterConstants.sAccessToken;
        cred.AccessTokenSecret = TwitterConstants.sAccessTokenSecret;

        authorizer.CredentialStore = cred;

        var twitterContext = new TwitterContext(authorizer);
        return twitterContext;
    }

}
  

Комментарии:

1. Ваш код вообще не соответствует этому примеру: github.com/JoeMayo/LinqToTwitter/wiki/Tweeting-with-Media