摘要:[c#] winphone plurk app 開發紀錄 (二)
前陣子 被Chrono Plurk 搞到很煩,所以興起了自己也來寫一個的念頭。
在此紀錄一下自己開發的過程。
=====================================================
參考資料:
忠成老師的 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 了