前 言

MSN Messenger 是Microsoft开发的聊天工具,目前在国内拥有很大的用户群。使用MSN Messenger可以与他人进行文字聊天,语音对话,视频会议等即时交流,还可以通过此软件来查看联系人是否联机等。该软件的最新版本是6.1。

1999年,Microsoft向IETF提交了一份"MSN Messenger Service 1.0 Protocol"草案,这是最初版本的MSN Messenger协议。在以后几年,该公司不再公开有关MSN Messenger协议的升级、修改细节的官方文档。但无论是开发第三方的聊天客户端软件(如Gaim, MyIM等),还是做协议分析,必须对其通信协议有深入了解。正因为如此,有一些民间人士对这些协议开展了研究(见本文的"相关资源"一节)。

当我们还在感叹"这世界,变化快"的时候,MSN Messenger的协议已经到了第10版,简称MSNP10,对应于MSN Messenger 6.1。MSN Messenger 6.0则使用MSNP9。现在Microsoft强迫MSN Messenger用户升级到6.0或6.1版,因为服务器对MSNP8以下的版本不再支持。本文及后续文章所描述的MSN Messenger协议主要针对MSNP9/MSNP10。

1. 连 接

MSN Messenger协议建立在TCP/IP之上。除了文件传输和语音聊天是直接的"点对点"通信之外,其它所有的情形全部通过服务器进行。

