Linq到Twitter状态更新

时间:2013-05-21 10:06:51

标签: c# twitter

这是我的代码

由于某种原因,我无法更新状态,我收到此错误。

您的凭据不允许在

访问此资源

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是正确的,我也给了我的应用程序读写访问权限。我能够获得以前的状态,用户名,但我无法发布新状态

2 个答案:

答案 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!");

有关详细信息,您可以找到DocumentationSource代码。源代码在 New \ Demos 文件夹中有演示。

答案 1 :(得分:0)

TwitterContext上有一个名为UpdateStatus的方法,您可以这样使用:

twitterCtx.UpdateStatus(" Your text goes here ");

您需要使用OAuth授权才能使用此功能,因此请在演示中使用PIN选项。获得授权后,您可以调用UpdateStatus。