2012-07-02 25 views
3

我一直在關注這個偉大的教程:提取Twitter的PIN信息,WP7

http://buildmobile.com/twitter-in-a-windows-phone-7-app/#fbid=o0eLp-OipGa

但似乎在用的銷釘提取方法不適合我的工作或已過期。我不是HTML報廢方面的專家,他想知道是否有人可以幫我找到一個解決方案來解壓縮引腳。由教程中使用的方法是:

private void BrowserNavigated(object sender, NavigationEventArgs e){ 
if (AuthenticationBrowser.Visibility == Visibility.Collapsed) { 
    AuthenticationBrowser.Visibility = Visibility.Visible; 
} 
if (e.Uri.AbsoluteUri.ToLower().Replace("https://", "http://") == AuthorizeUrl) { 
    var htmlString = AuthenticationBrowser.SaveToString(); 
    var pinFinder = new Regex(@"<DIV id=oauth_pin>(?<pin>[A-Za-z0-9_]+)</DIV>", RegexOptions.IgnoreCase); 
    var match = pinFinder.Match(htmlString); 
    if (match.Length > 0) { 
     var group = match.Groups["pin"]; 
     if (group.Length > 0) { 
      pin = group.Captures[0].Value; 
      if (!string.IsNullOrEmpty(pin)) { 
       RetrieveAccessToken(); 
      } 
     } 
    } 
    if (string.IsNullOrEmpty(pin)){ 
     Dispatcher.BeginInvoke(() => MessageBox.Show("Authorization denied by user")); 
    } 
    // Make sure pin is reset to null 
    pin = null; 
    AuthenticationBrowser.Visibility = Visibility.Collapsed; 
} 

}

當通過代碼運行,「匹配」最終總是零和所述銷從來沒有發現。本教程中的其他內容都可以工作,但由於頁面的新結構,我不知道如何操作此代碼來提取引腳。

我真正體會到了時間,

邁克

回答

2

我發現,Twitter也有2個不同的密碼頁面,我想他們確定哪些頁面重定向到根據您的瀏覽器。

和字符串解析一樣簡單的東西都適合你。我碰到的第一個PIN頁有包裹在一個< .CODE>標籤的PIN碼,所以乾脆找< .CODE>和解析出來:

if (innerHtml.Contains("<code>")) 
{ 
    pin = innerHtml.Substring(innerHtml.IndexOf("<code>") + 6, 7); 
} 

其他頁面,我碰到(看起來像如果我記得正確的話,那麼你正在使用的教程中的那個)使用id =「oauth_pin」進行包裝。所以,只需解析:

else if(innerHtml.Contains("oauth_pin")) 
{ 
    pin = innerHtml.Substring(innerHtml.IndexOf("oauth_pin") + 10, 7); 
} 

innerHtml是一個字符串,它包含頁面的主體。這似乎是var htmlString = AuthenticationBrowser.SaveToString();從你的代碼。

我用這兩個在我的C#程序和他們的工作飄滿片段:

private void WebBrowser1DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
     var innerHtml = webBrowser1.Document.Body.InnerHtml.ToLower(); 
     var code = string.Empty; 
     if (innerHtml.Contains("<code>")) 
     { 
      code = innerHtml.Substring(innerHtml.IndexOf("<code>") + 6, 7); 
     } 
     else if(innerHtml.Contains("oauth_pin")) 
     { 
      code = innerHtml.Substring(innerHtml.IndexOf("oauth_pin") + 10, 7); 
     } 
     textBox1.Text = code; 
} 

讓我知道如果你有任何問題,我希望這可以幫助!

1

我需要這一個改變從托馬一個建議代碼:

var innerHtml = webBrowser1.SaveToString(); 
     var code = string.Empty; 

     if (innerHtml.Contains("<code>")) 
     { 
      code = innerHtml.Substring(innerHtml.IndexOf("<code>") + 6, 7); 

     } 

     else if (innerHtml.Contains("oauth_pin")) 
     { 
      code = innerHtml.Substring(innerHtml.IndexOf("oauth_pin") + 10, 7); 
     } 

因爲這一個沒有作品的Windows Phone

var innerHtml = webBrowser1.Document.Body.InnerHtml.ToLower();