事先說明:我是 Pixnet 的技術顧問,在這篇文章裡提到的這項服務與 Pixnet 以及 Pixnet 競爭對手有關。
前陣子看到「玩WARM人脈搜尋網 竟抓到劈腿男」這篇文章後,我第一個想法是「這個東西也能當研究?」,如果連這種幹壞事的事情都要教授指導才能研究的話... (後面三千字省略)
我在思考了一下整個架構後,似乎沒有技術上的問題,至於 Similiarity (好友相似度) 的部份,在 IRC 上跟 lwhsu 討論過後也已經知道方向在哪裡,就跳下去寫,看看要寫多久。Social Network Search in Taiwan 這個網站就是這樣的產物。
目前只做了無名小站的部份 (先跑一陣子看看),未來希望能再加上其他站台。另外有打算直接開放 API (預定是 JSON 與 SOAP) 以及 feed (應該還是會用 RSS 2.0)。
以下補充一些題外話。
以我個人的習慣,系統當然還是 FreeBSD + Apache (不是 lighttpd) + MySQL + PHP 組成的 (FAMP 架構),整個 code 都進 Subversion,但是有做一些特殊的設定 (post-commit hook),使得我 commit 進去的時候就會自動更新。這個部份可以參考 Wiki 上的範例:Subversion。
MySQL 的部份是跑 5.1。在考慮之後 reading (query) 的量會比較大,所以採用 MyISAM 作為底層。目前這邊沒什麼技術可言,把 my-huge.cnf
裡與 replication 有關項目關閉,放到 /usr/local/etc/my.cnf
就可以了。
Crawler 當然還是用 Perl 寫 (畢竟用 Perl 分析網頁已經寫得很順手了),底層是透過 ParallelUserAgent 抓,不然在國外連線速度太慢。另外因為有 Y! Apache 999 的關係,有故意用了一些方法避開,但這樣也造成更新會比較慢,看目前首頁上的資訊應該也看得出來 (「已統計人數」指的是有 ID 但還沒去抓取這個帳號的好友資料,「已經取得資料」則是指抓取過的)。程式一開始是從 wretch 開始跑,看起來可以長很大...
最後是實際寫程式的時候發現 PHP 上最好用的 "C" (MVC 裡的 "Controller") 是交給 Apache 用 mod_rewrite 做... (真無奈)
另外套了一些 jQuery 與 jQuery UI 的東西上去玩,雖然文件寫的不是很清楚 (我去翻了程式碼才知道要怎麼用),但整體上來說還是相當不錯呢... 另外 YUI 的 CSS 也試著用了一些,不過之後可能會用其他家的吧 XD
大神要不要在關係列旁邊加個 link 方便使用者直接連到關係人啊?
好奇問一下,好友相似度會用什麼方法算呢?只考慮link structure,還是會把其它屬性列入呢?
@MLChen: 已經在研究 UI 的部份了。
@fcamel: 先只考慮 link structure 的部份,你問 lwhsu 會比較清楚。
無名小站好友清單抓起來滿有趣的,
手邊抓到的連結數字大概在四千萬筆左右,
抓到最近有收斂的趨向,所以就暫時把資料庫 hold 住了 @@
在 MySQL 裡面塞滿了資料,最後卻落得不知該如何抓出來分析處理 T__T
有這麼多資料的話,拿本 ItoA 把裡圖論的演算法都拿來玩看看啊,Real World Data 不要糟蹋啊...
如果開放API不知可不可以拿來做學術用途?Social Network這一塊有好多東西可以寫啊~
@Eric: 你想要哪些 API?
Google Code Hosting 上面 有 src 的時候 可以請大大通知一下嗎:P
想學一套 PHP 上 MVC framework 套進來用,不然覺得這次學到的東西好少...
WARM 的關係搜尋似乎有點慢,神人做一個比他們快的吧!!
重要的是 rawdata 啊...