2007年11月30日 星期五

flickr comment reader (apache module version)

從八月說要寫這篇, 現在都要十二月了, blah blah...
上一篇是用 php 來寫這個 reader,

而本篇, 我則改用 c++ 來做這件事情,

先期需求, 有 flickr api, rss reader, 拉 rss, template engine, data structure, memcache

  1. flickr api 的部份, 在 flickr 網站上, 沒有任何的推薦 library,

  2. 而 leeym 長輩很久以前, 有推薦過 flickcurl 這套, 感覺還不錯, c & libxml2 & curl 弄出來的東西,

    自己拉資料透過 curl, 並且 parse 之後, 吐你要的東西出來,

    不過缺少了某些東西, 例如 contact list 就沒有實做,

    因此我把這部份補齊之後, 送給了作者, 發現作者竟然也是 y 員工, 還是 leeym 去美國之後的同事, hello kitty media team 的,
  3. rss parser 還是用 mrss 這套,

  4. mrss 雖然可以直接給 url 拉 rss 回來 parse, 但是問題還是存在, 一次只能一個 http connection,
    當 contact list 很長的時候, 我們一樣要等 list * 2 + 2 + 1 的時間,
    所以我們只讓他 parse rss 就好, 拉我們自己去拉吧.
  5. rss 透過 curl multi 拉, 所以必須自己寫這段,

  6. template engine 還是堅持傳統, 使用 google ctemplate.

  7. data structure 特別拿出來講的原因,

  8. 是因為我從沒真的碰過 c++ vector 之類的東西, 這次仔細的用了 vector 來過一些簡單的東西, 感覺還不錯.
  9. memcache 的 client, 使用了 databases/libmemcache


東西都準備好之後, 我先做了一個 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, 不過目前現在已經不是這個版本了..