如何使用asp.net API发布特殊字符推文?

时间:2016-05-09 11:34:21

标签: asp.net tweetsharp

我使用下面的代码在Twitter上发布推文。但是当我们将它上传到服务器上时,特殊字符(!,:,$ etc)的推文不会在Twitter上发布。此代码在本地系统中正常工作

string key = "";
string secret = "";
string token="";
string tokenSecret="";
try
{           
string localFilename = HttpContext.Current.Server.MapPath("../images/").ToString();

            using (WebClient client = new WebClient())
            {
                client.DownloadFile(imagePath, localFilename);
            }
            var service = new TweetSharp.TwitterService(key, secret);
            service.AuthenticateWith(token, tokenSecret);
            // Tweet wtih image
            if (imagePath.Length > 0)
            {
                using (var stream = new FileStream(localFilename, FileMode.Open))
                {
                    var result = service.SendTweetWithMedia(new SendTweetWithMediaOptions
                    {
                        Status = message,
                        Images = new Dictionary<string, Stream> { { "name", stream } }
                    });
                }                   
            }
            else // just message
            {
                var result = service.SendTweet(new SendTweetOptions
                {
                    Status = HttpUtility.UrlEncode(message)
                });
            } 

    }
    catch (Exception ex)
    {
        throw ex;
    }

2 个答案:

答案 0 :(得分:1)

状态/ update_with_media API端点实际上已被Twitter弃用,不应使用(https://dev.twitter.com/rest/reference/post/statuses/update_with_media)。

当推文同时包含一个特殊字符时,TweetSharp也会遇到一些使用此方法的问题。和一个图像(与任何一个,但不是两个都很好)。我不知道为什么,我也无法修复它,它与OAuth签名有关,我很确定。

作为解决方案,我建议你使用TweetMoaSharp(TweetSharp的一个分支)。它已经更新,以支持新的Twitter API用于处理推文中的媒体,如果您使用新的东西,它将在这种情况下工作。

基本上,您使用新的UploadMedia方法上传每个媒体项目,这将返回“媒体ID”。然后,您可以使用普通的&#39; SendTweet&#39;方法并提供媒体ID列表以及其他状态详细信息。 Twitter会在发布时将媒体附加到推文上,当有特殊字符和图像时它会起作用。

答案 1 :(得分:0)

除TweetMoaSharp外,您还可以使用以下代码使用Tweetinvi:

var binary = File.ReadAllBytes(@"C:\videos\image.jpg");
var media = Upload.UploadMedia(binary);

var tweet = Tweet.PublishTweet("hello", new PublishTweetOptionalParameters
{
    Medias = {media}
});