这是我的代码
由于某种原因,我无法更新状态,我收到此错误。
您的凭据不允许在
访问此资源var tweet = twitterCtx.UpdateStatus(“Hello world”);
var auth = new ApplicationOnlyAuthorizer
{
Credentials = new InMemoryCredentials
{
ConsumerKey = "",
ConsumerSecret = ""
}
};
auth.Authorize();
//auth.Invalidate();
var twitterCtx = new TwitterContext(auth);
var tweet = twitterCtx.UpdateStatus("Hello world");
我检查了我的ConsumerKey和Secret是正确的,我也给了我的应用程序读写访问权限。我能够获得以前的状态,用户名,但我无法发布新状态
答案 0 :(得分:1)
仅应用程序授权只能执行应用程序级别的操作。这与允许您代表用户操作的其他授权者不同。逻辑是用户有帐户,但应用程序没有。因此,您无法代表应用程序发推文,因为推文无法在任何地方分配。但是,如果您代表用户发推文,则推文会进入该用户的状态列表(其时间轴)。
LINQ to Twitter有各种授权人,您可以通过下载特定于您正在使用的技术的样本来查看它们。可下载的源代码也有样本。以下是如何使用PIN授权程序的示例:
static ITwitterAuthorizer DoPinOAuth()
{
// validate that credentials are present
if (ConfigurationManager.AppSettings["twitterConsumerKey"].IsNullOrWhiteSpace() ||
ConfigurationManager.AppSettings["twitterConsumerSecret"].IsNullOrWhiteSpace())
{
Console.WriteLine("You need to set twitterConsumerKey and twitterConsumerSecret in App.config/appSettings. Visit http://dev.twitter.com/apps for more info.\n");
Console.Write("Press any key to exit...");
Console.ReadKey();
return null;
}
// configure the OAuth object
var auth = new PinAuthorizer
{
Credentials = new InMemoryCredentials
{
ConsumerKey = ConfigurationManager.AppSettings["twitterConsumerKey"],
ConsumerSecret = ConfigurationManager.AppSettings["twitterConsumerSecret"]
},
AuthAccessType = AuthAccessType.NoChange,
UseCompression = true,
GoToTwitterAuthorization = pageLink => Process.Start(pageLink),
GetPin = () =>
{
// this executes after user authorizes, which begins with the call to auth.Authorize() below.
Console.WriteLine("\nAfter authorizing this application, Twitter will give you a 7-digit PIN Number.\n");
Console.Write("Enter the PIN number here: ");
return Console.ReadLine();
}
};
// start the authorization process (launches Twitter authorization page).
auth.Authorize();
return auth;
}
此方法返回PinAuthorizer,auth的实例,您可以使用以下内容:
PinAuthorizer auth = DoPinAuth();
var ctx = new TwitterContext(auth);
ctx.UpdateStatus("Hello LINQ to Twitter!");
*更新*
前面的代码是从旧版本的LINQ到Twitter。以下是如何使用较新的异步版本执行此操作的示例:
static IAuthorizer DoPinOAuth()
{
var auth = new PinAuthorizer()
{
CredentialStore = new InMemoryCredentialStore
{
ConsumerKey = ConfigurationManager.AppSettings["consumerKey"],
ConsumerSecret = ConfigurationManager.AppSettings["consumerSecret"]
},
GoToTwitterAuthorization = pageLink => Process.Start(pageLink),
GetPin = () =>
{
Console.WriteLine(
"\nAfter authorizing this application, Twitter " +
"will give you a 7-digit PIN Number.\n");
Console.Write("Enter the PIN number here: ");
return Console.ReadLine();
}
};
return auth;
}
然后你可以像这样使用它:
var auth = DoPinOAuth();
await auth.AuthorizeAsync();
var twitterCtx = new TwitterContext(auth);
await twitterCtx.TweetAsync("Hello LINQ to Twitter!");
有关详细信息,您可以找到Documentation和Source代码。源代码在 New \ Demos 文件夹中有演示。
答案 1 :(得分:0)
TwitterContext上有一个名为UpdateStatus的方法,您可以这样使用:
twitterCtx.UpdateStatus(" Your text goes here ");
您需要使用OAuth授权才能使用此功能,因此请在演示中使用PIN选项。获得授权后,您可以调用UpdateStatus。