Публикуйте обновления в Твиттере с помощью Twitterizer
-
25-09-2019 - |
Вопрос
У меня есть этот фрагмент кода:
var settings = WebConfigurationManager.AppSettings;
var consumerKey = settings["Twitter.ConsumerKey"];
var consumerSecret = settings["Twitter.ConsumerSecret"];
var authToken = settings["Twitter.OAuthToken"];
var authVerifier = settings["Twitter.OAuthVerifier"];
//var accessToken = GetAccessToken(
// consumerKey, consumerSecret, authToken, string.Empty);
var tokens = new OAuthTokens()
{
AccessToken = authToken,
AccessTokenSecret = authVerifier,
ConsumerKey = consumerKey,
ConsumerSecret = consumerSecret
};
TwitterStatus.Update(tokens, txtComment.Text);
Все, что мне нужно, это обновить свой статус в Твиттере.К сожалению, это не работает.Это сработало только один раз, когда я впервые вошел в Твиттер, чтобы предоставить доступ приложению.Затем я сохранил authToken и authVerifier, чтобы иметь возможность повторно использовать их для будущих обновлений.
Есть идеи, что не так?
ОБНОВЛЯТЬ: Я просто изменил код на:
TwitterResponse<TwitterStatus> tweetResponse = TwitterStatus.Update(tokens, txtComment.Text);
if (tweetResponse.Result == RequestResult.Success)
lblMessage.Text = "Twitter status successfully posted.";
else
lblMessage.Text = string.Format("Twitter status update failed with Error: '{0}'",
tweetResponse.ErrorMessage);
и я получаю сообщение об ошибке: «Недействительный/истекший токен».
Решение
Вы храните неправильные значения. Значения Aughtinkoken и Veryifier должны быть быстро обменены для токена доступа, используя OAUSTUTIVE. GTEACCESSTOKEKEN (...). Токен доступа, который возвращается из этого метода, это то, что следует хранить и поставляться в Twitterizer.
-Мань
Twitterizer автор
Другие советы
Я хотел иметь возможность выполнять простое обновление статуса из C#/.NET, но не хотел встраивать большую библиотеку.
Поэтому я написал небольшой Класс OAuth.Manager это делает эту штуку.
Это описано здесь:
OAuth с проверкой в .NET
Пример кода для обновления статуса:
var oauth = new OAuth.Manager();
oauth["consumer_key"] = CONSUMER_KEY;
oauth["consumer_secret"] = CONSUMER_SECRET;
oauth["token"] = your_stored_access_token;
oauth["token_secret"] = your_stored_access_secret;
var url = "http://api.twitter.com/1/statuses/update.xml?status=Hello+World";
var authzHeader = oauth.GenerateAuthzHeader(url, "POST");
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Headers.Add("Authorization", authzHeader);
using (var response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode != HttpStatusCode.OK)
MessageBox.Show("There's been a problem trying to tweet:" +
Environment.NewLine +
response.StatusDescription +
Environment.NewLine +
Environment.NewLine +
"You will have to tweet manually." +
Environment.NewLine);
}
При первом прохождении вам необходимо получить токен доступа и секрет.Это делается в многоэтапном процессе, начиная с этого кода:
var oauth = new OAuth.Manager();
oauth["consumer_key"] = MY_APP_SPECIFIC_KEY;
oauth["consumer_secret"] = MY_APP_SPECIFIC_SECRET;
oauth.AcquireRequestToken("https://api.twitter.com/oauth/request_token", "POST");
Шаг 2. Попросите пользователя** посетить https://api.twitter.com/oauth/authorize?oauth_token=XXXX
где xxxx заменяется фактическим полученным токеном, доступным в данном случае oauth["token"]
.Шаг 3 — предложить пользователю взять (ctrl-c) ПИН-код с веб-страницы и вставить его в свое приложение, где вы используете этот ПИН-код для получения токена другого типа.
Лучший способ — автоматизировать эту последовательность веб-интерфейса с помощью формы Windows со встроенным элементом управления WebBrowser.Когда вы установите для свойства Url этого элемента управления соответствующее значение, он отобразит вам эту веб-страницу внутри основной формы вашего собственного приложения.Вы также можете автоматизировать ту часть, где вы получаете PIN-код.Это уменьшает количество переключений контекста для вашего пользователя и упрощает понимание.
В любом случае, с булавкой, которую вы делаете, шаг 4:
oauth.AcquireAccessToken("https://api.twitter.com/oauth/access_token",
"POST",
pin);
... который отправляет еще один HTTP-запрос REST, и когда он возвращается, у вас будет токен доступа и секрет, доступные в oauth["token"]
и oauth["token_secret"]
.
Эта авторизация с помощью веб-интерфейса должна произойти только один раз;после того, как вы получите токен доступа и секрет один раз, вы можете сохранить их и повторно использовать.Срок их действия никогда не истекает, сообщает Twitter.
Затем вы можете перейти к отправке обновления статуса...
var url = "http://api.twitter.com/1/statuses/update.xml?status=Hello+World";
var authzHeader = oauth.GenerateAuthzHeader(url, "POST");
...
...как указано выше.
Я знаю, что я опоздал в игру, но я создал концептуальный видеоурок, показывающий именно как это сделать: я создаю приложение на dev.twitter.com, установить Twitterizer с помощью NugeT, напишите код для обработки oAuth И, наконец, напишите код, чтобы использовать токены доступа, полученные из Twitter, чтобы сделать твиттер.
Видео: http://www.youtube.com/watch?v=tgea1sgmmmqu
Руководство: http://www.markhagan.me/samples/grant-access-and-tweet-as-twitter-user-aspnet.
Код (если вы не хотите покинуть эту страницу):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Twitterizer;
namespace PostFansTwitter
{
public partial class twconnect : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var oauth_consumer_key = "YOUR_CONSUMER_KEY_HERE";
var oauth_consumer_secret = "YOUR_CONSUMER_SECRET_KEY_HERE";
if (Request["oauth_token"] == null)
{
OAuthTokenResponse reqToken = OAuthUtility.GetRequestToken(
oauth_consumer_key,
oauth_consumer_secret,
Request.Url.AbsoluteUri);
Response.Redirect(string.Format("http://twitter.com/oauth/authorize?oauth_token={0}",
reqToken.Token));
}
else
{
string requestToken = Request["oauth_token"].ToString();
string pin = Request["oauth_verifier"].ToString();
var tokens = OAuthUtility.GetAccessToken(
oauth_consumer_key,
oauth_consumer_secret,
requestToken,
pin);
OAuthTokens accesstoken = new OAuthTokens()
{
AccessToken = tokens.Token,
AccessTokenSecret = tokens.TokenSecret,
ConsumerKey = oauth_consumer_key,
ConsumerSecret = oauth_consumer_secret
};
TwitterResponse<TwitterStatus> response = TwitterStatus.Update(
accesstoken,
"Testing!! It works (hopefully).");
if (response.Result == RequestResult.Success)
{
Response.Write("we did it!");
}
else
{
Response.Write("it's all bad.");
}
}
}
}
}