2013年8月21日 星期三

[筆記] Google Drive API兩三事: App data, 靜態網頁連結

颱風天, 適合寫點東西, 所以就把上次的PinterestRSSAggregator加上發佈到Google Drive功能, 第一次碰Google drive api, 不過還好Google已經有了一個node.js的module: https://github.com/google/google-api-nodejs-client,省去了重刻Google API的功(這module還頗有趣的, 利用了Google discovery API, 支援了相當多Google API, 但實際上各API的細節的實作卻不在這module之中), 不過一開始還是在Google drive上碰到了一些問題:
  1. 想說要存個設定檔, 但檔案如果可以被使用者看到, 就會有機會被他砍了
  2. 因為是要發佈rss檔, 所以最好可以有一靜態連結
  3. Google drive是允許在同一目錄有同名的檔案的, 這似乎跟Dropbox不一樣, 它真正獨一無二的識別是id不是檔名, 所以要更新某個檔案還得先找到它的id, 有點小麻煩
第一項的解法還蠻簡單, 只要使用app data就好, 這目錄比較單純, 它的id就叫做"appdata"(真是夠怪了, 這個id是固定的, 但使用者的根目錄的id卻不是, 還得先用about去取得), 我用它實作了一個放設定的(參考這, AppConfig), 放在這目錄的好處是不會被使用者看到並刪除掉, 但要注意的一點是, 取得auth token時所做的認證用的scope必須包含"https://www.googleapis.com/auth/drive.appdata"

至於第二項的作法就是建立一個public folder, 並取得這目錄的webViewLink, 比如說是"https://www.googledrive.com/host/0B5rbRldWhe82WjhURVdkSzUxTjA/", 這樣你在這目錄下建的檔案, 例如 julianshen.rss 就可以用 "https://www.googledrive.com/host/0B5rbRldWhe82WjhURVdkSzUxTjA/julianshen.rss" 這連結來存取

2013年8月14日 星期三

看著海寫程式會不會太宅點? - PinterestRSSAggregator


陽光....跟沙灘呀......真是好風景呀....躺著寫程式真不錯 (其實在顧包包)

昨天上飛機前, 把這兩天晚上寫的東西, PinterestRSSAggregator, 在上飛機之前放上了github....趁現在來補一些內容

會寫這東西的緣起在於這篇: http://nickinglis.com/index.php/blog/item/how-to-get-your-pinterest-rss-feed

Pinterest目前沒API, 這RSS也只能取得一個人最近的資訊, 但常常我們要看的不會是自己去pin的, 而是自己所follow的人pin的最新資訊, 所以這樣的RSS用處就嫌少了點, 所以想說如果可以把自己所follow的全部集結成一個rss應該會很不錯, 因此就寫了這些東西

一開始碰到的問題點是, 沒API, 怎抓following的資訊? 從 http://pinterest.com/xxxx/following的網頁去解析, 似乎每個被follow的人的link都有userWrapper這class, 這或許是個出發點, 所以第一個版本做了一個直接去抓網頁回來解析抓出含有這class的連結....但是...失敗了...因為抓回來的靜態網頁, 最多只有十二個人的連結, 超過就抓不到, 網頁上要滑鼠捲到最下面才會再load出其他的

後來想到的方法就是利用CasperJS, 模擬捲頁捲到最後的行為, 再把所有followings都抓回來....喔耶....這招居然行的通....把所有rss 的url再用Google Feed API去抓內容(我懶得parse RSS了), 再用feed這module生成新的RSS....大功告成....接下來只要讓他固定一段時間跑一次, 就有一個土炮的Pinterest API用了... (還真heavy的API :( )

還要感謝一下同事 +kenshinn huang .....因為都是拿他帳號來作測試的.. XD