iT邦幫忙

DAY 22
4

Windows Phone 程式開發系列 第 19

[WP 開發] 宜蘭縣政府資料開放平台 App 開發 (1) 透過 Google Drive 介接資料

在宜蘭縣政府資料開放平台僅提供 CSV 檔案做為資料來源,但對於 Windows Phone 應用程式而言,如果將 CSV 檔案直接包在應用程式中,日後要更新資料則必須重新封裝應用程式並且發佈到市集,本文參考微軟最有價值專家當麻的做法,透過 Google Drive 放置宜蘭縣政府資料開放平台 CSV 檔案進行讀取。

本文刊載於
http://www.dotblogs.com.tw/chou/archive/2013/11/01/126406.aspx

在這篇文章您可以學到

  1. 如何將資料上傳到 Google Drive 並且取得下載網址
  2. 撰寫程式下載資料
  3. 解析 CSV 資料

前言

指導的學生參與技術達人來挑戰活動,其中有題目是宜蘭縣政府資料開放平台,以宜蘭縣民宿名冊而言,資料網址如下所示:

http://opendata.e-land.gov.tw/OpenData/Display.aspx?guid=1de99984-1f70-410a-9b50-125879f104ff

其中只有 CSV 檔案可以下載,並無開放資料介接網址可以直接使用,如果將 CSV 檔案直接包在 Windows Phone 專案中,日後想要更新相關資訊,則需要重新封裝和上架到市集。

微軟最有價值專家當麻有提供一種做法,是將檔案放到 Google Drive 中,讓 Windows Phone 應用程式下載與讀取,文章的網址:

本文將撰寫一個範例,將宜蘭縣民宿資料放置在網路磁碟作為資料介接,讓 Windows Phone 應用程式讀取檔案並且顯示。

將 CSV 資料檔案放置到 Google Drive 並取得下載連結

先從宜蘭縣政府資料開放平台,下載宜蘭民宿名冊的 CSV 檔案下載,先做變更編碼為 UTF-8,以避免後續處理時有亂碼問題;以記事本開啟該檔案。

另存新檔,選擇編碼為 UTF-8,檔案名稱為 HomeStay.csv。

我們將以此檔案上傳到 Google Drive。

連結到 Google Drive,網址:https://drive.google.com/‎ 並且登入您的 Google 帳號,建立一個資料夾名為 Public。

把 HomeStay.csv 檔案上傳到 Public 資料夾。

上傳時可能會出現上傳設定視窗,先取消勾選相關轉換項目,按 [開始上傳]。

在 HomeStay.csv 檔案按滑鼠右鍵,選擇 [共用]。

在 [擁有存取權的使用者] 分類中,選擇 [變更]。

勾選 [公開在網路上],按 [儲存]。

取得共用連結 sharing link

https://drive.google.com/file/d/0B34Keu0W\_LIJODdEYUhVSDZIS28/edit?usp=sharing

連結到 Google Drive Direct Lick Geberator,網址:https://sites.google.com/site/gdocs2direct/,透過該網頁功能,取得下載連結:

Windows Phone 應用程式開發

首先做下載 CSV 資料檔案,新增專案

開啟 MainViewModel.cs,將 LoadData() 方法修改為

/// <summary>
/// 建立並加入一些 ItemViewModel 物件到 Items 集合。
/// </summary>
public void LoadData()
{
    HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://docs.google.com/uc?export=download&id=0B34Keu0W_LIJODdEYUhVSDZIS28");
    httpWebRequest.BeginGetResponse(new AsyncCallback(GetHttpDocumentCallback), httpWebRequest);

    this.IsDataLoaded = true;
}

新增 GetHttpDocumentCallback 方法

private void GetHttpDocumentCallback(IAsyncResult iAsyncResult)
{
    HttpWebRequest httpWebRequest = (HttpWebRequest)iAsyncResult.AsyncState;
    HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.EndGetResponse(iAsyncResult);
    using (StreamReader responseStream = new StreamReader(httpWebResponse.GetResponseStream()))
    {
        string stream = responseStream.ReadToEnd();
        if (string.IsNullOrEmpty(stream))
        {
            return;
        }
    }
}

設定中斷點,檢視下載 CSV 資料檔案是否成功。

如果你看到像下圖資料呈現亂碼,表示在先前步驟您沒有變更編碼為 UTF-8

我們嘗試異動資料,來試試看 App 是否會跟著改變,開啟位於電腦中的 HomeStay.csv 檔案,並且修改一些資料,例如我多加了一筆小歐民宿的資料到裡面。

連結到 Google Drive 在先前上傳的 HomeStay.csv 上按滑鼠右鍵,選擇 [管理修訂版本]。

選擇 [上傳新的修訂版本],選擇本機電腦修改好的檔案進行上傳。

可以看到多了一個新版本。

重新執行應用程式,可以看到資料已經更新。

當我們取得資料後,接著就要進行分析資料,由於下載的資料是 CSV 檔案,我們需要解析 CSV 資料並且放進 Items 中,可以使用的套件有很多,在此我使用 KBCsv,網址:http://kbcsv.codeplex.com/,在 Nuget 搜尋即可進行安裝。

一樣在 MainViewModel.cs 做修改,先 using namespace。

using Kent.Boogaart.KBCsv;

將 GetHttpDocumentCallback 方法做修改,原本是將下載的資料流放到字串中,改為使用 CsvReader 類別解析,並且將資料塞進 Items 各個屬性中。

private void GetHttpDocumentCallback(IAsyncResult iAsyncResult)
{
    HttpWebRequest httpWebRequest = (HttpWebRequest)iAsyncResult.AsyncState;
    HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.EndGetResponse(iAsyncResult);
    using (StreamReader responseStream = new StreamReader(httpWebResponse.GetResponseStream()))
    {
        //string stream = responseStream.ReadToEnd();
        //if (string.IsNullOrEmpty(stream))
        //{
        //    return;
        //}
        using (var reader = new CsvReader(responseStream))
        {
            reader.ReadHeaderRecord();

            while (reader.HasMoreRecords)
            {
                var record = reader.ReadDataRecord();
                Deployment.Current.Dispatcher.BeginInvoke(new Action(() =>
                 {
                     this.Items.Add(new ItemViewModel()
                     {
                         LineOne = record["中文名稱"],
                         LineTwo = record["聯絡電話"],
                         LineThree = record["民宿中文地址"]
                     });
                 }));
            }
        }
    }
}

執行應用程式,可以看到資料顯示在畫面中。


上一篇
[WP 開發] 文化部資料開放服務網 App 開發 (2) 地圖
下一篇
[WP 開發] 宜蘭縣政府資料開放平台 App 開發 (2) Isolated Storage 應用
系列文
Windows Phone 程式開發27

2 則留言

0

我要留言

立即登入留言