2015年12月29日 星期二

Parse CloudCode實作----backgroundjob和geopoint

parse有提供內建的geopoint,再結合上google map api 所給的轉換function,我們可以將所有地址資料轉換成經緯度。
這個project呢,我們先搜集了高雄的公私立醫療診所的所有資料(包括電話、地址、名稱)
可以是json或是csv檔,但要先確認是不是亂碼喔

第一個目標是將這些全部上傳到table後,用cloudcod去處理,讓全部都產生經緯度。
第二個目標是,因為有request數量限制(好像是一秒30個之類的,反正log會顯示超過),所以要利用background job來做,才不會超過request。

遇見的困難有:
第一:google api使用
第二:backgroundjob呼叫的注意事項(傳的參數)
第三:遇到無法辨別的就卡住(後來設90,90)
第四:怎麼看log
首先我們要先將檔案上傳到parse 的table,先到parse自己project的部分,側邊欄有一個



將檔案選進去之後,他會先檢查你格式是不是json或csv,然後就會開始上傳





ok!資料上傳成功!
再來要開始處理資料了
到 https://developers.google.com/maps/web/?hl=zh-tw

這邊有很多可以使用的部分,因為我們是自己處理資料用的,所以我們要申請的server的api,按下取得金鑰之後

接下來就要開始註冊了

先幫自己的專案取個名字


這邊參照的網址可以填入你在parse設定的host name,我沒有試過沒填,但照他的意思應該是可以啦~


在這邊我們取用server的,等等再include的時候會用到。
申請好了之後接下來https://developers.google.com/maps/documentation/geocoding/intro?hl=zh-tw
裡面有詳細解說,我這邊只會講使用,有興趣的人再去看~

include進來之後,我們現在就開始使用他的語法,由於處理資料是server,我們要把程式碼放在js中,我是放在main.js裡面

本來想利用query的概念將每筆資料做處理,如此可以一筆一筆都讀到。
於是回傳的就是座標了!可以利用parse object的set去儲存到table中,可是在這邊我們雖然可以順利的把一筆資料轉成座標,卻沒辦法將所有的都產生玩,原因就在於我們超過Parsez負載的reauest量,唯一的解決辦法就是把這個function寫成backgroudjob,隔一段時間執行隔一段時間再執行,在Parse的官方網站有關於backgroundjob的細節可以自己看,我只把使用方方寫出來
第一步:先把function內容全部定義成cloud function
第二步:用backgroundjob呼叫這個cloud function
第三步:在parse的網站中設定多久跑一次這個background job


第一先把上面的這些包進去這個裡面
定義成一個cloud function

第二步再定義成backgroudjob


注意ㄛ~有request、response這種的你都一叫得回傳給他一個答案(成功或是失敗),不然是沒辦法跑的喔


第三,我們到parse裡面,去設定job


然後開始設定開始跟重複的時間,名字就是我們剛剛在定義cloud job的時候給的名字,我自己是設定一分鐘一次,這樣隔天來上班可能就差不多好了
成功!接下來就去吃個飯回來之後看一下log

結果卡住了!!!!!跑到一個之後就不在跑了!!!發現原因是因味那個地址是錯的,永遠找不到,所以表示轉換的時候status沒有回傳ok,那我們就多放一個else,當不是ok的時候就將它得座標設為(90,90),這樣到時候就很方便看哪些地址有誤了。



沒有留言:

張貼留言