posts - 138, comments - 1881, trackbacks - 97, articles - 13
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

是否非常羡慕别人的文章有机会冲上Digg头版,接着带来大量的访客呢?是否也希望自己的文章也能受到链接的宠爱,从而获得更高的PageRank呢?好,跟我来,让我帮你把文章接入到Social Software中。

首先,你知道Social Software是什么吗?从广义上来说,就是能够让人们联系或聚集到一起的软件,老式的邮件列表或者新闻组也算是,然而通常我们用它指现代的blog和wiki平台。我们正在写的博客也算是Social Software,然而它还不够sociable,例如我们在博客园最多也就能把文章发布到首页,所以我们需要一个更加大范围的平台,例如Digg,而把你的网站接入到Digg仅需一个按钮——"Digg This!"按钮。

Digg This?

想象一下,你的访客来了,他觉得你这篇文章真是非常有价值,希望分享给其他人看,然后他就想点下那个写着"Digg This!"的按钮。慢着,按钮在哪?这位访客发现他当前用的这个浏览器没有这个按钮,你的文章页面上也没有这个按钮。要自己跑去Digg点击提交文章,然后把地址和标题复制粘贴过去,这多麻烦啊,所以他直接放弃了这个想法然后关掉了当前页。找不到"Digg This!"按钮的事情让访客感到沮丧(frustrated),他也就没心情看下去了,这样就跑掉了一个访客,多可惜啊。

网站上的文章可以不好,但网站导航不能不好,让访客感到沮丧可是一大忌。什么是沮丧?我们来查一下frustrated,其意思就是你很想做一件事情然而总是有些障碍让你无法绕过去也无法达成目标。对于网站导航来说,让访客沮丧的情况通常发生在访客认定他要的信息或者功能就在你的网站上,然而通过链接导航或者搜索导航都无法到达目标。一个好的网站应该尽量提供用户所期望的信息和功能,并且提供清晰的导航,既然访客可能需要"Digg This!"按钮,我们就应该提供给他们。

TechCrunch上个星期有条新闻标题为New York Times Surrenders To Social News,意思是“纽约时报向社会化新闻投降”,说的是New York Times网站上面部分版面的文章已经加入了共享功能,包括把文章共享到Digg、Facebook和Newsvine的链接。既然连New York Times这样的传统媒体巨头也加入了"Digg This!"按钮,我们又怎能不加?

一个按钮就这么简单

要加一个"Digg This!"按钮其实很容易,参考官方的帮助你就知道这仅需如下格式的一个链接:
http://digg.com/submit?phase=2&url=&title=&bodytext=&topic=
其中url参数用于传递地址,title参数用于传递标题,这两个最好就是文章原本的地址和标题。bodytext参数写你的推荐原因,topic参数表示推荐到的Digg栏目,这两个参数通常不在链接中提供而让读者到了Digg的提交页面后再填写。这四个参数都应该经过UrlEncode。

如果使用Blogger之类的支持HTML模板的引擎,要放上一个这样的链接很简单,直接写一个链接然后加上模板所支持的参数替换就能把url和title两个参数搞定,可惜博客园的.Text引擎不支持HTML模板,也不支持参数替换。这样就沮丧啦?如果是的话,你的一群读者要跟着你一起沮丧了。我们还是一起努力把这个链接搞定吧,就一个链接而已,能够有多难?

Do It Yourself

你确认你是一个很有hack精神并且乐于DIY各种小玩意儿的人?那就跟我一起制作适用于博客园的"Digg This!"链接吧。如果你想先预览一下效果,可以看看本文正文下方的那个"Digg This!"链接。

我这里为大家提供了一个用于自动添加"Digg This!"按钮的JavaScript,这段代码是我昨天花了两个小时调试出来的,能够在我当前使用的博客园模板上自动为文章页添加"Digg This!"链接。在博客园的设置中找到“页脚Html代码”这一栏,把代码贴进去就行了,别忘了要用<script type="text/javascript"></script>把代码包装起来。我不能确保这段代码一定能在你当前使用的模板上正常运行,所以这需要你有一定的JavaScript基础和DIY精神,根据你的实际情况作一些修改。

在这里我可以解释一下这段代码的工作方式:通过对比首页的HTML和文章页的HTML,我发现了文章页的标题链接有一个特有的class="singleposttitle"属性,我就通过这个属性是否存在检测当前页面是首页还是文章页。代码执行时会循环迭代页面上所有的文章节点,如果它确认当前的是文章页,它就在第一个文章节点的尾部追加一个<div />上去,然后添加"Digg This!"等的链接。

