上一篇是用 php 來寫這個 reader,
而本篇, 我則改用 c++ 來做這件事情,
先期需求, 有 flickr api, rss reader, 拉 rss, template engine, data structure, memcache
- flickr api 的部份, 在 flickr 網站上, 沒有任何的推薦 library,
- rss parser 還是用 mrss 這套,
- rss 透過 curl multi 拉, 所以必須自己寫這段,
- template engine 還是堅持傳統, 使用 google ctemplate.
- data structure 特別拿出來講的原因,
- memcache 的 client, 使用了 databases/libmemcache
而 leeym 長輩很久以前, 有推薦過 flickcurl 這套, 感覺還不錯, c & libxml2 & curl 弄出來的東西,
自己拉資料透過 curl, 並且 parse 之後, 吐你要的東西出來,
不過缺少了某些東西, 例如 contact list 就沒有實做,
因此我把這部份補齊之後, 送給了作者, 發現作者竟然也是 y 員工, 還是 leeym 去美國之後的同事,
mrss 雖然可以直接給 url 拉 rss 回來 parse, 但是問題還是存在, 一次只能一個 http connection,
當 contact list 很長的時候, 我們一樣要等 list * 2 + 2 + 1 的時間,
所以我們只讓他 parse rss 就好, 拉我們自己去拉吧.
是因為我從沒真的碰過 c++ vector 之類的東西, 這次仔細的用了 vector 來過一些簡單的東西, 感覺還不錯.
東西都準備好之後, 我先做了一個 Reader.cpp 的 class, 這個就是我們的主體,
先寫好的原因, 是拿來當成 command line 用, 至少比較好 debug.
Reader.cpp 裡面就做幾件事情, set_data, prepare, execute, parse 然後就結束了.
prepare 會把 url 加進去 vector 裡面, 順便先檢查 memcache 理面有沒有資料,
有的話, 就不用透過 curl 出去撈一次,
execute 是真的透過 curl + multi 出去撈了,
parse 是將拉回來的資料, 不管是透過 curl, 還是從 memcache 裡面的,
用 mrss parse 過一次, 排序之後, 吐 vector 回去.
Reader 部份大概就這樣,
不過一整個 apache module 其實有三個 page,
index, callback, reader.
index 單純就是 redirect 到 flickr,
使用者在 flickr 登入後, 會導回我們的 callback page,
callback 會取得 token,
然後將使用者導去 reader,
reader 就取得 contact list, 拉 rss, 做 parse, 吐頁面..
應該沒有很難才是..
PS, 不過目前現在已經不是這個版本了..