Я создаю твиттер-бота, который использует их API. Единственный пакет, который я использую, это RestSharp. Если возможно, мне нужно решение, в котором я не использую вспомогательный пакет.
Это мой код:
static bool tweet(string tweetstr)
{
RestClient client = new RestClient("https://api.twitter.com");
RestRequest r = new RestRequest("/1.1/statuses/update.json", Method.POST);
//tweetstr = WebUtility.UrlEncode(tweetstr);
//r.AddParameter("status", tweetstr, ParameterType.QueryStringWithoutEncode);
r.AddQueryParameter("status", tweetstr);
client.Authenticator = OAuth1Authenticator.ForProtectedResource(API_key, API_secret_key, access_token, access_token_secret);
IRestResponse res = client.Execute(r);
if (res.StatusCode == System.Net.HttpStatusCode.OK)
{
Console.WriteLine(DateTime.Now.ToString() + " Tweeted: " + tweetstr);
return true;
}
else
{
Console.WriteLine("Couldn't tweet!\nError code: " + res.StatusCode.ToString() + "\nTried to tweet: " + tweetstr + "\nResponse: " + res.Content.ToString());
return false;
}
}
Теперь по какой-то причине это работает, если я не использую специальные символов в строке (например, иностранный язык или даже восклицательный знак), если я это сделаю, он вернет несанкционированную ошибку с сообщением «Не удалось аутентифицировать вас».
Например, вызов tweet("testing")
будет работать нормально, но вызов tweet("testing!")
вернет ошибку.
Как вы можете видеть из комментариев, я пробовал кодировать его сам, но либо возвращалась та же ошибка, либо он отправлял твит с закодированный статус.
Помощь? Спасибо заранее!