我一直在关注这个很棒的教程:
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;
}
}
在运行该代码时,“匹配”始终为空,并且永远找不到引脚。本教程中的其他所有内容都有效,但由于页面的新结构,我不知道如何操作此代码来提取引脚。
我非常感谢时间,
麦克
答案 0 :(得分:2)
我发现Twitter有2个不同的PIN页面,我认为他们会根据您的浏览器确定将您重定向到哪个页面。
像字符串解析这样简单的东西对你有用。我遇到的第一个PIN页面的PIN码包含在&lt; .code&gt;中。标签,所以只需查找&lt; .code&gt;并解析出来:
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 :(得分:1)
我需要更改Toma A建议的代码:
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();