在asp.net中代表用户发推文

时间:2013-11-26 20:18:52

标签: c# asp.net twitter webforms

我一直在寻找在Webforms中代表用户发布推文的最新方法。我遇到的大部分信息都发布在2010年左右,涉及Twitter API,Twitter API不再支持Twitterizer。我的问题是,是否有任何更新的文档或示例,有关该主题的教程?

我已经创建了我的应用程序,拥有消费者密钥和秘密,但我遇到的大部分代码都是在php中。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

由于您正在使用WebForms(通过评论中的回复),这里是一个使用LINQ to Twitter代表另一个用户发送推文的示例。其他示例可能会向您展示如何将签名添加到授权标头,但您仍需要管理OAuth工作流。这可以让您了解如何在WebForms中管理该工作流。

LINQ to Twitter使用不同的授权人来管理生成OAuth签名,管理凭据和支持OAuth工作流的过程。首先,实例化WebAuthorizer,如下所示:

public partial class _Default : System.Web.UI.Page
{
    private WebAuthorizer auth;
    private TwitterContext twitterCtx;

    protected void Page_Load(object sender, EventArgs e)
    {
        IOAuthCredentials credentials = new SessionStateCredentials();

        if (credentials.ConsumerKey == null || credentials.ConsumerSecret == null)
        {
            credentials.ConsumerKey = ConfigurationManager.AppSettings["twitterConsumerKey"];
            credentials.ConsumerSecret = ConfigurationManager.AppSettings["twitterConsumerSecret"];
        }

        auth = new WebAuthorizer
        {
            Credentials = credentials,
            PerformRedirect = authUrl => Response.Redirect(authUrl)
        };

WebAuthorizer只需要您的ConsumerKey和ConsumerSecret,它们可以保存在web.config中。授权过程分为两部分,因为您必须将用户发送到Twitter以授权您的应用,然后Twitter将用户重定向回您的页面以收集其他两个令牌,即oauth_token和access_token。这意味着您需要逻辑来处理来自Twitter的回调,这可能如下所示:

        if (!Page.IsPostBack && Request.QueryString["oauth_token"] != null)
        {
            auth.CompleteAuthorization(Request.Url);
        }

这是在您实例化WebAuthorizer并确保在执行完成之前处理Twitter回调之后。调用CompleteAuthorize后,进入auth.Credentials并获取新的用户凭据并将其保存给登录用户。在后续查询中,您可以将所有4个凭据加载到WebAuthorizer中,LINQ to Twitter也可以正常运行,而无需用户再次授权您的应用程序。

获得凭据后,您可以实例化TwitterContext,从而可以访问Twitter API。这是一个执行该操作并执行查询的示例:

        if (auth.IsAuthorized)
        {
            twitterCtx = new TwitterContext(auth);

            var search =
                (from srch in twitterCtx.Search
                 where srch.Type == SearchType.Search &&
                       srch.Query == "LINQ to Twitter"
                 select srch)
                .SingleOrDefault();

            TwitterListView.DataSource = search.Statuses;
            TwitterListView.DataBind(); 
        }

此代码遵循对auth.CompleteAuthorize的调用,以确保填充所有凭据。 auth.IsAuthorized验证是否存在所有4个凭据。

这是TwitterContext部分的完成和实例化,但您首先需要启动oauth进程。这是一个执行该操作的按钮单击处理程序:

    protected void authorizeTwitterButton_Click(object sender, EventArgs e)
    {
        auth.BeginAuthorization(Request.Url);
    }

只需调用BeginAuthorization,它执行分配给WebAuthorizer的PerformRedirect属性的回调,将用户发送到Twitter以授权您的应用。如前所述,Twitter将用户重定向回您的页面,并执行CompleteAuthorization以完成授权过程。我通常将OAuth逻辑放在单独的页面上以简化操作。

用户授权您的应用后,您可以执行所需的任何查询,例如下面为用户发送一些文字的方法:

    protected void postUpdateButton_Click(object sender, EventArgs e)
    {
        if (!Page.IsValid)
        {
            return;
        }

        twitterCtx.UpdateStatus(updateBox.Text);
        updateBox.Text = string.Empty;
    }

提示:SessionStateCredentials以会话状态存储凭据。所以,你想确保你使用状态服务器,SQL服务器,但绝对不是InProc。

CodePlex.com上的LINQ to Twitter站点上有文档,可下载源代码中有LinqToTwitterWebFormsDemo中的工作演示。