之所以要求你有一定的JavaScript基础和DIY精神,是因为我发现不同的模板输出的HTML结构差异非常大,你必须手动分析你当前所使用的模板输出的HTML,然后编写正确的JavaScript去识别页面性质并执行添加链接的任务。而且你对页面的添加功能需求细节可能和我不同,我的代码中有一句anchor.style.fontSize="14pt";是用于将当前文章标题链接放大的,可能你并不喜欢那么大的标题文字,也可能你希望在页面中别的地方添加"Digg This!"链接,这都依赖于你的JavaScript编写能力了。

还有更有趣的吗?

如果你不仅仅希望有"Digg This!"按钮,还希望有"Add to del.icio.us"、"Share on Facebook"、"Google Bookmark This"等按钮,你都可以自己加。分析第三方服务的调用方式不难,分析HTML结构特征也不难,你需要的就是一点点的DIY精神加上了解新鲜事物的激情,然后一切都会变得十分容易。

前一段时间我在TechCrunch见到Snap的网页截图预览功能,然后就放到自己的博客中用,接着发觉越来越多博客园用户开始使用这东西,看来好东西真的是会一传十、十传百的。然而我们不能总是等看到别人有好东西了,自己再拿来用,我们需要有一点创新精神和动手能力,自己想一点新功能出来然后把它实现了。现在我为自己在博客园的文章添加了"Digg This!"按钮,或许迟点我会添加一些更有趣的功能上去,让它看上去更AJAX一些,这依赖于我何时能找到一台稳定服务的ASP.NET服务器。如果你对这方面的hacks(技巧)感兴趣并且希望长期关注的话,可以考虑订阅Cat in dotNET。如果你觉得这篇文章不错的话,你可以点击下面的"Add to del.icio.us"或"Google Bookmark This"进行收藏。

P.S.

希望dudu能够为我们这些博客园中真正名副其实的hackers提供一些帮助。现在博客园是支持“通过CSS定制页面”的,这是通过引用/{username}/customcss.aspx实现的,不知道dudu能否以类似的方式提供“通过JavaScript定制页面”的支持,这样我们就可以避免把JavaScript直接写到页面上去,从而减少其重复下载的次数。另外现在那个customcss.aspx也是强制浏览器每次都重新下载的吧,是否可以考虑将地址形式改为/{username}/{timestamp}/customcss.aspx呢?其中timestamp是用户最后更新CSS设置的时间,同时允许浏览器对CSS进行缓存,这样就能有效的减少CSS的重复下载。

Feedback

#1楼   回复  引用  查看    

2006-12-16 22:49 by neoragex2002      
必须是英文文章,否则digg了也没人看

#2楼[楼主]   回复  引用  查看    

2006-12-16 22:57 by Cat Chen      
@neoragex2002
理论上是吧,Digg确实不会有中文文章,但中文文章仍然可以通过del.icio.us等社会化收藏夹功能提升自己的价值。

#3楼   回复  引用  查看    

2006-12-17 10:52 by Dflying Chen      
@Cat Chen
难道又要开始写英文了?

#4楼   回复  引用  查看    

2006-12-17 12:22 by 网路冷眼      
真不错!

#5楼[楼主]   回复  引用  查看    

2006-12-17 15:37 by Cat Chen      
@Dflying Chen
有考虑过写英文技术文章,但估计不会在这里写,还是那个观点——“物以类聚”,在这里写英文技术文章浏览量肯定上不去,所以要先找个比较多.NET开发者聚集的英文社区。

#6楼   回复  引用  查看    

2006-12-17 16:52 by dudu      
谢谢你的建议!
我先记下,然后在开发中改进。

#7楼[楼主]   回复  引用  查看    

2006-12-17 17:42 by Cat Chen      
@dudu
谢谢dudu的支持!

只有博客园的用户能“博”得成功,博客园才可能成功。dudu那么热心于改进博客园的功能满足众多用户的新需求,博客园的前途肯定有保障,我们这些用户也应该多写好文章,作为对博客园的一种投资,相信这些投资将来肯定会随着博客园的成功而升值的。

#8楼   回复  引用  查看    

2006-12-17 18:18 by Jeffrey Zhao      
博客园现在的做法给Script Injection等带来了很好的温床,这些Security Issue的危害性绝对是最高级别的。说真的,相信掌握这些方法的朋友们有许多,还好博客园的兄弟姐妹们自觉……
我还是希望dudu能给我们灵活的环境,但是也希望园子有什么措施保证安全性,不管是软件还是硬件的方式,否则我想可能是博客园潜在的危机阿……

#9楼[楼主]   回复  引用  查看    

