2013-11-26 40 views
2

我一直在尋找最新的代表用戶在Webforms中發佈推文的方法。我所遇到的大部分信息都是在2010年左右發佈的,涉及Twitterizer,而Twitterizer不再支持Twitter API。我的問題是,有沒有更新的文檔或例子,關於這個問題的教程?在asp.net代表用戶發送推文

我已經創建了我的應用程序,擁有消費者密鑰和祕密,但我遇到的大部分代碼都是在php中。任何幫助,將不勝感激。

+1

我已經發布了關於如何驗證和使用他們的API的答案。可能對你有些用處。 http://stackoverflow.com/questions/17067996/authenticate-and-request-a-users-timeline-with-twitter-api-1-1-oauth/17071447#17071447 – hutchonoid

+0

你使用WebForms或MVC?我支持LINQ to Twitter:https://linqtotwitter.codeplex.com/,它允許您使用Twitter提供的任何類型的OAuth。一旦我知道你在使用什麼,我可以用它的工作原理來回答。 –

+0

該網站是用webforms構建的。 –

回答

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工作演示。

+0

說這個功能是要進入一個服務,在那種情況下你將如何處理重定向? –

+0

OAuth本質上是爲Web構建的(允許用戶授權您的應用程序以其名義運行)。所以,其他方案需要不同的方法。在服務(Web或Windows)的情況下,我的用例通常是單用戶。因此,您可以使用SingleUserAuthorizer或ApplicationOnlyAuthorizer,它們都需要所有4個OAuth令牌。重定向只需要在用戶第一次授權您的應用程序時發生。如果您不使用先前的選項,則可以保存令牌並將令牌發送到服務。 –

+0

有沒有任何例子可以聯繫到我呢? –