[c#] winphone plurk app 開發紀錄 (二)

摘要:[c#] winphone plurk app 開發紀錄 (二)

前陣子 被Chrono Plurk 搞到很煩,所以興起了自己也來寫一個的念頭。

在此紀錄一下自己開發的過程。

=====================================================

參考資料:

小朱的OAuth 系列文 

小朱的 EasyOAuth  Libray 2.0 sp1

OAuth  Core 1.0a spec

Plurk 2.0 API Reference

忠成老師的 Windows Phone 7 Web Browser 控制項應用 Part 1

====================================================

前一篇已經取得了 request_token 及 request_token_secret

接下來就是要取得使用者的授權

在專案中 新增一個 Window Phone Page

page 中 放一個 WebBrowser 控制項

 


        <phone:WebBrowser HorizontalAlignment="Left" Margin="12,12,0,0" Name="plurkPage" VerticalAlignment="Top" Height="744" Width="456" Source="" LoadCompleted="plurkPage_LoadCompleted" />



        private void RetrieveRequestTokenCompleted(object sender, RequestTokenEventArgs e)
        {
            RequestToken = e.Token;
            object deviceName;
            string plurkLoginUri = string.Empty;
            if (DeviceExtendedProperties.TryGetValue("DeviceName", out deviceName))
                plurkLoginUri = string.Format("http://www.plurk.com/m/authorize?oauth_token={0}&deviceid={1}", RequestToken, deviceName.ToString());
            else
                plurkLoginUri = string.Format("http://www.plurk.com/m/authorize?oauth_token={0}", RequestToken);
            plurkPage.Navigate(new Uri(plurkLoginUri, UriKind.Absolute));
        }

 

然後將 WebBrowser 的Source 指向 噗浪專門給手機應用程式用的驗證網址  http://www.plurk.com/m/authorize?oauth_token=xxxxxxx  或是   http://www.plurk.com/m/authorize?oauth_token=xxxxxxx &deviceid=yyyyyyyyy

如此網頁就會導向到驗證頁(如果使用者尚未登入 會先導向登入頁 待登入成功後, 會自動導回認證頁)

當使用者同意後,會再導向另一個網頁。再這個網頁會有我們所需要的oauth_verifier。

至於程式要怎麼取得這個資料呢?  簡單一點, 放個textbox 請使用者輸入 。麻煩一點, 讀取Web的資料。

在Windows Phone的WebBrowser 沒有 WebBrowser.Document 可以使用。

不過還好有InvokeScript這個方法。(可以參考 忠成老師的 Windows Phone 7 Web Browser 控制項應用 Part 1 )

只不過要使用這個方法必須再載入要引用的網頁之前就先設定 IsScriptEnable = true ;

而最後產生oauth_verifier的網頁是 http://www.plurk.com/OAuth/authorizeDone

在這個網頁中 會有一段 <span id="oauth_verifier">xxxxxx</span> 。這段就是我們要擷取的資料了

因此,我們可以在 webbrowser的 LoadCompleted 中加入以下這段程式


        private void plurkPage_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
        {
            if (e.Uri.ToString() == "http://www.plurk.com/OAuth/authorizeDone")
            {
                InvokeScript();
            }
            else
            {
                plurkPage.IsScriptEnabled = true;
            }
        }


        private void InvokeScript()
        {
            plurkPage.InvokeScript("eval",
@"window.getVerifier=function() {
    var elem = document.getElementById('oauth_verifier');
    return elem.innerHTML;
}");
            verifier = (string)plurkPage.InvokeScript("getVerifier");
        }

 

 

 

 

取得 oauth_verifier 之後, 就可以取得 oauth_access_token 及 oauth_access_secret 了