2006-12-17 18:58 by Cat Chen      
@Jeffrey Zhao
应该不会的,只要限制好每个用户的script仅在他自己的博客上出现就好了,这时候username.cnblogs.com就很有意义了——因为经过username.cnblogs.com引用的js被强制划分了域,跨域操作限制多多,很难做出什么来。但现在大家都共享在一个www.cnblogs.com的域下面,一个用户通过js来动其他用户的站点不是不可能。

#10楼   回复  引用  查看    

2006-12-17 19:53 by dudu      
@Cat Chen
博客园的价值就在于博客园所聚集的人群,不断为大家提供更好的服务是博客园运营的核心。

#11楼   回复  引用  查看    

2006-12-17 20:01 by dudu      
@Jeffrey Zhao
谢谢你的提醒!

#12楼   回复  引用  查看    

2006-12-17 20:57 by Jeffrey Zhao      
@Cat Chen
可惜还可以使用Script动态生成iframe,iframe通过query string来传递信息给另一个网站用来收集信息……
说个最简单的例子,你想一下,Google Analytics也好,别的统计工具也好,如果不能跨站点传递数据,它们又怎么可能收集站点访问信息呢?

#13楼   回复  引用  查看    

2006-12-17 20:58 by Jeffrey Zhao      
@dudu
其实灵活性和安全性在一定程度上就是一个悖论……难为dudu了。

#14楼[楼主]   回复  引用  查看    

2006-12-17 22:16 by Cat Chen      
@Jeffrey Zhao
JavaScript是不能够跨域操作的,如果我用JavaScript创建一个IFrame,然后它打开另一个域的网页,那么JavaScript不能够操作此IFrame中的内容,也不能和IFrame内的JavaScript交互。

域的概念定得很死,必须是相同host相同port,就算同host而分别是http和https,因为默认的port不同也会被认为是不同的域。所以Atlas才要提供Bridge(这个好像很少人研究),让你的JavaScript调用其他域的HTTP服务。

Google Analytics的工作,是因为它让你引用的js文件来自它的域,所以它能够收集客户端数据并发送到它的服务器。域的判定不是基于HTML文件的,而是基于单个文件的,如果你的HTML文件引用了来自两个不同域的js,那么这两个js之间不能够互操作。

#15楼   回复  引用  查看    

2006-12-17 22:45 by Jeffrey Zhao      
@Cat Chen
它获取信息之后不用当场作些什么啊,我说用Iframe如何只是指可以用这个方法来收集信息,例如用户的Cookie等等。因此像Windows Live Spaces是完全禁止Script Injection出现的……
// Atlas的Bridge只是使用了Server作为了Proxy吧

#16楼[楼主]   回复  引用  查看    

2006-12-17 23:02 by Cat Chen      
@Jeffrey Zhao
IFrame来收集Cookies?这也要看是否同一个域啊,虽然Cookies的域定义宽松得多。这事情我干过啊,以前管理一个动网论坛时我就用此方法得到另外一位管理员的Cookies,以此告诉他就算允许用户上传的仅是静态HTML文件也很不安全。但关键是IFrame引用的页面必须在同一个域内,所以才必须上传到论坛所在站点上,如果把引用页面放在别的免费host上面就无法获取Cookies了。

所以我还是建议dudu把每个用户按域名区分开来吧,然后把所有Cookies域设置为域名,确保不能垮域名访问。这样一个用户喜欢怎么hack他自己的那个站点也没所谓,反正跨域的hack是做不到的。

#17楼   回复  引用  查看    

2006-12-17 23:09 by Jeffrey Zhao      
@Cat Chen
哎?我说的用IFrame来收集Cookie不是指用IFrame里的页面直接得到Cookie,而是在外部得到Cookie之后,通过query string传递给IFrame的页面。

#18楼[楼主]   回复  引用  查看    

2006-12-17 23:54 by Cat Chen      
@Jeffrey Zhao
哦……你的意思是你在浏览我的blog时,我的blog的JavaScript有权限读取你的Cookies。

是啊,所以Community Server引入了SgmlReader,将HTML解释为一种比较宽松的XHTML(至少符合XML),然后使用white-list方式对XHTML进行过滤。这个white-list可以通过config配置,指明哪些tag和attribute是安全的。在默认的配置中,script不安全,连style都不安全,因为style中可以通过expression执行script。

#19楼   回复  引用  查看    

2006-12-18 10:50 by HardRock      
说实话,你的主题可以在博客园吸引更多眼球,在Digg就别指望了,你有没有注意过在Digg的首页上有中文的文章,有多少技术文章吗?广把主题加入到Digg又有什么用呢?有多少人为dugg呢?



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 594463




相关文章:

相关链接: