LinqToTwitter: проблема времени с видео - PullRequest
1 голос
/ 16 марта 2019

Я использую 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:\Temp\RecentMedia\MOV_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;
    }

}
...