Posts Tagged ‘ twitter

“SNS”和“微博”——理念相克,试图揉合可能适得其反

SNS 和 Microblog 都已不是新鲜话题了,但有一个势头,SNS 想整合微博、微博想整合 SNS,我认为这不是好主意,可能会适得其反。

 

SNS 是什么?是关系,是加好友。七大姑八大姨、同学发小、客户伙伴……总之,你认识的人都得加上。毕竟,亲戚朋友多总是好事。

Microblog 是什么?是获取信息的途径。用来关注那些可能并不认识,但他们说的话使你感兴趣,能给你带来信息、思考或知识的人。

于是,冲突产生了:

  • SNS 应该鼓励实名化,微博随便匿名;
  • SNS 双向确认好友关系,微博应该单向关注;
  • SNS 鼓励多加好友、只要是认识的人;微博推荐物以类聚,不介意事先是否认识;
  • ……

 

拿 Twitter 这个显而易见的例子,如果我的某个发小在上面,我可能不会 fo 他。原因很简单,经过多年的各自发展,也许我们感情仍然很好,但隔行如隔山,我们可能很难有共同话题了。他发的他们那个行业很有意思的段子,可能我会觉得索然无味。上推是为了看一些有意思、对口味的信息,所以我不 fo 他。

那么,另外一个例子——豆瓣。它的社区应该是 Facebook 型的还是 Twitter 型的?设想一下,因为你在豆瓣把你的姑姑姨姨们加为了好友,某天你想买本 IT 书籍的时候,豆瓣会向你推荐某某菜谱;某天你想欣赏科幻电影的时候,它向你推荐xx韩剧;……是何感触?所以豆瓣的社区也应该是 Twitter 型的(大概一两年前,豆瓣有一个改版,似乎没经受住 Facebook 的诱惑,在原有的“关注”基础上,又增加了个加好友的功能。当时我相当讨厌,就离它远了点,后来的某个时刻,发现这个功能又被砍掉了,幸甚!)。

 

总结起来,凡是你想从所关注的人中获取有效信息的,或者系统根据所关注的人,通过算法自动向用户推荐有价值信息的,都应该是微博型的社区。而 SNS 适合生活化的东西,我觉得。

 

后记:刚发过一条推:

前几年,我订阅了很多互联网大佬的博客,带着崇敬的心情探头阅读这个行业。最近,我了解了一下大佬们的动向,发现他们主导的产品都关门鸟~。互联网跟体育一样,评论员当不好运动员。我还当不了评论员,努力成为一名运动员ing,嗯~!
http://twitter.com/wcm/status/8904614644551680

唔,敲自己脑袋,不要评论,要运动! @_@

Twitter API 应用

题外话:
———————————————————————
我的需求很简单,就是将最近的几条twitter信息显示在blog上。

首先想到的办法就是,直接用blogger提供的feed功能。可是,输出的每条信息前都有个“Wang Congming:”长长的前缀,不喜欢。而且,blogger每抓取一次feed好像要缓存挺长时间,而twitter应该是实效性比较强的,恩~。

然后,就想到用twitter官方提供的Badges。However,他们给的不是我想要的。所以,只好去看看API说明,自己动手。

小小原理:
———————————————————————
twitter支持四种格式的数据输出:xml, RSS, ATOM, JSON,以及 GET 和 POST 两种方法。当然,只是查询一下不需要授权的数据,自然用不上POST。所以,只需要GET一个JSON就行,通过URL传递适当的参数,得到我们需要的数据。

传递过来的 json 是一个函数,而我们需要的数据作为函数的参数。唯一要做的,就是事先定义这样一个函数,告诉它该怎么执行,怎么显示其中的数据。至于函数名,GET 时由自己用 callback 参数指定。

Click the expand button to read full text…

数据结构
———————————————————————
返回的数据类似以下结构:

twitterCallback([   {      "created_at":"Sat Apr 28 15:45:24 +0000 2007",      "text":"信息的内容~",      "id":43160262/*该条信息的数字编号*/,      "user":{         "name":"Wang Congming",         "profile_image_url":"http:...",         "description":"自我介绍",         "location":"BeiJing",         "screen_name":"WCM/*用户名*/",         "url":"http:...",         "id":5002701/*用户的数字编号*/,         "protected":false      }   },   {      /* 第2/3/4...条信息,重复以上形式 */   }]);

完成
———————————————————————
根据以上数据,得代码如下:

<ul id="my_twitter"><li>Loading...</li></ul>

<script type="text/javascript">function relative_time(time_value) {   var time_correct = time_value.split('+0000');   var parsed_date = Date.parse(time_correct[0]+'GMT+0000'+time_correct[1]);   var relative_to = new Date();   var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);   if(delta < 60) return 'less than a minute ago';   else if(delta < 120) return 'about a minute ago';   else if(delta < (45*60)) return (parseInt(delta / 60)).toString() + ' minutes    ago';   else if(delta < (90*60)) return 'about an hour ago';   else if(delta < (24*60*60)) return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';   else if(delta < (48*60*60)) return '1 day ago';   else return (parseInt(delta / 86400)).toString() + ' days ago';}function twitterCallback(obj){   var twitterHTML = '';   for(var i=0; i<(obj.length); i++){      twitterHTML += '<li><span class="item-title"><a href="http://twitter.com/wcm/statuses/'+obj[i].id+'">' + obj[i].text + '</a></span><span class="item-date"> - ' + relative_time(obj[i].created_at) + '</span></li>';   }   document.getElementById('my_twitter').innerHTML = twitterHTML;}</script>

<script src="http://twitter.com/statuses/user_timeline/5002701.json?callback=twitterCallback&count=5" type="text/javascript"></script>

效果如右侧~

总结一下
———————————————————————
1、以上代码,如果去掉ul间的“<li>Loading…</li>”,然后存为一个单独的文件,将无法正常显示,加上后又变为正常。当然,并不限于Loading…,也并不限于ul之间。也就是说,只要在任何可以的地方,加上任何字符,就OK了,不加就不行,IE和ff均如此,不理解……。

2、twitter输出的”+0000″时区没有指名是哪个标准时间(虽然没多大差别),这将导致IE的Date.parse语法分析出错,所以先在”+0000″前加上GMT再分析。

3、”…/5002701.json?callback=twitterCallback&count=5″。这里的5002701要换成自己的编号;twitterCallback即是指定的返回函数名,可自由命名;除了count外,还有其他筛选条件,如指定起始日期的since等。

4、Twitter API官方文档

关于JSON (JavaScript Object Notation): http://www.json.org/json-zh.html