在逻辑上,一共有三种类型的服务器,各司其职:

  • 派遣服务器(Dispatch Server, DS) - 客户端最初连接的服务器。负责给客户端分配合适的通知服务器。域名是messenger.hotmail.com,标准服务端口是1863。完成派遣任务后,切断TCP连接。
  • 通知服务器(Notification Server, NS) - 客户端需要一直保持连接的服务器。很多任务要在这个会话内完成,包括登录、改变状态、获取用户列表、修改用户信息、发起聊天、接受呼叫、邮件通知、退出等等。服务端口由派遣服务器指定,通常也是1863。
  • 接线服务器(Switchboard Server, SS) - 客户端之间聊天使用的中转服务器。每开一个聊天窗口,客户端和服务器就建立一个TCP会话。当客户端之间需要进行文件传输或语音聊天时,发送系统消息,建立"点对点"会话通道(可能转为使用UDP)。服务端口通常也是1863。"点对点" 通信使用的端口由客户端自动协商决定,如文件传输通常使用6891端口。

    2. 命 令

    MSN Messenger命令使用纯ASCII码。对非ASCII码字符使用URL编码。命令的语法是

    XXX[<SP>TrID<SP>PARAM1<SP>PARAM2…]<CRLF>

    其中,<SP>是空白字符,<CRLF>是回车换行,XXX是一个3字符的命令串,TrID是一个流水号,PARAMx是参数,[ ]内是可选项。最简单的命令没有流水号和参数。为了方便起见,下面讨论时用" "代表<SP>,"\r\n"代表<CRLF>,"\x??"代表一个值为0x??字节。红色表示由客户端发出,蓝色表示由服务器发出。一个MSN Messenger命令的例子如下:

    USR 18 TWN I example@hotmail.com\r\n

    3. 错 误

    无论是由于客户端发出的命令无效,参数无效,还是其他什么原因,服务器可以返回一个错误。格式为

    XXX[<SP>TrID]<CRLF>

    其中,XXX是一个3位数字的串。如

    ADD 21 AL non_existent@passport.com non_existent@passport.com\r\n
    205 21\r\n

    上例中,non_existent@passport.com是一个不存在的账号。

    4. 消 息

    MSN Messenger消息符合MIME 1.0标准,由消息头与消息体组成。通常使用UTF-8编码,消息头中也需要URL编码格式,消息体则直接用二进制数据。

    一个MSN Messenger消息的例子如下:

    MIME-Version: 1.0\r\n
    Content-Type: text/plain; charset=UTF-8\r\n
    X-MMS-IM-Format: FN=%E5%AE%8B%E4%BD%93; EF=; CO=0; CS=86; PF=0\r\n
    \r\n
    bhw98\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x81

    经简单分析可知,"%E5%AE%8B%E4%BD%93"是"宋体"的UTF-8加URL编码,而"bhw98\xE4\xBD\xA0\xE5\xA5\xBD\xEF\xBC\x81"是"bhw98你好!"的UTF-8编码。

    命令一览

    命令

    来源

    去向

    说明

    备注

    ACK

    SS

    Client

    确认,做出肯定回答。

    acknowledgement

    ADD

    Client

    NS

    发出添加新联系人到列表的请求。

    add user

    NS

    Client

    返回添加新联系人请求的应答。

    ADG

    Client

    NS

    发出添加新联系人组请求。

    add group

    NS

    Client

    返回添加新联系人组请求的应答。

    ANS

    Client

    SS

    接受聊天连接请求。

    answer

    BLP

    Client

    NS

    设置对尚未列入明确允许/禁止的联系人列表的保密策略。

    block list privacy

    NS

    Client

    返回设置保密策略请求的应答。

    BYE

    SS

    Client

    通知客户端结束会话。

    bye

    CAL

    Client

    SS

    发出建立聊天连接的请求。

    call

    SS

    Client

    返回建立聊天连接请求的应答。

    CHG

    Client

    NS

    发出改变状态的请求。

    change state

    NS

    Client

    返回改变状态的应答。

    CHL

    NS

    Client

    服务器发出验证要求。

    challenge

    SS

    Client

    CVR

    Client

    NS

    发出客户端的OS、语言、MSN Messenger版本等信息。

    client version

    Client

    SS

    NS

    Client

    返回推荐的MSN Messenger版本、升级软件需要的下载地址等信息。

    SS

    Client

    FLN

    NS

    Client

    通知有联系人列表中的用户下线。

    off-line

    GTC

    Client

    NS

    设置当有联系人列表中的用户状态改变时给出的提示。

    greeting to changes?

    NS

    Client

    返回设置请求的应答。

    INF

    Client

    NS

    询问服务器所支持的认证方式。

    information?

    Client

    SS

    NS

    Client

    返回服务器所支持的认证方式。

    SS

    Client

    ILN

    NS

    Client

    当客户端登录或添加联系人到列表时,通知列表中的联系人的状态。

    initial online state

    IRO

    SS

    Client

    当有新用户加入聊天连接时,通知客户端该连接中的用户名单。

    initial roster information

    JIO

    SS

    Client

    通知客户端已经同另外的用户建立了聊天连接。

    jion

    LSG

    Client

    NS

    发出获取联系人组列表的请求。

    list groups

    NS

    Client

    返回获取联系人组列表请求的应答。

    LST

    Client

    NS

    发出获取联系人列表的请求。

    list

    NS

    Client

    返回获取联系人列表请求的应答。

    MSG

    Client

    SS

    发送消息到其他用户(聊天对象)。

    message

    NS

    Client

    传递服务器(系统) 的消息到客户端。

    SS

    Client

    传递其他用户(聊天对象)的消息到客户端。

    NAK

    SS

    Client

    做出否定回答。

    negative acknowledgement

    NLN

    NS

    Client

    通知客户端联系人上线或改变状态。

    on-line

    OUT

    All

    All

    结束客户端-服务器的连接。

    out

    PNG

    Client

    NS

    测试TCP连接状态。

    ping

    Client

    SS

    PRP

    Client

    NS

    发出设置个人电话号码的请求。

    personal phone number

    NS

    Client

    返回设置请求的应答

    PNG

    Client

    NS

    测试TCP连接状态。

    ping

    Client

    SS

    QNG

    NS

    Client

    返回测试TCP连接状态的应答。

    quiz ping?

    SS

    Client

    QRY

    Client

    NS

    客户端回答服务器的验证要求。

    quiz reply?

    Client

    SS

    REA

    Client

    NS

    发出修改用户昵称的请求。

    rename nickname

    NS

    Client

    返回修改用户昵称请求的应答。

    REG

    Client

    NS

    发出修改联系人组的请求。

    rename group

    NS

    Client

    返回修改联系人组请求的应答。

    REM

    Client

    NS

    发出从联系人列表中删除用户的请求。

    rename user

    NS

    Client

    返回删除用户请求的应答。

    RMG

    Client

    NS

    发出删除联系人组的请求。

    remove group

    NS

    Client

    返回删除联系人组请求的应答。

    RNG

    NS

    Client

    通知客户端有人要建立聊天连接。

    ring

    SYN

    Client

    NS

    客户端-服务器同步。

    synchronization

    NS

    Client

    URL

    Client

    NS

    发出获取MSN服务URL的请求。

    URL

    NS

    Client

    返回获取URL请求的应答。

    USR

    All

    All

    声明、传递、鉴别用户身份。

    user

    VER

    Client

    DS

    协商MSN Messenger协议版本。

    version

    Client

    NS

    DS

    Client

    NS

    Client

    XFR

    DS

    Client

    向客户端分配NS(通知客户端转向连接指定的NS)。

    transfer

    Client

    NS

    发出分配SS的请求。

    NS

    Client

    返回分配SS请求的应答。

    MSN Messenger协议–错误代码一览

    代码

    含义

    可能的命令

    错误示例

    备注

    200

    非法命令

    ABC 18\r\n

    200 18\r\n

    201

    非法参数

    CHG 19 FLN 0\r\n

    201 19\r\n

    ADD 20 AL aaa@bbb@ccc aaa@bbb@ccc\r\n

    201 20\r\n

    205

    用户不存在

    ADD

    ADD 21 AL none@hotmail.com none@hotmail.com\r\n

    205 21\r\n

    206

    缺少域名

    207

    已经登录

    USR

    USR 20 TWN I example@hotmail.com\r\n

    207 20\r\n

    USR 21 TWN S 8d30fc782aa25ec9e1293fdda13cab42\r\n

    207 21\r\n

    208

    非法用户名

    CAL

    CAL 2 @@hotmail.com\r\n

    208 2\r\n

    209

    非法用户昵称

    REA

    REA 18 one@hotmail.com kill%20microsoft\r\n

    209 18\r\n

    210

    用户太多

    ADD

    ADD 23 FL one@hotmail.com one@hotmail.com 0\r\n

    210 23\r\n

    最大150

    215

    用户已在列表中

    ADD

    ADD 36 FL one@hotmail.com one@hotmail.com 2\r\n

    ADD 36 825 FL one@hotmail.com one@hotmail.com 2\r\n

    ADD 37 FL one@hotmail.com one@hotmail.com 2\r\n

    215 37\r\n

    CAL

    CAL 5 two@hotmail.com\r\n

    CAL 5 RINGING 213697\r\n

    CAL 6 two@hotmail.com\r\n

    215 6\r\n

    216

    用户不在列表中

    REM

    REM 14 FL three@hotmail.com\r\n

    216 14\r\n

    REA

    REA 48 three@hotmail.com three\r\n

    216 48\r\n

    CAL

    CAL 2 three@hotmail.com\r\n

    216 2\r\n

    217

    用户不在线

    CAL

    CAL 2 two@hotmail.com\r\n

    217 2\r\n

    218

    已在指定模式

    BLP

    BLP 17 BL\r\n

    BLP 17 151 BL\r\n

    BLP 18 BL\r\n

    218 18\r\n

    GTC

    GTC 19 A\r\n

    GTC 19 152 A\r\n

    GTC 20 A\r\n

    218 20\r\n

    219

    用户已经在相反的列表中

    ADD

    ADD 15 AL four@hotmail.com four@hotmail.com\r\n

    ADD 15 AL 56 four@hotmail.com four\r\n

    ADD 16 BL four@hotmail.com four@hotmail.com\r\n

    219 16\r\n

    223

    用户组太多

    ADG

    ADG 28 new%20group 0\r\n

    223 28\r\n

    最大30

    224

    非法组号

    ADD

    RMG 24 3\r\n

    RMG 24 11506 3\r\n

    ADD 25 FL five@hotmail.com 3\r\n

    224 25\r\n

    REM

    RMG 24 3\r\n

    RMG 24 11506 3\r\n

    REM 25 FL five@hotmail.com 3\r\n

    224 25\r\n

    REG

    RMG 24 3\r\n

    RMG 24 11506 3\r\n

    REG 25 3 New%20Name 0\r\n

    224 25\r\n

    RMG

    RMG 24 3\r\n

    RMG 24 11506 3\r\n

    RMG 25 3\r\n

    224 25\r\n

    225

    用户不在组中

    REM

    REM 26 FL six@hotmail.com 3\r\n

    225 26\r\n

    229

    组名太长

    ADG

    ADG 27 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 0\r\n

    229 27\r\n

    最大60

    230

    不能删除组0

    RMG

    RMG 28 0\r\n

    230 28\r\n

    300

    缺少必要的参数

    302 
    尚未登录

    500

    服务器内部错误

    540

    验证应答错误

    600

    服务器忙

    707

    无法建立连接

    910

    服务器忙

    911

    身份验证失败

    ?

    过去的MSN Messenger版本(MSNP8以下),简单地使用MD5等Hash算法对用户身份进行认证。MSNP9/MSNP10使用一种TWN(Tweener)认证方式,通过SSL/TLS连接到login.passport.com和loginnet.passport.com等服务器,借助于HTTP协议输入账号和密码,认证通过后,才能取得“入场券”。

    真正意义上的身份认证,发生在客户端与通知服务器(NS)之间。客户端登陆NS时,首先交换版本信息。双方均支持MSNP8以上版本时,才能进行认证过程。如果客户端版本较低,不支持TWN,咋办?服务器会将你一脚揣出去,信不信?

    好了,废话少说,现在拿一个成功认证的例子看看。在下面的例子中,账号是“example@passport.com”,密码是“password”。

    VER 4 MSNP10 MSNP9 CVR0 \r\n

    VER 4 MSNP9 CVR0 \r\n

    CVR 5 0×0804 winnt 5.0 i386 MSNMSGR 6.1.0203 MSMSGS example@passport.com \r\n

    CVR 5 6.0.0602 6.0.0602 5.0.0527 http://download.microsoft.com/download/d/4/f/d4f560d5-6dc6-4901-b149-a568415561d7/SETUPNT.EXE http://messenger.msn.com/cn \r\n

    USR 6 TWN I example@passport.com \r\n

    USR 6 TWN Slc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1073355862,kpp=1,kv=5,ver=2.1.0173.1, tpf=ed1c2f217a21c191c61251eb8b73bb60 \r\n

    (此时通过SSL进行身份认证,获得“入场券”)

    USR 7 TWN S t=4m1wWfEupDgUNb53qys5gJdw8OTJEtT82fcuDbS3U672gTymOOs6cgKeafj7WjgZNcufAQggxqHRRXko02DoflZA$$ &p=4QXNnX9rFDDgki9ZqvqPZGDGJa2Mrd5H13Zfl0NNjh4I78qPyfpzmkZPZEe0nxJTkzZSNDYtk!57cVqiYVfO86KgCRYWhi2kudS0M !7bdi82EDA1FYp3WboHD!sCQ17OZh7lPQI7fozrgsSMZwgSzRi2FNTPxf13oDNIfDCKCG!2guDvZKEpk78A$$ \r\n

    USR 7 OK example@passport.com example@passport.com 1 0 \r\n

    第一回合(TrID=4),双方协商MSN版本号。客户端说“我能支持MSNP9和MSNP10”,NS说“行,就MSNP9吧”。

    第二回合(TrID=5),客户端报告本机信息:OS = Windows 2000 (NT 5.0), 语言 = 简体中文,MSN Messenger版本 = 6.1.0203, 账号 = example@passport.com。NS给出了推荐的版本号,能够使用的最老的版本号,新版本下载地址,官方网站地址等信息。

    第三回合(TrID=6),客户端要求身份认证(I = Initial),NS则给出所需要的一长串信息(S = Subsequent)。其中tpf相当于challenge,参与Hash运算,能保证每次认证返回的串是不同的。

    第四回合(TrID=7),客户端出示从认证服务器得到的“入场券”,NS放行(OK)。

    第三、四回合之间,通过SSL的认证过程如下:

    首先在HTTPS端口443向login.passport.com发送一个GET请求,将账号、密码和NS给定的一长串信息送出

    GET /login2.srf HTTP/1.1 \r\n

    Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=example%40passport.com,pwd=password, lc=1033,id=507,tw=40,fs=1,ru=http%3A%2F%2Fmessenger%2Emsn%2Ecom,ct=1073355862,kpp=1,kv=5,ver=2.1.0173.1, tpf=ed1c2f217a21c191c61251eb8b73bb60 \r\n

    Host: login.passport.com \r\n \r\n

    根据情况,会重定向到不同的URL。本例中,重定向到"https://loginnet.passport.com/login2.srf?lc=1033",服务器应答

    HTTP/1.1 302 Found \r\n Server: Microsoft-IIS/5.0 \r\n

    Date: Mon, 22 Dec 2003 21:10:05 GMT \r\n

    PPServer: H: LAWPPLOG5C006 \r\n

    Connection: close \r\n

    Content-Type: text/html \r\n

    Expires: Mon, 22 Jun 2003 21:09:05 GMT \r\n

    Cache-Control: no-cache \r\n

    cachecontrol: no-store \r\n Pragma: no-cache \r\n

    P3P: CP="DSP CUR OTPi IND OTRi ONL FIN" \r\n

    Authentication-Info: Passport1.4 da-status=redir \r\n

    Location: https://loginnet.passport.com/login2.srf?lc=1033 \r\n

    \r\n … …

    然后,重新向指定的URL发出请求,得到如下响应

    HTTP/1.1 200 OK \r\n

    Server: Microsoft-IIS/5.0 \r\n

    Date: Mon, 22 Dec 2003 21:10:07 GMT \r\n

    PPServer: H: LAWPPIIS6B061 \r\n

    Connection: close \r\n Content-Type: text/html \r\n

    Expires: Mon, 22 Dec 2003 21:09:07 GMT \r\n

    Cache-Control: no-cache \r\n

    cachecontrol: no-store \r\n

    Pragma: no-cache \r\n

    P3P: CP="DSP CUR OTPi IND OTRi ONL FIN" \r\n

    Set-Cookie: … … \r\n

    Authentication-Info: Passport1.4 da-status=success,tname=MSPAuth,tname=MSPProf,tname=MSPSec, from-PP=’t=4m1wWfEupDgUNb53qys5gJdw8OTJEtT82fcuDbS3U672gTymOOs6cgKeafj7WjgZNcufAQggxqHRRXko02DoflZA$$ &p=4QXNnX9rFDDgki9ZqvqPZGDGJa2Mrd5H13Zfl0NNjh4I78qPyfpzmkZPZEe0nxJTkzZSNDYtk!57cVqiYVfO86KgCRYWhi2kudS0M !7bdi82EDA1FYp3WboHD!sCQ17OZh7lPQI7fozrgsSMZwgSzRi2FNTPxf13oDNIfDCKCG!2guDvZKEpk78A$$’, ru=http://messenger.msn.com \r\n

    Content-Length: 0 \r\n

    \r\n

    开始时直接向loginnet.passport.com发出正确的请求,也是可以的。不难看出,在服务器认证成功的返回信息中,Authentication-Info字段的from-PP串值,就是所谓的“入场券”。

    如果认证失败,服务器返回401错误

    HTTP/1.1 401 Unauthorized \r\n … …

    这样,就无法拿到“入场券”,自然不能在第四回合中输入合法的串。

  • Posted in 未分类 at 06月 28th, 2008. 1 Comment.

    我们可以把MSN的工作机制分成两个阶段:
    认证阶段
    认证阶段包括登陆到MSN即时通的服务器并且取得好友列表
    即时通讯阶段
    即时通讯阶段包括发送/接受进入即时通讯阶段的请求和发送/接受消息。

    MSN即时通讯软件的协议是基于ASCII码的协议,用其他话来讲就是所有的命令都必
    须是英文的!第一个阶段包括连接到MSN即时通软件的服务器。在这个阶段我们应该连接
    到服务器“messenger.hotmail.com”的1863端口(MSN即时通讯软件通过1863端口进行工作)。一旦连接上以后,我们就应该开始登陆过程了。此过程的第一步是验证MSN的版本。在此步中,客户端(即你的MSN软件)列出及向服务器发送它可以支持的版本,然后等待服务器的回应。
    VER 0 MSNP7 MSNP6 MSNP5 MSNP4 CVRO
    在MSN协议中,伴随着每个命令都有一个“试验ID”被发送。此实验ID从0开始,并且当每次服务器成功的对客户端的命令做回应时,都会增加。

    服务器的回应如下
    VER 0 MSNP7 MSNP6 MSNP5 MSNP4
    现在客户端(MSN)和服务器之间确定了它们之间将要进行通讯的版本。

    下一步客户端(MSN)向服务器发送一个请求,要求服务器提供它所支持的认证时需要的安全包的名字。
    INF 1
    不像ahoo,Rediff和其它的一些即时通讯软件,MSN在发送密码时会将密码加密,保证如有人监控你的端口时,密码不会轻易的泄露。

    服务器的回应如下
    INF 1 MD5 (MD5在这里是服务器当前支持的安全包的名字)

    下一步客户端(MSN)将向服务器发送用户ID
    USR 2 MD5 I venky_dude@hotmail.com
    然后服务器将检验它是否包含有验证所需的此用户的所有相关信息。如没有的话,服务器将会发送如下回应:
    XFR 2 NS 64.4.13.55:1863 0
    意思为客户端(MSN)应该连接到NOTIFICATION服务器,地址和端口分别为64.4.13.55,1863.
    我们关闭当前的连接并且在连接到新的服务器64.4.13.55时重复以下步骤
    (客户端)VER 3 MSNP7 MSNP6 MSNP5 MSNP4 CVRO
    (服务器)VER 3 MSNP7 MSNP6 MSNP5 MSNP4
    (客户端)INF 4
    (服务器)INF 4 MD5
    (客户端)USR 5 MD5 I venky_dude@hotmail.com
    现在我们连接上的服务器有了此尝试登陆的用户的信息.服务器回应如下:
    USR 5 MD5 S 989048851.185113730
    服务器发送的此字符串是“MD5 杂乱信息”.此杂乱信息由服务器创建并且在认证过程中使用.客户端然后向服务器发送使用MD5运算法加密后的密码.实际上客户端向服务器发送的是一个独一无二的MD5字符串,此字符串等价于此“MD5杂乱信息”(即989048851.185113730)+密码.结果如下
    3b7926d277068ec49576a0c40598ff21
    USR 6 MD5 S 3b7926d277068ec49576a0c40598ff21
    如果密码正确,服务器将做如下回应:
    USR 6 OK venky_dude@hotmail.com venkat
    此处“venkat”是用户的呢称.
    在此协议的最新版本中,服务器将发送一些附加的数据,像用户的信息和一个认证码(类似于一个cookie,可以用到许多其它的功能中)

    MSG Hotmail Hotmail 362
    MIME-Version:1.0
    Content-Type:text/x-msmsgspro file;charset=UT
    Login Time:1011252477
    EmailEnabled:1
    MemberIDHigh:84736
    MemberIDLow:-143472939
    Lang_preference:103
    PreferredEmail:venky_dude@hotmail.com
    Country:IN
    PostalCode:
    Gender:M
    Kid
    Age:22
    Sid:517
    Kv:2
    MSPAuth:2AAAAAAAADU0p4uxxxJtDJozJS1UTS0i7YpwnCoPUHRv56YKxxxCTWmg$$
    现在我们登陆上了服务器,但是我们的状态仍然是离线.为了能够发送和接受信息,我们需要把我们的状态改成在线.客户端通过如下命令完成这步:
    CHG 7 NLN
    服务器则向客户端发送回在线的好友及其相应的状态.
    ILN 7 NLN btxxxe@hotmail.com nick (NLN:Now online 即当前在线)
    ILN 7 AWY wmxxe@hotmail.com mike (AWY:Away 即离开)
    ILN 7 BSY tehpxxp@hotmail.com jerry (BSY:Busy 即忙碌)
    MSG Hotmail Hotmail 223
    MIME-Version:1.0
    Content-Type:text/x-msmsgsinitialemailnotification;charset=UTF-8
    Inbox-Unread:293
    Folders-Unread
    Inbox-URL:/cgi-bin/HoTMaiL
    Folders-URL:/cgi-bin/folders
    Post-URL:http://www.hotmail.com

    向服务器发送的下一个命令是和当前使用的客户端的版本相关的.客户端向服务器发送它的版本号和所在机器的信息像*作系统和其配置等
    CVR 8 0×0409 win 4.10 i386 MSMSGS 4.5.0127 MSMSGS
    0×0409 win4.10 i386 指出客户端当前的运行环境是win98,使用的是Intel的微处理器.
    MSMSGS 4.5.0127 MSMSGS 指出msmsgs.exe的版本号
    服务器回应提供下载最新版本及一些其它的信息的地址\
    CVR 8 4.5.0127 4.5.0127 1.0.0863
    http://download.microsoft.com/do … /en-us/mmssetup.exe
    http://messenger.microsoft.com

    这个CVR命令的发送并不是必须的,无论此命令是否发送,MSN协议都可以正确的工作.

    为了获得我们的好友列表,我们可以发送如下命令
    LST 9 RL
    服务器将相应发送回“反向列表”,此反向列表为当你在线时,可以看到你并能向你发送即时消息的用户列表.你也可以使用 LST 9 FL命令向服务器请求“正向列表”.此正向列表包括你加入到好友列表中的所有好友.服务器所做的回应如下
    LST 9 RL 69 1 19 venky_dude@hotmail.com venkat
    LST 9 RL 69 2 19 puxxxxx@hotmail.com puja
    LST 9 RL 69 3 19 vancxxxx@hotmail.com ramachandran
    LST 9 RL 69 4 19 moxxxxx@hotmail.com chandramouli
    LST 9 RL 69 6 19 v_n_xxxx@hotmail.com Narakatesh
    ………………….
    LST 9 RL 69 19 19 puneetagarxxx@hotmail.com puneet

    *一旦有好友上线时,服务器(NS)将向我们发送如下命令
    NLN 10 NLN deaxxx@hotmail.com Venkatesh
    相反,如果有好友下线时,服务器将向我们发送如下命令
    FLN 10 FLN deaxxx@hotmail.com Venkatesh
    在MSNP7中,MSN引入了一个新的口令认证机制.MSN服务器向用户发送一个口令钥,用户必须正确的认证此口令钥才能使此过程继续进行下去.
    CHL 0 20881396011366812350

    客户端必须向服务器发送一MD5,此MD5为以上的“杂乱信息”后附加上字符串“Q1P7W2E4J9R8U3S5”.因此最终向服务器发送的MD5字符串为
    20881396011366812350Q1P7W2E4J9R8U3S5
    因此客户端的回应如下
    QRY 18 msmsgs@msnmsgr.com 32
    0212eaad0876afb8505859ca75d21a78
    此处18为实验ID,用你的实际实验ID代替18.
    如果认证正确,服务器将做出如下回应
    QRY 18

    在MSN里的即时通讯是基于session的。想进行对话的两个人必须在session模式当中。除非我们同其他用户开始一个聊天session,否则我们是不能发送/接受信息的。
    基本上有两种途径可以使一个用户处于一个聊天session中
    .1 用户向另一个用户发送一个聊天session请求
    2 用户接收从另一个用户那里发送来的聊天session请求
    接下来将分别详细介绍这两种途径
    用户向另一个用户发送一个聊天session请求
    客户端(用户)向服务器发送一个命令,以获取接线总机(SwitchBoard)服务器的地址.所有的即时通讯交谈都必须通过接线总机服务器实现。

    XFR9 SB
    此接线总机服务器返回此服务器的ip地址,连接端口,和一个CKI杂列。CKI 是一个安全包,用户必须使用此CKI杂列连接上接线总机服务器。

    XFR9 SB 64.4.13.88:1863 CKI1989487642.2070896604
    现在这次我们将向接线总机服务器进行一次新的连接。而且我们上次对MSN即时通服务器的连接必须要保持,否则我们将会登出。

    在我们连接上接线总机服务器之后,我们将向此接线总机服务器发送以下命令:
    USR 1 venky_dude@hotmail.com 989487642.2070896604
    如果我们发送的这个CKI杂列正确的话,接线服务器将会返回
    USR 1 OK venky_dude@hotmail.com venkat
    当以上做完之后,接下来这个用户要做的就是要把另一个用户”叫到”此聊天session中了,这可以通过发送下面的命令完成
    CAL 2 deadxxx@hotmail.com
    服务器将会向此用户回应一个session号,同时也会将此session号发送给另一个用户。
    如果另一个用户准备好聊天,并向做出回应时,服务器将向我们发送如下命令

    JOI deadlee@hotmail.com Venkatesh
    这条命令表示另一个用户加入了聊天当中,我们现在可以接受和发送信息了

    用户接收从另一个用户那里发送来的聊天session请求
    当我们被一个用户邀请到一个聊天session中时,认证服务器将向我们发送如下的信息.
    RNG 11742066 64.4.13.74:1863 CKI 989495494.750408580 deaxxxx@hotmail.com Venkatesh
    上面的命令包含了session号,接线服务器的ip地址,端口,CKI杂列及向我们发出交谈请求的用户信息。
    现在我们将向接线服务器进行一次新的连接。同样我们上次对MSN即时通服务器的连接必须要保持,否则我们将会登出。

    我们连接上接线服务器,并且发送如下命令

    ANS 1 venky_dude@hotmail.com 989495494.750408580 11742066
    上面的命令包含了我们的登陆名,我们接收到的CKI杂列和session号.
    服务器将回应如下信息
    IRO 1 1 1 deaxxxx@hotmail.com Venkatesh 和 ANS 1 OK
    我们现在就可以发送和接收信息了。

    在我们发送和接收信息之前,让我们了解一下信息是如何创建的
    我们发送信息时,将首先建立一个头信息如下所示
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22

    然后使用如下的方式发送
    MSG2 N137 MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22

    hello
    其中2是测试号,我们每发送一次信息,此号就会随着增加。137是指我们发送信息的长度。在上面的例子中就是头信息和我们发送的信息”hello”的长度。

    我们发送的信息和上面的例子是差不多的。

    下面是我们接受到的一个信息的例子
    MSG deaxxxx@hotmail.com Venkatesh 137
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    X-MMS-IM-Format: FN=Microsoft%20Sans%20Serif; EF=; CO=0; CS=0; PF=22

    hello

    当另一用户正在输入信息时,我们会收到如下信息
    MSG deaxxxx@hotmail.com Venkatesh 100
    MIME-Version: 1.0
    Content-Type: text/x-msmsgscontrol
    TypingUser: deaxxxx@hotmail.com

    我猜你们对如何编写出自己的MSN即时通讯软件已经有了大致的了解。我将会在以后对MSN的通讯协议继续进行补充,增添一些附加的功能比如增加/删除拥护,重命名,文件传输及语音聊天。

    Posted in 未分类 at 06月 28th, 2008. 8 Comments.

    什么是robots.txt文件?
    搜索引擎使用 spider程序自动访问互联网上的网页并获取网页信息。spider在访问一个网站时,会首先会检查该网站的根域下是否有一个叫做robots.txt 的纯文本文件。您可以在您的网站中创建一个纯文本文件robots.txt,在文件中声明该网站中不想被robot访问的部分或者指定搜索引擎只收录特定 的部分。

    请注意,仅当您的网站包含不希望被搜索引擎收录的内容时,才需要使用robots.txt文件。如果您希望搜索引擎收录网站上所有内容,请勿建立robots.txt文件或者创建一个内容为空的robots.txt文件。

    robots.txt文件放在哪里?

    robots.txt 文件应该放在网站根目录下。举例来说,当spider访问一个网站(比如http://www.abc.com)时,首先会检查该网站中是否存在 http://www.abc.com/robots.txt这个文件,如果机器人找到这个文件,它就会根据这个文件的内容,来确定它访问权限的范围。

    网站 URL 相应的 robots.txt的 URL
    http://www.w3.org/ http://www.w3.org/robots.txt
    http://www.w3.org:80/ http://www.w3.org:80/robots.txt
    http://www.w3.org:1234/ http://www.w3.org:1234/robots.txt
    http://w3.org/ http://w3.org/robots.txt

    我放置或者刚刚修改了robots.txt的内容,大约多长时间能生效?
    baiduspider通常每天访问一次网站的robots.txt文件,您对robots所做的修改,会在48小时内生效。需要注意的是,robots.txt禁止收录以前百度已收录的内容,从搜索结果中去除可能需要数月的时间。

    我在robots.txt中设置了禁止百度收录我网站的内容,为何还出现在百度搜索结果中?
    如果其他网站链接了您robots.txt文件中设置的禁止收录的网页,那么这些网页仍然可能会出现在百度的搜索结果中,但您的网页上的内容不会被抓取、建入索引和显示,百度搜索结果中展示的仅是其他网站对您相关网页的描述。

    禁止搜索引擎在搜索结果中显示网页快照,而只对网页建索引
    百度支持通过设置网页的meta,防止搜索引擎显示网站的快照。方法如下:
    要防止所有搜索引擎显示您网站的快照,请将此元标记置入网页的 部分:

    要允许其他搜索引擎显示快照,但仅防止百度显示,请使用以下标记:

    注:此标记只是禁止百度显示该网页的快照,百度会继续为网页建索引,并在搜索结果中显示网页摘要。

    robots.txt文件的格式
    "robots.txt"文件包含一条或更多的记录,这些记录通过空行分开(以CR,CR/NL, or NL作为结束符),每一条记录的格式如下所示:
    ": "。

    在该文件中可以使用#进行注解,具体使用方法和UNIX中的惯例一样。该文件中的记录通常以一行或多行User-agent开始,后面加上若干Disallow和Allow行,详细情况如下:

    User-agent:
    该项的值用于描述搜索引擎robot的名字。在"robots.txt"文件中,如果有多条User-agent记录说明有多个robot会受到 "robots.txt"的限制,对该文件来说,至少要有一条User-agent记录。如果该项的值设为*,则对任何robot均有效,在 "robots.txt"文件中,"User-agent:*"这样的记录只能有一条。如果在"robots.txt"文件中,加入"User- agent:SomeBot"和若干Disallow、Allow行,那么名为"SomeBot"只受到"User-agent:SomeBot"后面的 Disallow和Allow行的限制。

    Disallow:
    该项的值用于描述不希望被访问的一组URL,这个值可以是一条完整的路径,也可以是路径的非空前缀,以Disallow项的值开头的URL不会被 robot访问。例如"Disallow:/help"禁止robot访问/help.html、/helpabc.html、 /help/index.html,而"Disallow:/help/"则允许robot访问/help.html、/helpabc.html,不能 访问/help/index.html。"Disallow:"说明允许robot访问该网站的所有url,在"/robots.txt"文件中,至少要 有一条Disallow记录。如果"/robots.txt"不存在或者为空文件,则对于所有的搜索引擎robot,该网站都是开放的。

    Allow:
    该项的值用于描述希望被访问的一组URL,与Disallow项相似,这个值可以是一条完整的路径,也可以是路径的前缀,以Allow项的值开头的URL 是允许robot访问的。例如"Allow:/hibaidu"允许robot访问/hibaidu.htm、/hibaiducom.html、 /hibaidu/com.html。一个网站的所有URL默认是Allow的,所以Allow通常与Disallow搭配使用,实现允许访问一部分网页 同时禁止访问其它所有URL的功能。

    需要特别注意的是Disallow与Allow行的顺序是有意义的,robot会根据第一个匹配成功的Allow或Disallow行确定是否访问某个URL。

    使用"*"和"$":
    baiduspider支持使用通配符"*"和"$"来模糊匹配url。

    "$" 匹配行结束符。
    "*" 匹配0或多个任意字符。

    URL匹配举例
     

    Allow或Disallow的值 URL 匹配结果
    /tmp /tmp yes
    /tmp /tmp.html yes
    /tmp /tmp/a.html yes
    /tmp/ /tmp no
    /tmp/ /tmphoho no
    /tmp/ /tmp/a.html yes
     
    /Hello* /Hello.html yes
    /He*lo /Hello,lolo yes
    /Heap*lo /Hello,lolo no
    html$ /tmpa.html yes
    /a.html$ /a.html yes
    htm$ /a.html no

     

     

    1. robots.txt文件用法举例
    1. 例1. 禁止所有搜索引擎访问网站的任何部分
      下载该robots.txt文件
    User-agent: *
    Disallow: /

    例2. 允许所有的robot访问
    (或者也可以建一个空文件 "/robots.txt")

    User-agent: *
    Disallow:

    或者
    User-agent: *
    Allow: /
    例3. 仅禁止baiduspider访问您的网站 User-agent: baiduspider
    Disallow: /
    例4. 仅允许baiduspider访问您的网站 User-agent: baiduspider
    Disallow:

    User-agent: *
    Disallow: /

    例5.禁止spider访问特定目录
    在这个例子中,该网站有三个目录对搜索引擎的访问做了限制,即robot不会访问这三个目录。需要注意的是对每一个目录必须分开声明,而不能写成 "Disallow: /cgi-bin/ /tmp/"。
    User-agent: *
    Disallow: /cgi-bin/
    Disallow: /tmp/
    Disallow: /~joe/
    例6. 允许访问特定目录中的部分url User-agent: *
    Allow: /cgi-bin/see
    Allow: /tmp/hi
    Allow: /~joe/look
    Disallow: /cgi-bin/
    Disallow: /tmp/
    Disallow: /~joe/
    例7. 使用"*"限制访问url
    禁止访问/cgi-bin/目录下的所有以".htm"为后缀的URL(包含子目录)。
    User-agent: *
    Disallow: /cgi-bin/*.htm
    例8. 使用"$"限制访问url
    仅允许访问以".htm"为后缀的URL。
    User-agent: *
    Allow: .htm$
    Disallow: /
    例9. 禁止访问网站中所有的动态页面 User-agent: *
    Disallow: /*?*

     

  • Posted in 未分类 at 06月 26th, 2008. 2 Comments.

    网站里的各种职位。
    CEO(Chief executive officer)首席执行官 类似总经理、总裁,是企业的法人代表。
    COO(Chief operating officer)首席运营官 类似常务总经理
    CFO(Chief financial officer)首席财务官 类似财务总经理
    CTO(Chief technology officer)首席技术官 类似总工程师
    CIO(Chief information officer)首席信息官 主管企业信息的收集和发布 
    这里总结CAO—-CZO的代表意思,大家有兴趣看看,对你工作有帮助哦!
    CAO: Art 艺术总监
    CBO: Business 商务总监
    CCO: Content 内容总监
    CDO: Development 开发总监
    CEO: Executive 首席执行官
    CFO: Finance 财务总监
    CGO: Gonverment 政府关系
    CHO: Human resource 人事总监
    CIO: Information 技术总监
    CJO: Jet 把营运指标都加一个或多个零使公司市值像火箭般上升的人
    CKO: Knowledge 知识总监
    CLO: Labour 工会主席
    CMO: Marketing 市场总监
    CNO: Negotiation 首席谈判代表
    COO: Operation 首席营运官
    CPO: Public relation 公关总监
    CQO: Quality control 质控总监
    CRO: Research 研究总监
    CSO: Sales 销售总监
    CTO: Technology 首席技术官
    CUO: User 客户总监
    CVO: Valuation 评估总监
    CWO: Women 妇联主席
    CXO: 什么都可以管的不管部部长
    CYO: Yes 什么都点头的老好人
    CZO: 现在排最后,等待接班的太子

    这里还有: 
    首席品牌官【CBO】 chief brand officer 
    首席文化官【CCO】 Chief Cultural Officer 
    开发总监【CDO】 chief Development officer 
    首席执行官【CEO】 Chief Executive officer 
    首席财务官【CFO】 Chief finance officer 
    人事总监 【CHO】 Chief Human resource officer 
    首席信息官【CIO】 chief information officer 
    首席知识官【CKO】 chief knowledge officer 
    首席市场官【CMO】 chief Marketing officer 
    首席谈判官【CNO】 chief Negotiation officer 
    首席营运官【COO】 chief Operation officer 
    公关总监【CPO】 chief Public relation officer 
    质量总监【CQO】 chief Quality officer 
    销售总监【CSO】 chief Sales officer 
    首席技术官【CTO】 chief Technology officer 
    评估总监【CVO】 chief Valuation officer 
    CAO:Answerer 首席答辩人,专门负责解答媒体、债权人和用户等有关网站倒闭问题的 
    询问。 
    CBO:Business Plan 首席商业计划官,是首席财务官的助理之一,专门针对不同的投 
    资人制订相应的BP。 
    CCO:Cost Control 首席成本控制官,凡超过100元以上的支出必须由CC0批准。 
    CDO:Domain name 首席域名官,负责公司域名注册、网站清盘时域名的拍卖、域名法 
    律纠纷等相关问题。 
    CEO:Exchange 首席交换官,一般由国际CEO自由联盟随时更换,是一个常设的短期职 
    能岗位,类似足球教练。 
    CFO:Financial 首席财务官,公司最重要的领导人,决定公司命运的主要人物。 
    CGO:Guideline 首席方针制订官,规划公司的宏伟蓝图,一般是5年以后的目标。 
    CHO:Harmony 首席协调官,调解投资者和经营者之间的冲突,并确保公司内部矛盾不 
    要泄露。 
    CIO:Inspector 首席检查官,检查公司内部工作状况,监督员工工作态度。 
    CJO:Judge 首席执法官,解决内部劳资纠纷,包括员工对降薪、辞退补偿等所引起的 
    问题。 
    CKO:Keep connecting,网络连接专员,最繁忙的岗位之一,当中国电信的网络连接中 
    断时及时向员工通报。 
    CLO:Lawer 首席律师,负责公司被控侵权时的应诉以及各种合同文本的审核。 
    CMO:Media 首席媒体官,保持和媒体之间的友好关系,为公司随时发布新闻做准备。 
    CNO:News 首席新闻官,向媒体披露公司网站被黑、裁员、被收购等重大新闻。 
    COO:Observer 首席观察员,每天在各大网站BBS灌水,有时也被称为“大虾”,工作 
    向CWO直接汇报。 
    CPO:Privacy 首席隐私官,负责公司内部员工Email、ICQ、OICQ等通信内容的监控。 
    CQO:Quantity Making,数量指标编造专家,负责注册用户数量、页面浏览、营业收入 
    等指标的编造。 
    CRO:Reduce the stafftrimmer 首席裁员官,负责所有与裁员有关的事务,直接向股 
    东大会负责,包括董事长在内都不得干预其工作。 
    CSO:Strategy 首席战略官,由已经退位的公司主要创建人担任,在政府机关一般称为 
    调研员或顾问。 
    CTO:Testing 首席测试官,是公司唯一负责网站建设的专家,由于技术开发不成熟, 
    需要一直测试下去。 
    CUO:Union 首席联盟官,以战略联盟的名义,专门寻找有收购自己意向的网站。 
    CVO:VC reception 风险投资商接待专员,首席财务官的另一重要助理。 
    CWO:Writer 首席网络写手,负责将小事扩大化,通过炒作达到扩大网站知名度的目 
    的,其下属为COO。 
    CXO:Xingxiang(因为中国特有,所以只能用汉语拼音表示) 网站形象代言人,一般 
    由学历不高且没有任何网络知识的年轻人担任。 
    CYO:Yearly 公司元老,这是一个荣誉称号,授予在同一网站工作满一年的员工(这个 
    职位通常空缺)。 
    CZO:Zero 最后离开公司的一个人,负责关好门窗,将公司大门钥匙交给物业管理处, 
    可以由CAO兼任。

    Posted in 未分类 at 06月 15th, 2008. No Comments.

    在 Firefox 3 高调发布前夕,Mozilla 工作人员 DRIA 编写了这篇权威而详尽的《Firefox 3 新功能指南》。此文系统介绍了 Firefox 3 的新功能和改进之处,并且每一段都附有说明图片或 flash 演示,以及更详细的专题介绍链接。善用佳软号召网友对 原文 进行了翻译,并把部分图片换为中文界面,发表于此,供大家参考。

    支持转载,需注明如下信息|作者:Deb Richardson|译者:mikelong、woodfishman、烧坏的内存条、Mr.aa、SheraX、nick-cave|转自:善用佳软

    大功告成! Firefox 3 即将推出!对于这项期待已久的事件,人们在Mozilla 社区已经广泛地讨论了这款浏览器中的新功能和改进。新功能包罗万象,大到震撼业界的改变,小到那些您也许不会注意的微妙变化——但您会发现,Firefox 的使用更加便捷了。改进之处也是如此:从大处说,整个后端系统已完全重建;从小处说,其他功能也有些微改进或重新设计。最终的结果就是迄今为止最快、最安全、最小巧、最便捷的 Firefox 版本。希望您喜欢它。

    以下是本指南中提到的功能列表。

    加载项管理/Add-on manager

    addon-manager

    Firefox 3 的附加组件(add-on,原译为扩展,现从官方翻译为附加组件)管理器得到了强化,新增了“获取附加组件”标签。通过此标签页,你可以浏览最受欢迎的附加组件、搜索新附加组件、查看附加组件的介绍和评分,并可通过简单的点击来安装附加组件。附加组件管理器已经与 附加组件网站(AMO: addons.mozilla.org) 高度整合,用户可以更方便地寻找和体验新扩展、新主题。

    参见 在Firefox3 中获得新扩展,作者 Madhava Enros。

    书签/Bookmarks

    bookmarks2

    Firefox的3为书签引入了一套新的功能,对菜鸟更易上手,对一般用户更有用,对书签栏非常混乱的用户则是大有帮助。三个主要特点是引进星级书签,书签标记,智能书签夹。
    星级书签是一个快速简便的方法,给网页标注书签只需轻轻一击。书签标记是加入“额外”信息的方法,让你以更灵活的方式组织书签。智能书签夹是一种“已保存的搜索”。当您添加新书签匹配此搜索时,它们会自动更新。
    更多信息,请参阅 Firefox 3: Bookmarks,Deb Richardson文。

    级联样式表/Cascading Style Sheets (CSS)

    css

    在Firefox 3中做了大量的CSS改进,包括对以下内容的支持:inline-block和inline-table,所有平台上的字体大小调整,:default pseudo-class,HTML软连字符(HTML soft hyphens ()),IME模式, white-space’s pre-wrap value。并且动态更新css选择符,例如::first-child,:only-child,:last-child,以及 :empty。 Mozilla研发者中心有一个完整清单,列出了Firefox 3中所有CSS的变化,您可以点击这里获得:CSS improvements in Firefox 3

    颜色配置文件支持/Color profile support

    color-profile

    Firefox 2不包含颜色配置管理,而只是根据用户系统或自定义的颜色配置进行颜色渲染,缺乏有针对性的优化。Firefox 3则包含了对颜色配置文件的全面支持,使得浏览器能显示更丰富和鲜艳的色彩。考虑到多方面的因素,颜色配置默认为关闭,需要用户自行定义浏览器选项来开启。或许Firefox的未来版本将该功能设置为默认,毫无疑问这将成为摄影师和视觉艺术家们欣喜若狂的日子。

    参见 Firefox 3: Color profile support ,作者 Deb Richardson.

    下载管理器/Download manager

    download-manager

    下载管理器在Firefox 3中改进良多,现在包括了从新访问功能以手动或自动暂停及恢复下载项。其他改良包括在窗口底部状态栏新增了下载状态显示器,新增了在下载管理器中搜索已下载文件功能,文件显示的增强以显示更多文件信息,现在也可以在下载管理器中通过右键菜单访问下载文件的原始下载页。

    参见 Download Manager in Firefox 3 ,作者 Madhava Enros.

    字体及文本渲染/Font and text rendering

    fonts-and-text

    当Mozilla的开发者们决定与Cairo子系统合作从零开始建立全新的图像层时,他们同样将浏览器中的文本渲染完全重新构建。得益于此,Firefox 3对于字体间距、连笔、多国字符、半连笔、字形微调、抗锯齿、字体大小和字体选择等各个方面均有改进性的支持。在Firefox 3对于字体支持和文本渲染迈出一大步的同时,Mozilla的开发者们并未停步,不断为未来版本的提高而努力。

    参见 Firefox 3: Fonts and text,作者 Stuart Parmenter 和 Deb Richardson.

    全页面缩放/Full page zoom

    full-page-zoom

    页面缩放在Firefox 3中已经被全新设计,现在包括了全页面缩放和仅限文本缩放。

    全页面缩放功能会让你完全控制显示内容的大小同时自动调整页面布局和结构。另一方面,仅限文本的缩放则只缩放页面上的文本,图片和页面布局不会被改变。

    现在有了一个新而十分有用的功能:Firefox现在会自动记录下你曾经浏览过的页面的缩放等级。一旦你缩放一个站点的页面,Firefox会记住并在你下次访问该站点的任何页面时恢复该缩放等级。

    参见 Full Page Zoom,作者 Seth Bindernagel.

    历史记录/History

    history

    Firefox 3令浏览器历史记录变得十分有用。历史记录不但是新功能 智能地址栏(Smart Location Bar)的关键信息源,同时也在其他几方面得到加强。历史记录现在会在记录其他地址信息的同时记住站点的favicon(小小的个性logo),这样可以更好地扫描和识别历史记录项。历史记录侧边栏和历史菜单也有调整,而整个新的历史记录库(a whole new History Library)已经被加入到Firefox库(Firefox Library)中(之前版本中的书签管理器Bookmark Organizer)。总之,Firefox 3让历史记录由一个有时会有用的功能变为浏览器应用中的一个重要基础部分。

    参见 Firefox 3: History,作者 Deb Richardson.

    HTML画板/ HTML Canvas

    html-canvas

    Firefox 3 的 HTML Canvas 实现已得到改进,现在包含了一个实验性的文本渲染 API。该 API 在 Mozilla Developer Center (MDC) 的文章 Drawing text using a canvas 中有详细描述。另外也增加了对 transform() 和 setTransform() 方法的支持。这两个方法是MDC的想像力超群的Canvas指南(Canvas tutorial)中的一部分.二维画板性能在所有平台中也得到了提升。

    要了解精彩的画板示例,参见 John Resig’s Processing.jsAza Raskin’s Algorithm Ink

    For more, see HTML Canvas in Firefox 3 by Vlad Vukićević.

    地址栏 UTF-8 支持/ Location bar UTF-8 support

    Firefox utf-8

    主要使用 US-ASCII 的站点大概不会留意到 Firefox 3地址栏的一大改进:对 UTF-8 多字节码的支持。这是个非常大的可用性改进,因为非 ASCII 语言的 URL 地址在 Firefox 2中是不可读的机器码,而在 Firefox 3中已能够渲染成人类可读的文字。

    参见 Firefox 3: UTF-8 support in location bar,作者 Gen Kenai。

    恶意网站防护/ Malware protection

    malware

    “恶意网站(Malware)”是我们对那些尝试在你的计算机上安装你不想安装的软件或进行其他未授权行为的站点的称呼。Firefox 3保持跟踪所有已被报告的恶意站点,通过在它们被加载前就拦截的方法来保护你,保证你计算机的安全。当然你也可以忽略我们的警告————毕竟那是你的计算机嘛————但我们会希望这个新加的安全功能可以有效保护用户,让互联网更安全。

    参见 Mal-what? Firefox 3 vs. Bad People,作者 Johnathan Nightingale。

    微格式API/ Microformats API

    microformats

    微格式(Microformats) 是一组简单,开源的数据格式,基于现存标准构建。Firefox 3包含一个新的 微格式API(microformats API),你可以使用它来编写add-on,但这些add-on不能显示在Firefox 3用户界面。

    更多信息,参阅 IBM 关于如何 在 Firefox3 扩展中使用新的 microformats API,和 Where are the microformats in Firefox 3? 作者 Mike Kaply。

    离线网络应用支持/ Offline web application support

    offline

    Firefox 3 实现了 WHATWG 网络应用1.0 规范(WHATWG Web Applications 1.0 specification)中的 在线及离线事件(online and offline events)。这意味着网站开发者可以创建即使离线也可在 Firefox 3 中工作的网络应用。当处于”离线模式“时,网络应用的数据会储存在本地,当计算机重新上线时再同步到服务器。

    参见 Online and offline eventsOffline resources in FirefoxFirefox 3: Offline App Demo,作者 Mark Finkle, Offline Web Applications (Feb 2007),作者 Robert O’Callahan。

    密码管理器/ Password manager

    password-manager

    Firefox 3 中的密码管理器功能明显改进,设计得更周到。询问 Firefox 是否保存密码的对话框被完全替换了-摒弃了那个在你成功登陆网站前必须处理的弹出对话框,现在 Firefox 3 会在你登入网站后从浏览框上方滑出信息条,让你选择是否保存该密码。这个信息条是非强制的(non-modal),你可以继续如常上网而不用被迫先关掉它。这个信息条只会维持在上方直到你作出选项或离开你登录的网站。

    另外,密码管理器现在具有过滤和搜索功能,从而更加容易查找和管理特定网站的密码。这些改进相当细微,但要是你储存了上百个密码,这些小改进就会造成大不同了。

    参见 Firefox 3: Password Management,作者 Deb Richardson。

    性能改进/ Performance improvements

    performance

    Firefox 3 是目前最快,最轻量的 Firefox 版本。速度测试表明它相对于 Firefox 2 性能提升了 2-4 倍,相对于 IE7 提升了9倍。内存占用测试显示 Firefox 3的效率比 Firefox 2 提升2倍,比 IE7 提升 4.7倍。大家对这一版本的性能十分关注,而我们也做出了巨大的努力才做出了上面这些数字。

    参见 Firefox 3 Memory Usage,作者 Stuart Parmenter。

    钓鱼网站防护/ Phishing protection

    phishing

    这个版本在新增的恶意网站保护功能之上,Firefox 3也改进了反钓鱼网站功能。已知钓鱼网站会在加载前被拦截,这样你的计算机就不会冒风险。而 Firefox 2会加载网页,然后将它变化和显示一个警告对话框,警告你这是个被报告的钓鱼网站。Firefox 3中的处理,和对恶意网站的处理一样,总体上会让你更安全,更少机会暴露于危险中。

    参见 Mal-what? Firefox 3 vs. Bad People,作者 Johnathan Nightingale。

    插件/ Plugins

    plugins

    插件是加载到 Firefox 中的第三方小程序,用来处理 Firefox 本身不处理的内容。例如,缺了Flash插件你就看不了YouTube 视频。Firefox 提供一个新特性,作为新设计的加载项管理器一部分,你可以用来查看,开启或关闭任何你安装的插件。你也可以通过在插件项中右键点击插件名选择”访问主页“来访问插件的原始页(如果有的话)。

    同时,像其他 Firefox 3 加载项一样,如果一个插件被发现有安全弱点,Firefox 会自动关闭它并告诉你何处可以取得更新版本。这是个重要的安全改进,以前并没有任何方法让你知道你安装了有害插件。

    参见 Firefox 3:插件,作者 Deb Richardson。

    网站识别按钮/ Site Identification button

    site-identification-button

    如何在使用者浏览网页时确保安全可靠并提供保护,是浏览器制造者最大的挑战之一。 Firefox 3 提供了一个极其重要的新的安全功能,即网站识别按钮。在浏览器中“挂锁”图标无处不在,长期以来是基础安全指标,网站识别按钮建立于其上并取代之。比起以前的仅仅在某处显示一个挂锁图标,Firefox 3尽可能多地找到您正在浏览的网站的信息,通过一个地址栏左侧的按钮使这些信息易于获取。

    larry

    按钮可以是3种颜色——灰、蓝、绿——按下时显示新的网站识别对话框。对话框包括一个匹配的灰、蓝、绿色的“护照官员”的图标,并显示网站身份的可用信息汇总。较之以前仅显示加密或非加密的单一图标(挂锁), Firefox 3 为你提供了更为详尽的信息,涵盖了不同的安全级别和状态。

    参照 Firefox 3: Site Identification button,作者 Deb Richardson。

    智能地址栏/ Smart Location Bar

    下面为flash动画,如果看不到,请关闭广告过滤。

    Firefox 3 的地址栏已经完全改变,闪耀登场。被亲切地称作“帅呆了地址栏(AwesomeBar)”,新的智能地址栏可让您在浏览器的 URL 区域用关键字搜索您的历史和书签。您不再需要记住所寻找的网页的域名-智能地址栏中对您所输入(甚至多词语)的词对网址,网页标题,书签和历史中的标签进行匹配,根据算法符合度和时间回归结果。

    智能地址栏的结果还显示出网页图示,完整名称,网址,以及有否书签或标记。尽管从 Firefox 2 升级至 Firefox 3 有点累人,可一旦您使用过智能地址栏,那一定离不开它。

    参见 AwesomeBar is awesome,作者 Deb Richardson; 演示 by Mike Beltzner。

    标签页/ Tabs

    tabs

    标签功能没有太多改进,除了加入一个新的平滑滚动效果。在 Firefox 2 中滚动标签栏,标签会整个地前后移动。这有点突兀和不流畅。透过平滑标签滚动功能,更容易知道标签怎么滚动,从哪里移动到哪里。用动画可以清楚示范这个效果,我简单做了一个 flash: Firefox 3:平滑的标签切换 (.swf)

    主题/ Themes

    themes

    Firefox 3 界面更新的一个主要目的是为了浏览器能与不同的操作系统在外观和风格上保持一致,从而更好的融入系统。过去的 Firefox 2 在 Windows, Mac, 和 Linux 等系统上的界面多少是雷同的,但对于 Firefox 3 来说,已并非如此。对于 Linux, Mac OS X, Windows XP 和 Windows Vista,它将有风格不同的新外观。界面的更新涉及 firefox 的各方面,每个按钮,窗口,标签,图标以及对话框现在能更好地与当前系统融合,使得 Firefox 更像是你系统环境原生的一部分。

    参见 Firefox 3 主题指南,作者 Alex Faaborg, 和 Firefox 3 主题开发指南,作者Gavin Sharp。

    音频视频种子/ Video and audio feeds

    detecting-feeds

    Firefox 3 包含一个增强的种子预览页,现在可以探知和显示博客文章中的附件。而且,Firefox 3 可以将视频播客关联到某个程序,而音频播客关联到另外一个,其他类型种子关联到第三程序。这些更改相当细小,但要是你用开了就很有用了。

    参见 Firefox 3 and enclosures,作者 Will Guaraldi。

    支持 Vista 的家长控制/ Vista parental controls support

    vista-parental-controls

    Windows Vista 包括内建的家长控制功能,帮助您控制您的孩子可以在计算机上做什么。Firefox 3 包含了对这些家长控制功能的一些支持——当内容被伺服器屏蔽、下载管理器会意识到并显示正确的用户界面信息,指出发生了什么。此功能仅适用于 Vista 平台,并将在未来版本中扩大和改善。

    参见 Firefox 3:家长控制,作者 Jim Mathies 和 Mark Finkle。

    Web应用程序协议处理/Web application protocol handlers

    web-application

    Web 应用程序协议处理是 Firefox3 的一个新的特性,它使得Web应用程序更加强大。当你点击一个具有特定协议的连接时,Firefox 现在能把连接数据发送到指定的增加了对该特性支持的Web应用程序。例如:“mailto:”(电子邮件协议)连接现在已经能被诸如 Yahoo! Mail 的 Web 应用程序直接处理,取代了通过默认的桌面邮件客户端的方式。其他普遍支持的协议还包括“webcal:”, “tel:”和“fax:”.

    对增加 Web 应用程序协议支持有兴趣的开发者们可以阅读 Mozilla Developer 上这篇 “基于 Web 的协议处理“ 的文章”。

    参见 Firefox3:Web 协议处理,作者 Mark Finkle.

    结论/Conclusion

    现在你看到了 Firefox 3 中一系列(但绝不是全部)的新功能和改进功能。从加载项管理直到 Web 应用程序协议处理,几乎浏览器的每一个部分都有改善。

    Firefox 3 一直在发展。近三年来,为其作出贡献的数以千计的开发者、设计师、本地化人员、测试人员、营销人员和文件作者遍布全球。Firefox 浏览器是被世界最大的开源社区创造的,它能到达亿万人手中,我们都无比自豪和兴奋。

    如果您还没有使用 Firefox,您可以去 Firefox 3 下载日网站,一起创造新的吉尼斯世界纪录。如果您已经是 Firefox 用户,可以去 Mozilla 派对中心,(注:目前尚无国内聚会地点,不过,大家都可以发起。我在提议水木社区组织版聚中,但不一定有结果)寻找或创立一个庆祝方式,参与进去。我们希望您加入我们的行列,并共同庆祝史上最佳的Firefox 的诞生。

    Download Day - Chinese
    (完)

    注:本翻译和发表行为得到了作者的许可
    Hi xbeta, You’re welcome to have my Field Guide to Firefox 3 translated into Chinese and post it on your blog. You can use any of the the images too, if you like.
    –Deb Richardson 2008-06-13

    附1:版本历史
    v1.54 修改add-on一段的翻译,谢sfufoet。
    v1.51 修改文字,补充链接。
    v1.5 2008-06-13,全部翻译完毕,并修正部分文字、图片

    Posted in 未分类 at 06月 14th, 2008. 3 Comments.

    DeadFire 的学习笔记,很全面

    Blueprint CSS 框架二月二十一日升级到 0.7.1 版本了。经过这么长时间的这几次版本升级,终于把按功能不同 CSS 规则在不同的 CSS 文件中的模式改为单一文件的模式了,所以感觉 Blueprint CSS 框架现在是一个可以用到实际项目中的 CSS 框架了。

    * 发布网站: blueprintcss.googlecode.com
    * 邮件讨论: groups.google.com/group/blueprintcss
    * 官方新闻: bjorkoy.com

    这个 CSS 框架将 html 标签设定为如下情况:

    • 统一重置了 43 个 html 标签(html 4.0 标签一共 91 个)的属性,(html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td)。重置 html 标签的默认样式为:内外填充边框都为零,字体粗细、字体科族和字体样式继承,字体大小百分之百(在中文情况下使用这个还是改固定象素的好),高度以基线对齐;
    • 设定 body 内的行高为 1.5 倍;字体大小百分之七十五(在中文情况下使用这个还是改固定象素的好);字体颜色为 #222222 (接近于黑色)
    • 设定 table 的边界间距为有间距、间距为零。(用有间距而间距为零的方式,估计只有这样才能将表格的边界间距设的看不到);下外填充 1.4em ,宽度 100%;
    • 设定 caption, th, td 内的元素居左,字体粗细为普通;caption 的背景色为 #EEEEEE (特浅的灰),th 背景为 #C3D9FF (浅蓝色)内的字体为粗体,th, td 的内填充为 上4px 右10px 下4px 左5px;
    • 设定 table, td, th 内的元素高度居中;
    • 设表格如果需要隔行换色的效果或者某行需要不一样的颜色,那么已经给定了 tr.even td 类,背景颜色为 #E5ECF9 (浅浅的蓝)
    • 设定 tfood 为斜体字
    • 设定 blockquote, q 元素之前和之后的填充内容为空,引用符号也为空;blockquote 的外填充为 1.5em 字体颜色 #666666 (深灰色),斜体字(中文斜体表现并不好,这个改了斜体不要而用背景色或者字体小一号来表示应该会好点)
    • 设定链接下的图片的 border 为零;
    • 设定 h1 至 h6 不同的字体大小粗细外填充,颜色为 #111111 (更接近于黑)
    • 设定 h1 至 h6 下的图片的外填充为零
    • 设定行内图片元素默认左漂浮,同时给出了一个 p img.right 的类,以备你需要图片右漂浮的时候来用(不过很多时候我们需要的是图片不漂浮,这个需要改或者单独建立一个类了);
    • 设定链接的颜色为 #000099 (深蓝色)带下划线,鼠标滑过和焦点状态颜色为黑色;
    • 设定 abbr 和 acronym 下边缘为一象素点线的边框;
    • 设定 del 删除字的颜色为 #666666 (中等灰度的灰);
    • 设定 pre 和 code 内地文字显示为 white-space:pre (就是不换行啦,现在<nobr><wbr><xmp>都不建议用了);
    • 定义了 ul 和 ol 列表前的标识为实心小圆点和阿拉伯数字。

    还有一些各个标签的上右下左的填充、行高、字号大小的设定不细说了。

    单独给定了几个可以根据实际需要单独调用的类:

    • .small 小号字;
    • .large 大号字;
    • .hide 不显示;
    • .quiet 字色为 #666666 (深灰色);
    • .loud 字色为 #000000 (黑色);
    • .highlight 背景色为 #FFFF00 (黄色);
    • .added 背景色为 #006600 (绿色)字色为 #FFFFFF (白色);
    • .removed 背景色为 #990000 (红色)字色为 #FFFFFF (白色);
    • .first 左边的内外填充都为零;
    • .last 右边的内外填充都为零;
    • .top 上面的内外填充都为零;
    • .bottom 下面的内外填充都为零。

    布局部分 CSS 说明:

    • .container 宽度 950 象素,整体居中模式。这个类应该是主要用于页面 body 元素内的整体页面控制的,好像也没其他用了;
    • .showgrid 无用的类,这个是用来演示这个框架的一个辅助,可以将这个类删除;
    • body 元素设定为上下外填充 1.5em,左右外填充为零。

    布局的列宽给出了 24 个不同宽度设定的数值:

    • div.span-1 至 div.span-24 全部设定为左漂浮,右外填充 10 象素;
    • div.last 设定右外填充为零象素;
    • .span-1 至 .span-24 从宽度 30 象素开始,每 40 象素为一单元增加;
    • .span-24 和 div.span-24 右外填充覆盖上面的设置,设置为零。

    以上四项综合理解可以理解为:

    • .span-1 至 .span-23 如果用于 div 元素,那么这个 div 具有的属性是左漂浮,右外填充 10 象素,宽度各自;
    • .span-1 至 .span-23 如果如果用于其他元素,那么就只具有宽度属性而不具有漂浮属性也没有右外填充;
    • .span-24 是个特殊一点的样式,如果用于 div 元素,那么宽度为 950 象素,左漂浮,右外填充为零;
    • .span-24 是个特殊一点的样式,如果用于其他元素,那么宽度为 950 象素,无漂浮,右外填充为零;
    • div.last 这个类在 CSS 文件中的位置在 div.span-1 至 div.span-24 的后面,所以如果 .last 类应用于 div 元素,那么这个 div 元素的右外填充将覆盖成为零。

    内填充数值:

    • .append-1 至 .append-23 设置内右填充,从 40 像素开始,每 40 像素为一单元增加,.append-23 内右填充数值为 920 像素;
    • .prepend-1 至 .prepend-23 设置内左填充,从 40 像素开始,每 40 像素为一单元增加,.prepend-23 内左填充数值为 920 像素。

    给定两个右边线样式:

    • div.border 设定右内填充 4px ,右外填充 5px ,右边线 1px 灰色(#EEEEEE)实线;
    • div.colborder设定右内填充 24px ,右外填充 25px ,右边线 1px 灰色(#EEEEEE)实线。

    外填充样式:

    • .pull-1 至 .pull-24 设定左外填充,从负 40 象素开始到负 960 象素,每 40 象素为一个单元数值变化,同时具有左漂浮和相对定位属性;
    • .push-1 至 .push-24 设定上填充为零,下填充为 1.5 em ;左外填充,从 40 象素开始到 960 象素,每 40 象素为一个单元数值变化,右外填充,从负 40 象素开始到负 960 象素,每 40 象素为一个单元数值变化,同时具有右漂浮和相对定位属性。

    以上两项应该是这个 CSS 框架中最难理解的部分了,在这里不详细说明了,等到写实际应用的时候弄个列子一说就明白作用了;

    给定一些其他样式:

    • .box 顾名思义就是一个盒子了,哈,设定内填充 1.5em ,外下填充 1.5em ,背景颜色 #E5ECF9 (浅浅的蓝)
    • hr 设定 html 的 <hr /> 横线样式为:背景色 #DDDDDD (灰色),字色 #DDDDDD (灰色),两侧不允许有漂浮元素,无漂浮,宽度百分之百,高度 0.1em ,外填充上左右为零,下外填充为 1.5em ,没有边框。具体表现出来基本就是一根横的一象素灰色线了;
    • hr.space 这个样式是用在 <hr /> 标签内的,设定了背景色和字色都为白色。因为是用在 <hr /> 标签内,所以它同时具有 <hr /> 的设定样式,只是将背景色和字色从灰色覆盖为白色,所以表现起来其实就是一根横的一象素白色线。

    给定清除浮动样式:

    • .clearfix:after 和 .container:after 设定 .clearfix 和 .container 之后的表现为:内容是“.”(一个小点),显示为块元素,高度为零,两侧不允许有漂浮元素,可见度属性(visibility)为隐藏 (注:可见度 visibility 隐藏属性和 display 隐藏属性有占位区别,visibility 隐藏属性占据空间位置而 display 隐藏属性不占据空间位置);
    • .clearfix 和 .container 设定显示样式为行内块(IE 不完全支持此属性,目前只是用这个来让 IE 获得 hasLayout );
    • * html .clearfix 和 * html .container 设定在“通配符下的 html 下的.clearfix 和 .container 两个样式”属性高度为 1% (高度为 1% 作用和 zoom:1 的作用是一样的,IE 在 inline-block 加上 1% 或 zoom:1 获得类似 table-cell 的属性,只 IE6 以下识别);
    • .clearfix 和 .container 设定显示样式为块模式(覆盖前面指定的行内块模式为块模式,但 IE 不会让 hasLayout 消失,目的由此达到);
    • .clear 设定为两侧不允许有漂浮元素。

    清除浮动的这三个类中的前两个比较复杂,除了清除浮动外还有一些其他的能力,基本上这几个样式的内容和先后顺序和代码层级设定完后就能在所有的浏览器下清除浮动了(如果某个浏览器不支持的话,那么估计也很难支持这个框架中的大部分 CSS 属性,那么这个框架对这个浏览器来说也没太大的意义了),具体研究起来就太深了,我是搞不定,不过对我们用的人来说,只要知道你需要清除浮动的时候就用这两个类就可以了。顾名思义,.clearfix 类一般用在你不介意多加一个或者某些情况下你只能多加一个 div 或其他的 html 标签元素而本身内部不包含内容的元素身上来清除浮动,.container 类用在你的一个本身内部包含内容的元素身上来清除浮动。.clear 这个类嘛,没啥可说的了,就是不允许两侧有浮动元素。

    表单元素部分:

    这部分其实没有太多需要仔细研究的,大部分指定的是表单元素的一些字体、字号、字色和元素的边框、边距、宽、高等。这些就不详说了,说说可以稍微需要知道一下的。

    • 给定了元素的获得焦点的样式(一象浅黑边),可惜 IE 不支持,所以这个作用不是那么大,毕竟 IE 现在还是占据市场份额的巨头;
    • 给定了三个类,可以用来标识有特殊意义的块区:.error, .notice, .success ,都具有不同的背景色和边框色;
    • .error 顾名思义标识“错误”
    • .notice 顾名思义标识“提示”
    • .success 顾名思义标识“成功”

    呼呼,历时十八天,终于将这个概述写完了,就可以再开一篇文章写写学习和使用中的其他方面了。这个东西虽然是个简单的东西,不过仔细研究起来还是挺有意思的,而且能开阔思路、巩固知识。

    Posted in 未分类 at 06月 14th, 2008. No Comments.

    一大早就看到资讯说,说天涯的"我的天涯"平台开放了。登录上去,看到有上面有几个google的widget,貌似第三方的。但是没找到相关的开发接口等文档。

    于是修书一封,咨询相关人员,得到回复说,是和google gadget兼容的,找google的标准开发接口,开发好直接联系他们即可。。。

    Posted in 未分类 at 06月 14th, 2008. 2 Comments.

    原作者: Facebook 译者: runer

    目录

    1. 引言
    2. 创建“Hello World”程序
    3. 在用户信息栏中使用FBML(FaceBook标记语言)
    4. 在用户信息栏中使用mock-AJAX技术
    5. 使用Mysql数据库创建计数器
    6. 将这些例子代码集合到一起
    7. 相关下载

    引言

           这个教程指导我们如何创建一个名为“tutorialapp”的应用,当你创建自己的程序的时候,它可以作为一个模板。使用这个教程需要你有一个支持php5的web服务器。

           最新版本的“tutorialapp”可以在这里(http://tperry256.dreamhost.com/f8/tutorialapp/)找到。访问这个连接的时候,系统会要求你登录到facebook,并且增加“tutorialapp”程序。在很多公司像这样访问服务一个月只需要花费几美元而已。

          当你创建了自己的应用,你会使用一个不同的名称和不同的服务器。我们把那些会使你的应用与众不同的地方用这种颜色高亮显示。

    创建“hello World”程序

    1. 访问:http://developers.facebook.com/
    2. 点击“Get Started
    3. 点击“Add Facebook Developer Application
    4. 一个到“Developer”的链接将显示在Facebook的左边导航栏,进入应用开发
    5. 点击“Setup new Application”按钮
    6. 下面是一些表单的填写步骤
    1. Application Name:在本文中,我们填写“Tutorial Application”–对于你自己的应用,你要填写自己不同的名称。
    2. 点击“Terms of service
    3. 点击“Optional Fields”链接,来进行更详细的配置
    4. Support E-mail:你在Facebook的注册Email会自动填入,但可能你并不希望自己的个人Email被所有使用你应用的人知道,所以也可以填写一个你可以使用的其他Email。
    5. CallBack Url:在本文中,我们填写“’http://tperry256.dreamhost.com/f8/tutorialapp/”。你应该填入不同的URL,通常情况下,你要填写你自己服务器上运行这个应用的目录的URL。
    6. Canvas Page URL:http://apps.facebook.com/在本文中,我们填写“tutorialapp”–你必须为自己的应用填写一个不同的名称。
    7. Use FBML:保持默认设置即可。
    8. Application Type:保持此处设置为:“website”
    9. Can your application be added to Facebook:设置“yes”,然后进行详细设置
    10. TOS URL:留空即可。
    11. Post-Add Url:在本文中,我们填写“’http://apps.facebook.com/tutorialapp/”,对于你自己的应用,一般你应该填写自己一个不同的面板页的完整路径。
    12. Default FBML:输入“hello”
    13. 其他的设置按照安装默认即可。
    14. Side Nav Url:在本文中,我们填写“http://apps.facebook.com/tutorialapp”,对于你自己的应用,也应该填写自己不同面板页的完整路径。
    15. 其他设置使用默认即可。

    点击“Submit”按钮提交。进入“My Application”页面,检查刚才的应用是否已经创建。拷贝php5最新版的客户端库文件到你的服务器端应用程序的目录。在后面的“相关下载”中有 库文件的一些下载地址。如果你使用一个类UNIX 的shell,并且当前位于应用程序的目录,那么可以运行下面的命令:

    wget http://developers.facebook.com/clientlibs/facebook-platform.tar.gz
    tar zxvf facebook-platform.tar.gz
    cp facebook-platform/client/facebook.php .
    cp facebook-platform/client/facebookapi_php5_restlib.php .
    rm -rf facebook-platform.tar.gz facebook-platform

    11.   建立一个“appinclude.php”文件,该文件要被你的应用的所有php文件在头部包含。将如下代码粘贴到文件中:

    <?phprequire_once ‘facebook.php’;
    
    $appapikey = ”;$appsecret = ”;$facebook = new Facebook($appapikey, $appsecret);$user = $facebook->require_login();
    
    //[todo: change the following url to your callback url]$appcallbackurl = ”;
    
    //catch the exception that gets thrown if the cookie has an invalid session_key in ittry {  if (!$facebook->api_client->users_isAppAdded()) {    $facebook->redirect($facebook->get_add_url());  }} catch (Exception $ex) {  //this will clear cookies for your application and redirect them to a login prompt  $facebook->set_user(null, null);  $facebook->redirect($appcallbackurl);}

    12.   将其中的“app_key”和“secret”替换成你自己的。他们将显示在应用开发网站的的“My Applications”页面中,你同时要将我们的“call back URL”换成你自己的。

       13. 创建一个“index.php”文件,它将是你的应用的主页面,将如下代码粘贴进去:

    <?phprequire_once ‘appinclude.php’;
    
    echo "<p>hello $user</p>";

    14.    在浏览器中输入你创建的应用的回调地址,你也可以输入面板页的路径,都会访问到“index.php”这个主页。总之,不管哪种方式,都是要在你的浏览器中输入地址 :-)

              这是我们这个应用的回调地址:http://tperry256.dreamhost.com/f8/tutorialapp/

               这是我们这个应用的面板页地址:http://apps.facebook.com/tutorialapp/

       15.   点击“I agree”接受你的应用的服务条款,然后点击“Add [你的应用的名称]”。

    16.   接着系统会自动转向到面板页,其中包含了“index.php”的运行的输出结果。

    17.   在这个应用中,进入你的用户信息栏中,你会发现“hello”字符,这个是你在前面设置的默认FBML。

       18.   最后,从左边的导航栏可以返回到面板页。

    在个人信息栏中使用FBML

    1. 下面是“index.php”的一个扩展版本,它可以将用户在表单中填写的字符串显示在用户的信息栏中
    2. 注意:提交空字符串会导致用户信息栏的无法显示!
    <?phprequire_once ‘appinclude.php’;
    
    echo "<p>hello $user</p>";
    
    if (isset($_REQUEST['profiletext'])) {  $facebook->api_client->profile_setFBML($_REQUEST['profiletext'], $user);  $facebook->redirect($facebook->get_facebook_url() . ‘/profile.php’);}
    
    echo ‘<form action="" method="get">’;echo ‘<input name="profiletext" type="text" size="30" value=""><br>’;echo ‘<input name="submit" type="submit" value="Display text on profile">’;echo ‘</form>’;

    在用户信息栏中使用mock-AjAX技术

    1. 下面的代码使用FBML的mock-AJAX技术在用户信息栏中增加一个表单,会给用户一种信息栏被动态更新的假象。
    2. 注意“index.php”文件的最上面对mock-AJAX进行调用的if语句。
    <?phpif (isset($_REQUEST['mockfbmltext'])) {  echo $_REQUEST['mockfbmltext'];  exit;}
    
    require_once ‘appinclude.php’;
    
    echo "<p>hello $user</p>";
    
    $fbml = <<<EndHereDoc<fb:subtitle>This is the subtitle</fb:subtitle>
    
    <form><input name="mockfbmltext" type="text" size="30"><br /><input type="submit"  clickrewriteurl="$appcallbackurl"  clickrewriteid="preview" value="Draw text below"/><br /><div id="preview" style="border-style: solid; border-color: black;  border-width: 1px; padding: 5px;"></div></form>EndHereDoc;
    
    $facebook->api_client->profile_setFBML($fbml, $user);
    
    echo "<p>the following form was added to the profile box:</p>";
    
    echo $fbml;

    使用Mysql数据库创建计数器

    1. 这个例子需要你在服务器上创建一个php脚本可以访问的数据库。
    2. 如果你没有数据库,就新建一个。
    3. 在这个数据库中新建一个名为“counter”的数据表,表中有一个名为“count”的integer类型的列。
    4. 创建一个新文件名为“dbappinclude.php”,将下面的代码粘贴进去,别忘了替换你自己的数据库地址,用户,密码和数据库名称。
    <?phprequire_once ‘appinclude.php’;
    
    $dbhost = ”;$dbuser = ”;$dbpass = ”;$dbname = ”;
    
    $conn = mysql_connect($dbhost, $dbuser, $dbpass);mysql_select_db($dbname, $conn);
    
    function query($q) {  global $conn;  $result = mysql_query($q, $conn);  if (!$result) {    die("Invalid query — $q — " . mysql_error());  }  return $result;}

    5.    现在在浏览器中访问下面这个新版本的“index.php”,主页将显示一个计数器,并且没访问一次“index.php”,计数器就会更新一次。

    <?php

    require_once ‘dbappinclude.php’;

    echo "<p>hello $user</p>";

    $rs = query("select count from counter");

    if ($row = mysql_fetch_assoc($rs)) {

    $count = $row['count'];

    query("update counter set count=count+1");

    } else {

    query("insert into counter values (1)");

    $count = 1;

    }

    echo "<p>the count is $count</p>";

    将这些例子代码集合到一起

    1. 这里是一个最终版本的“index.php”,将上面的例子集合到了一起,假定你已经在前一个例子中创建了“dbappinclude.php”
    <?phpif (isset($_REQUEST['mockfbmltext'])) {  echo $_REQUEST['mockfbmltext'];  exit;}
    
    require_once ‘dbappinclude.php’;
    
    echo "<p>hello $user</p>";
    
    $rs = query("select count from counter");if ($row = mysql_fetch_assoc($rs)) {  $count = $row['count'];  query("update counter set count=count+1");} else {  query("insert into counter values (1)");  $count = 1;}
    
    echo "<p>the count is $count</p>";
    
    if (isset($_REQUEST['profiletext'])) {  $facebook->api_client->profile_setFBML($_REQUEST['profiletext'], $user);  $facebook->redirect($facebook->get_facebook_url() . ‘/profile.php’);}
    
    echo ‘<form action="" method="get">’;echo ‘<input name="profiletext" type="text" size="30" value=""><br>’;echo ‘<input name="submit" type="submit" value="Display text on profile">’;echo ‘</form>’;
    
    $fbml = <<<EndHereDoc<form><input name="mockfbmltext" type="text" size="30"><br /><input type="submit"  clickrewriteurl="$appcallbackurl"  clickrewriteid="preview" value="Draw text below"/><br /><div id="preview" style="border-style: solid; border-color: black;  border-width: 1px; padding: 5px;"></div></form>EndHereDoc;
    
    $facebook->api_client->profile_setFBML($fbml, $user);
    
    echo "<p>the following form was added to the profile box:</p>";
    
    echo $fbml;

    相关下载

    1. facebook_client.tar.gz — php5的最新客户端库文件
    2. tutorialapp.tar.gz — 将文中例子合并到一起的代码。在你自己的服务器上运行时需要替换其中的“app_key”,“application secret”和数据库信息
    3. tutorialapp.zip –和上面tutorialapp.tar.gz内容相同,为zip压缩格式

    Posted in 未分类 at 06月 13th, 2008. No Comments.

    很精彩的一篇文章。

     

    全球第二大社交网站的facebook推出的开发平台在几个月之内迅速走红。在拒绝了yahoo,google等的收购后,它的狼子野心也暴露无遗,它要做基于web的OS,在它的开放发台上可以搭建集成任何应用。游戏、工作、理财一切都在facebook中了,浏览器+facebook,会成为以后人们的生活方式吗?

    然而不得不说facebook的官方文档既乱且差, 很多刚开发facebook应用的人可能都会丈二和尚摸不着头脑。这篇日志算是八卦+tutorial吧。

    一、facebook简介

    这段纯属废话,给那些不解facebook, 又不愿意点链接的人看。

    Facebook发源于哈佛大学,是目前社会化网络和web2.0的风向标。这个网站目前全球排名第8位,估值可能超过100亿美元。而Facebook开放平台的推出,更是让互联网业内认为它是最有可能和Google比肩的公司。Facebook创建于2004年2月。这样的高速增长和短短三年多取得的成就,成为当今互联网发展的一个奇迹。

    (Facebook创始人兼CEO Mark Zuckerberg)

    这里的介绍更详细:

    http://www.yeeyan.com/articles/view/thunder/2346

    二、facebook platform

    2007年5月24日,Facebook推出应用编程接口(API)。通过这个API,第三方软件开发者可以开发在Facebook网站运行的应用程序。这被称为Facebook开放平台(Facebook Platform)。

    没有什么比facebook创始人mark Zackerberg的总结更好了:

    "We want to make Facebook into something of an operating system so you can run full applications," Zuckerberg told me, saying it would be analogous to the platform that Microsoft Windows provides for developers.

    http://www.facebook.com/apps/ 看看吧, 那里的应用真是应用尽有。

    读写网总结的top 10 facebook apps也相当的棒:

    http://www.readwriteweb.com/archives/top_10_facebook_apps_work.php

    http://www.readwriteweb.com/archives/top_10_facebook_apps_play.php

    三、facebook 应用概述

    1、平台开发环境

    Facebook的开发环境是LAMP, 这套传统的linux+apache+mysql+php的架构尽管被很多java程序员和ruby程序员所不屑,但它却仍然以绝对的优势占据着主导地位。

    不过这对java程序员来说确实有点痛苦,因为facebook官方包装的java client相当的差,更关键的是它没有提供任何java开发web应用的例子和文档。幸亏还有一些非官方的tutorial。地址附在后面。

    2、应用集成

    谈到应用集成, 我们首先想到的是web services 和SOA, 这些被工业界吹了那么多年的buzzword终于得到了推广,然而值得讽刺的是最后web services的推广形式不是他们花了那么多年想出来的SOAP标准,而是最简单又不用任何标准的REST,facebook正是提供了一堆REST的Web services(从严格意义上说facebook的所有service都是POST过去的,URL也没有完全遵守REST)。

    然而这个层面的集成显然不能满足facebook作为web OS的需要,facebook需要让application运行在它提供的平台上。看看操作系统的需要就能想象到facebook的web OS应用提供怎么的集成。

    在windows上我们需要安装应用软件,facebook提供了完整的搜索、浏览、添加application的方式。

    在windows上我们利用各种快捷方式让应用运行在自己的平台里,facebook提供了运行应用的简单入口,而所有的应用都是在facebook内部展示的。

    记得前几天看到的一篇文章将应用集成分为三个层面:

    1 基于web services和SOA的应用程序交互

    2 平台运行在内部服务器上,而各种应用运行在外部服务器上,这正是facebook的方式

    3 平台和应用都运行在内部服务器上

    但是不知道他有没有想过第三种集成方式的扩展性和伸缩性是多么贫乏,我相信facebook的集成方式才是最好的方式。

    Facebook的这篇官方文档解剖了facebook应用集成到平台后的各个界面展示:

    http://developers.facebook.com/anatomy.php

    四、facebook应用种类

    Facebook提供了三类的应用:

    External application

    Iframe          

    fbml

    1、 external application没什么好说的,就是基于web services的集成,外部应用在经过facebook的认证后可以调用facebook提供的一些web services。

    2、 Iframe的集成也相当简单,只是在facebook平台的应用页面上放了个iframe, iframe里跑的是应用程序的应用。好象facebook里的最火的应用之一top friends是用iframe做的。但是由于iframe的天生限制,使它无法完全集成facebook平台提供的功能,如fbml,在页面的显示上也有些怪。

    3、 目前应用用的最多还是fbml。因为在fbml的应用中,facebook平台的页面(下图所示的菜单部分)和应用程序的页面(如下图黄色部分)是无缝显示的,看上去完全象是一个应用做的事。想象成OS的话,外部的菜单栏更象是windows提供的桌面和开始菜单,黄色区域则是应用程序。

    在fbml应用中,facebook平台主要起着中间人的作用,如下图所示,

    所有的用户对facebook平台的请求都被转到了应用的url(在application里可以配callback url),只不过是把所有的请求变为post, 同时加上认证必需的一些参数。最后返回的html显示在facebook的application区的canvas里。

    但是这个中间人的角色并不象想象中的那么简单, 它至少会引起以下问题:

    1、httpsession信息丢失, 基本上现在的httpsession都依赖于cookie中的jsessionid, 但是经过中间人(facebook服务器)后,cookie的信息是无法获取, 也意味着httpsession是无法保存信息的。因此所有的用户相关的信息都是加在中转后的reqeust参数里的,从request里的userId和sessionKey应用程序可以重建出用户的所有信息。 不过这倒反而实现了应用的share nothing architectue, 对系统的scalability是有好处的。

    2、外部css丢失,由于中转的时候只去request callback url里的页面,所有外部的css内容都是干掉的,应用程序只能在html文件里定义css,这对于css狂们真是灾难。

    3、js丢失,facebook会把页面中所有的js给滤掉,而取而代之用自己设计的有限的安全的js语言,这很重要的一部分原因是安全性。但对于ajax狂来说这又是灾难。

    五、facebook的authentication

    Facebook的认证过程其实不复杂, 但是如果java程序捧着官方提供的java包捣腾,恐怕还要费些功夫,官方那个只提供了桌面应用的认

    证程序,而web应用的认证过程则大厢径庭。

    应用程序在注册时会获得该应用的api_key和secret,这实际上是访问该应用的用户名和密码了,只有开发人员可以看到。事实上以后的每次调用facebook api都会带上这api_key,但这显然还不够,登录用户必须拥自己特定的信息:sessionKey, 每次调用带上这个key才能将用户的信息关联(类似于tomcat的jsessionid),因此认证的主要目的就是拿到sessionKey。

    上图是外部web应用的认证过程,这种应用只通过web services与facebook集成,这种应用唯一要做的是获得取得调用web services的权限,上图的流程很清楚了。如果用java开发,一般先用一个filter或其它interceptor拦截,如果发现没有登录facebook应用自动导到facebook的login页面(在request的参数里将登录完后回来的页面传进去),登录后跳回到原来的页面,就可以在filter中通过request里的authtoken获取sessionKey了, 这种应用一般将认证后的sessionKey放到HttpSession就可以了(以后不用重复认证)。

    上图是fbml应用的认证过程, 事实上内部应用的authentication远比外部应用简单,但是官方竟然没提供文档。由于facebook的用户必须登录才能使用,实际上在使用facebook应用时用户已经登录并拥有了sessionKey和user_id等参数,因此在中间人(facebook server)中转到应用的url时,它在request里会把sessionKey和userId等参数传进去, 因此在拿到这些参数后客户端可以直接进行任何web services的调用。

    六、facebook api (RESTful web services)

    Facebook提供了一堆的api,有认证、用户、相册、好友等功能,从使用的角度来说这倒并不存在什么难点。本身REST的api就是一个httpRequest请求过去返回一个xml的response。经过了官方或非官方的包装以后就变成一个简单的方法调用。

    1、所有的api调用都是无状态的,这也是facebook拥有这么好的scalability的重要原因。每个request里都会带上api_key, session_key, call_id, sig等参数, 这保证了安全性的同时也保证了scalbility。

    2、java的客户端调用包比起ruby来实在是恶心多了。这个时候动态语言的优势体现得太明显了。利用ruby的method missing功能,一个简单的实现就可以调用facebook的所有api了,而且扩展性好。Java的包里则定义了一堆恶心方法,而且返回的是一个xml document, 经过一堆的解析才能取到结果。

    七、fql与fbml

    Fql就是facebook版的sql,从使用的角度来说fql的其实挺简单,它只是sql的一个子集, 只支持单表查询,where条件必须是索引过的字段,支持子查询, 还支持一些sql的函数。最简单的例子:

    SELECT name, pic FROM user WHERE uid=211031 OR uid=4801660

    Fbml是facebook提供的一堆tag,它只能在fbml的应用程序中使用。从使用的角度来说也很简单,以下html显示了一个用户头像:

    <td><fb:profile-pic uid="${friendId}" linked="true" /></td>

    八、开发环境                       

    开发外部的facebook应用和iframe的facebook应用不需要任何的特殊配置,但是开发fbml的facebook应用却是另一回事了。从第四节的facebook as middleman的图中我们可以看到facebook服务器要读到应用的页面塞到facebook的canvas里。这意味着应用的页面必须是外网可以直接访问才能看到效果。

    而我们的开发平台却是搭在本地的, 难道只有部署到服务器上才能看到页面效果?这对开发调是一个严重的挑战。

    后悔我当初没有看到这篇blog, 利用SSH的reverse tunnel功能可以将外网的地址按端口号tunnel到本地的开发环境。

    http://blog.evanweaver.com/articles/2007/07/13/developing-a-facebook-app-locally

    我采用另一种方法:增加middleman,facebook本身起了一个中间人的作用,将facebook的请示导到了应用的请求,为什么我们不可以再增加一个中间人, 把外网的请求导到内网?

    幸好一个几十行的ruby on rails程序就可以搞定route的功能。

    这样实现后的配置也很简单,只要将callback url里的参数映射到本地机器就可以实现多人的同时开发:

        urlMap={

            :xcc=>’http://192.168.80.156/facebook/’,

            :skt=>’http://192.168.80.133/facebook/’

        }

    附  facebook平台开发的非官方tutorial:

    Ruby的:

    http://www.liverail.net/articles/2007/6/29/tutorial-on-developing-a-facebook-platform-application-with-ruby-on-rails

    http://giantrobots.thoughtbot.com/2007/6/14/fist-in-your-facebook

    java的:

    http://javablog.co.uk/2007/07/25/tips-for-writing-facebook-applications-in-java

    http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/08/02/how-to-make-facebook-apps-using-java-part-1/

    http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/08/13/how-to-make-facebook-apps-using-java-part-2/

    http://tmachine1.dh.bytemark.co.uk/blog/index.php/2007/09/21/ten-tips-and-tricks-for-writing-facebook-apps/

    Posted in 未分类 at 06月 13th, 2008. 1 Comment.

    由于原文较长,仅列出原文部分内容翻译,全文请看原文
    原文链接:Full WEB 2.0 API List

    Advertising

    Google AdSense
    广告管理

    Google AdWords
    搜索广告

    Microsoft adCenter
    在线广告服务

    UrlTrends
    链接跟踪和搜索优化

    Wordtracker
    搜索引擎优化服务

    Yahoo Ads
    在线广告管理

    Yahoo Search Marketing
    搜索广告平台

    Answerbag
    问答服务

    Blog Search

    Blogwise
    博客和Feed搜索服务

    SplogSpot
    Blogs Spams 搜索引擎

    Tailrank
    博客搜索和新闻聚合服务

    Technorati
    博客搜索服务

    Blogging

    Akismet
    防Blog spam服务

    Blogger
    Blogging服务供应商

    FeedBlitz
    Blogs的Email服务(订阅)

    FeedBurner
    Blog追踪服务(已和谐)

    LiveJournal
    Blogging软件

    Performancing
    Blog管理

    TypePad
    Blog管理

    Weblogs
    Blog ping服务

    Windows Live Spaces
    Blog服务

    Bookmarks

    Blogmarks
    社会化书签

    del.icio.us
    社会化书签

    linkaGoGo
    社会化书签服务

    Ma.gnolia
    社会化书签服务

    OnlyWire
    社会化书签服务

    Shadows
    社会化书签和社区

    Simpy
    社会化书签

    Calendar

    30 Boxes
    日历服务

    Google Calendar
    日历服务(我主要使用的)

    Spongecell
    日历服务

    Chat

    AOL Instant Messenger
    即时通讯聊天服务

    AOL Presence
    在线会议服务

    Google Talk
    聊天应用(这个比较常用)

    IMified
    即时通讯,目前支持pownce

    Lingr
    在线聊天室服务

    MSN Messenger
    聊天通讯

    WebAIM
    基于Web的即使通讯

    Yahoo Messenger
    即时通讯

    Community

    Blue Dot
    内容分享社区

    coRank
    分布式用户评论服务

    Facebook
    社会化网络服务

    PartySpark
    社会化事件服务

    RockYou Super Wall
    在Facebook内的内容分享平台

    Twitter
    社区网站

    Email

    Email Address Validator
    Email地址验证服务

    ExactTarget
    Email 递送服务

    IntelliContact
    Email买卖服务

    JangoMail
    大型email服务

    Mailbuild
    Email字体和模板服务

    Publicaster
    Email买卖管理

    StrikeIron Email Verification
    Email 确认服务

    Vertical Response
    管理服务

    Webmail.us
    Email托管服务

    WhatCounts
    Email 管理服务

    Yahoo Mail
    Yahoo提供的Email

    Enterprise

    Employease
    人力资源管理

    Google Provisioning
    Google Applications用户规定

    Lokad
    时间序列预报

    NetDocuments
    企业文档管理服务

    NetSuite
    商业应用套件

    Salesforce.com
    客户资源管理服务

    WebEx
    会议及协作服务

    Events

    Eventfinder
    时间日历

    Eventful
    事件发现及查询

    Spraci
    事件和俱乐部查询

    Upcoming.org
    协作事件日历

    Zvents
    本地时间查询和社区

    Financial

    Blinksale
    在线货品计价服务

    Currency Rates
    流通汇率

    Dun and Bradstreet Credit Check
    信用查询

    FreshBooks
    在线货品计价及时间查询

    KashFlow
    在线财务软件

    Moneytrackin
    费用跟踪

    NetAccounts
    在线会计服务

    Prosper
    点对点网络

    StrikeIron Historical Stock Quotes
    股票价格查询

    StrikeIron Mutual Funds
    基金查询

    StrikeIron Stock Quotes Basic
    实施股票查询

    Wesabe
    个人财务管理和社区

    Government

    Cicero
    美国参选官员查询服务

    Civic Footprint
    Illinois行政查询

    Democracy In Action
    非赢利辩护服务

    FedSpending.org
    美国政府开支数据库

    Follow The Money
    美国捐献活动数据库

    GovTracker
    Rhode岛州数据库

    Open Patent Services
    欧洲专利所网络服务

    Sunlight Labs
    美国国会数据服务

    TheyWorkForYou
    英国国会

    Who is my Representative
    美国重要会议数据库

    Internet

    Alexa Site Thumbnail
    站点缩略图

    Alexa Top Sites
    网站流量排行

    Amazon EC2
    Elastic Compute Cloud virtual hosting

    Clicky
    网站统计服务

    Compete
    网络统计服务

    Cordurl
    Geo coordinate translation

    Dapper
    API创建服务

    Domain Tools
    网络域名查询

    Durl.us
    URL缩短服务

    Ecommstats
    网站统计分析

    Hostip.info
    IP查询

    HTML2PDF
    HTML到 PDF转换服务

    Internet Archive
    非赢利网络图书馆

    Mint
    网站统计报告

    Mon.itor.us
    网站监测服务

    MyNotify
    Feed发布

    Outune
    网络地图服务

    Qurl
    URL转向

    SoftLayer
    系统管理和监测

    UnAPI
    网络剪贴板服务

    W3Counter
    网站统计工具

    Windows Live Custom Domains
    网站管理

    Yahoo Site Explorer
    网站分析工具

    Job Search

    Indeed
    工作搜索服务

    SmashFly
    工作发布服务

    Storage

    Amazon S3
    在线文件存储服务

    Box.net
    在线文件存储

    MoveDigital
    在线文件管理

    Omnidrive
    在线存储服务

    Open Xdrive
    在线数据存储

    Tagalag
    Email标签服务

    TagFinder
    Tag提取服务

    Tagthe.net
    Tag推荐服务

    TagTooga
    基于Tag的网络目录

    Video

    Truveo
    视频搜索

    Blinkx
    视频搜索

    Dave.TV
    视频分享社区

    LiveVideo
    视频库和用户社区

    Revver
    视频服务

    Veoh
    虚拟视频网络

    Video Detective
    视频剪辑

    Yahoo Video Search
    视频搜索

    YouTube
    视频分享和搜索

    Widgets

    ClearSpring
    Widget创建,发布和跟踪服务

    Google Gadgets

    Netvibes
    带有widgets的个性化主页

    Pageflakes
    带有widgets的个性化主页

    Serence Klip
    桌面小部件

    SpringWidgets
    Widget平台

    TagWorld
    社会网络服务

    Windows Live Gadgets
    在线小部件服务

    Windows Sidebar Gadgets
    桌面小部件

    Yahoo Widgets
    桌面widgets

    Yourminis
    个性化主页

    WIKI

    DBpedia
    Wikipedia查询

    JotSpot
    Wiki风格协作工具

    PBwiki
    公共wiki服务

    WikiMatrix
    Wiki搜索和比较服务

    Posted in 未分类 at 06月 13th, 2008. No Comments.