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