12DECEMBER |
|---|
本文记录youtube 的几个常用api,并使用其中一个介绍其使用方式。
首先,我们来看看这几个api:
http://gdata.youtube.com/feeds/users/username/uploads
\- videos uploaded by username
http://gdata.youtube.com/feeds/users/username/favorites
\- videos bookmarked by username
http://gdata.youtube.com/feeds/users/username/playlists
\- playlists created by username
http://gdata.youtube.com/feeds/users/username/subscriptions
\- username's subscriptions
就是说,如果你要显示username这个用户(不知道有没有这个用户)的视频,可以访问
http://gdata.youtube.com/feeds/users/username/uploads
这个路径来获取数据。其他的就不用讲了。
有趣的是,google给这四个api设置了差不多的参数,常用的有:
?max-results=50:
最多要返回的记录数(默认情况下是25),不过要记住,youtube每次访问可返回的最大值恰好也是50,如果想要获得更多内容,可以多请求几次,哈哈。
?alt=rss or ?alt=json:
alt参数用于设置返回内容的格式。
?vq=query:
用于筛选结果,会从 metadata (title, tags, description)中进行检索,比如“google+ maps”,就是搜索google map。
?orderby={updated, viewCount, rating, relevance}:
排序,示例中以updated为第一排序,relevanced作为最后一个排序。
使用jquery的AJAX进行访问也很简单:
$.ajax({
type: "GET",
url: "http://gdata.youtube.com/feeds/users/username/uploads?alt=json”,
cache: false,
dataType: 'jsonp',
success: function (data) {
showMyVideos(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown, data) {
alert("Not able to fetch the data due to feed unavailability!!!");
}
});
这里的showMyVideos(data)的方法就没必要写了,实际上我们只要随便找之前用到的播放器把内容显示出来就行了。而data结构还是比较复杂的,这里简单说一下。
data实际是个数组,针对其中的每一个entry(=entries[i]),我们常用的内容有:
entry.title.$t:视频的标题
entries[i].media$group.media$thumbnail[0].url:视频的缩略图
entries[i].media$group.media$content[0].url:视频的实际地址,这里content[0]实际是第一视频的地址,这个是flv格式的视频,如果不支持flash,可以取第二个。
entry.published.$t:这是发布时间。
entry.yt$statistics.viewCount:这个是被浏览次数。
似乎没有直接提供视频的id,但是我们可以通过字符串算出来:
entries[i].media$group.media$content[0].url.substr(playerUrl.indexOf(‘v/’) + 2, 11)
好了,基本的东西就这些了,其实也可以自己在firebug中输出一下,然后对比一下就知道怎么回事了,或者输出rss自己对比xml。还是很简单的。
20OCTOBER |
|---|
昨日有朋友问及关于facebook 的php sdk的问题,由于之前并没有关注其php sdk,并不是特别的了解,于是专门下载了php sdk来试用,现把学习所得与大家分享。
首先,到facebook的开发者站上下载php的sdk,具体页面在以下地址:
https://developers.facebook.com/docs/reference/php/
这个页面其实是使用文档,讲到了许多使用方法。下载后把下载的压缩包解压缩到站点的目录中即可。
下载的sdk中,有个example.php的文件(具体在example的子文件夹中),这其实就是一个登录并获取用户基本信息的一个演示。另外还有一个结合jssdk的演示,功能一样,效果不一样而已。
演示中提供了默认的appkey和secretkey,但是我只是第一次测试的时候,用它登录成功了,但后来再测试的时候就不能正常使用了,换了我的某一个应用的key,还是不能访问,提示说没有通过url访问的权限之类的说法。不得已,只好创建了一个新的应用,设置url为测试用的域名,还是报一样的错误。
仔细查找后发现,facebook此次升级版本后,增加了好多设置,其中有个url访问的设置默认是关闭的,将其打开即可。具体该选项在高级设置(Advanced)里,叫做Stream post URL security。
我们只分析php sdk的代码,关于jssdk的代码之前曾有文章提到过。
小提示:
使用php sdk,必须打开php_curl.dll,在php.ini中,找到该行,去掉前面的分号,重启apache即可。
首先,引入facebook 的phpsdk,并初始化facebook对象:
require '../src/facebook.php';
// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
'appId' => '191149314281714',
'secret' => '73b67bf1c825fa47efae70a46c18906b',
));
初始化中,要把appid后的数字修改为自己申请到的应用的appkey,secret也修改为对应的secretkey,注意secretkey是可变的,如果你觉得你的应用被其他人冒用,可以重新生成该值,但你所有的应用中对应值都要相应的修改。
查看是否有用户已登录:
$user = $facebook->getUser();
// We may or may not have this data based on whether the user is logged in.
//
// If we have a $user id here, it means we know the user is logged into
// Facebook, but we don't know if the access token is valid. An access
// token is invalid if the user logged out of Facebook.
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$user\_profile = $facebook->api('/me');
} catch (FacebookApiException $e) {
error\_log($e);
$user = null;
}
}
// Login or logout url will be needed depending on current user state.
if ($user) {
$logoutUrl = $facebook->getLogoutUrl();
} else {
$loginUrl = $facebook->getLoginUrl();
}
$user是通过sdk检测是否用户已经登录。
其中提到的几个方法分别说一下:
$facebook->getUser();
如果已登录,$user就是用户id,否则为空。
$facebook->getLogoutUrl();
如果用户已经登录,可以通过此方法,获取一个退出的链接。
$facebook->getLoginUrl(); 如果用户未登录,可以通过此方法,获取一个登录的链接。点击该链接会到一个登录页面并授权的页面,登录成功并确认授权后会返回之前的页面。
$facebook->api(‘/me’);
获取当前登录用户的详细信息;如果要访问某用户的信息,比如naitik’,则可以写做:
$facebook->api(‘/naitik’);
其中,$facebook->api(‘/me’); 就是调用具体api的写法。
前面的文章中提到过js sdk的使用,有这么一段:
FB.api({path}, 'GET', {}, function(response){
if (!response || response.error) {
alert('Error occured');
}
else {
…
}
})
其实这里的写法也是完全类似的,第一个参数就是路径,第二个参数是访问谓词,一般是GET、POST、DELETE等,第三个参数是一个数组,就是对应的方法的文档中所需要的参数。当然,我们这个程序就不需要回调函数了,呵呵,下面有一个完整的写法示例:
$facebook->api('/daaku.shah', 'DELETE', array(
'client\_id' => self::MIGRATED\_APP\_ID));
总的来看,facebook提供的sdk还是比较好用的。虽然在论坛上有许多人说它难用,但我估计是因为facebook太庞大了,api研究不过来,不像优库那样只有一个接口。对比严重抄袭facebook的renren,renren的api设计的简直是欠抽:那个东西才叫做难用,搞好几天都调不通!再一个,说说土豆,文档跟进缓慢,很多东西忘记写入文档了???而且示例也不通!
废话说多了,把国内的几个网站都得罪了,不过还是希望提到的几个网站能够及时优化,开发平台如果很难用,就别开放了。
好了,关于php sdk的入门就写到这里,感觉往下也没有什么好写的了(难道要写具体的api方法?)。如果朋友们有兴趣,欢迎留言,我们再深入探讨。
20OCTOBER |
|---|
[kivu]( “[email protected]”) -
嘻嘻,不错,写得很详细,把你这网址收藏了,有机会可以交流!
[kivu]( “[email protected]”) -
http://www.facebook.com/wbintl?sk=app_276923065674608在这个专题应用程序页,你的facebook就算登陆了,也得在这里 login一次才不会返NULL。请问LOGIN这一步能跳过?我想客户打开这个应用程序,直接获取他当前语言,选择对应语言专题。?
这个链接看似应该是打开一个应用,但链接并没有通过应用的方式去打开,如果链接:
http://www.facebook.com/276923065674608
则会到应用的介绍页面,点进入应用会有授权。
如果链接:
http://apps.facebook.com/wbabout/
直接到应用页面。
不知道是这个意思么?
[kivu]( “[email protected]”) -
facebook 换版了,以前在应用程序里点See App Timeline View然后就可以选择要把这个应用程序加到哪个专页的,现在不知道改哪里去,嘻嘻,你也看看怎么样才能把应用加入到指定专页!
[Jason]( “[email protected]”) -
ok,我正好有时间。
28SEPTEMBER |
|---|
土豆的api很有问题,其登录使用了OAuth的认证,相关说明却直接链接到OAuth的官网去了,那总得把自己的认证服务的路径写上去吧!
找了半天,终于从其论坛中找到以下几个地址,
Tudou OAuth服务URL
Request Token URL: 获取未授权的Request Token服务地址;
http://api.tudou.com/auth/request_token.oauth
User Authorization URL: 获取用户授权的Request Token服务地址;
http://api.tudou.com/auth/authorize.oauth
Access Token URL: 用授权的Request Token换取Access Token的服务地址;
http://api.tudou.com/auth/access_token.oauth
论坛说文档中增加了,其实文档中还是没有。先记下,免得忘记。
23SEPTEMBER |
|---|
发现一些与分享url有关的api接口,记录下
Facebook - http://graph.facebook.com/?ids=http://www.seomoz.org
Twitter - http://urls.api.twitter.com/1/urls/count.json?url=http://www.seomoz.org
Linkedin - http://www.linkedin.com/cws/share-count?url=http://www.seomoz.org
Stumbleupon - http://www.stumbleupon.com/services/1.01/badge.getinfo?url=http://www.seomoz.org
Delicious - http://feeds.delicious.com/v2/json/urlinfo/data?url=http://www.seomoz.org
Google Buzz - https://www.googleapis.com/buzz/v1/activities/count?alt=json&url=http://www.seomoz.org
Reddit - http://www.reddit.com/api/info.json?url=http://www.seomoz.org
参考资料:
1、Seo blog:http://www.seomoz.org/blog/how-to-track-your-social-media-strategy
31JULY |
|---|
近期有个mobile的项目,需要在项目中加两个功能,是在twitter和facebook上发消息的按钮,客户不想自己做界面,希望直接调用各自网站上的页面发消息。这俩网站国外很流行,国内却无法访问,也没怎么用过,不甚了了。于是开始查资料。
1、Twitter
twitter上发消息其实很简单,很多地方提供生产twitter按钮的功能,访问也完全支持get方式的访问。就是说完全可以直接输入一个url地址,就可以打开对应的twitter页面,且可以传入想要的信息内容。对比国外网站对twitter的引用和官网上提供的button按钮的说明,我们很快找到了这样一个地址,示例如下:
http://twitter.com/intent/tweet?status=i%20think%20is%20 @zsz417 http://baidu.com
这个地址用来修改用户的状态(status),不过twitter似乎也就有个状态而已,所有的信息无非就是通过status来表现的。你看,有内容,有url,还可以@某人,直接写入,就很完整了啊。当然,由于twitter中对状态有140个字符数的限制(国外的140个字符能表达充足的含义么),如果url比较长,最好通过短网址服务把网址做短喽。经过简单的几个测试后,就把该链接交给mobile开发的同事去用。
不过,很快mobile组那边就找过来,说每次发twitter都得登录,那是相当的麻烦。经跟踪发现,用mobile访问twitter,它会自动重定向到mobile.twitter.com进行登录,而且cookie仅仅对mobile.twitter.com有效(当然对当前连接也是有效的),而这个网址是web版本的,它需要www.twitter.com 这个网址上的cookie。(这个twitter也太不地道了,咋能这样呢?)
由于英语欠佳,资料查起来也很费力,而且baidu上面的资料几乎没有有效的,而google搜索相关敏感词语时,时不时就被墙了。喵了个咪的,人在天朝,全凭想象啊,猜吧。改下访问路径:
http://mobile.twitter.com/intent/tweet?status=i%20think%20is%20 @zsz417 http://baidu.com
键入地址后,竟然跳到了@intent这个用户的页面,我了个去,还是加密连接。看来这次猜的不给力啊。
边查边猜,发现另外一种写法:
那么,是不是它有对应的mobile版的写法呢:
https://mobile.twitter.com/?status=
这个加密连接,是自动重定向上去的(我修改agent为iphone了)。那在mobile 上直接访问这个,岂不更好?急忙交割mobile的同事去测试,OK,通过了。
2、Facebook
facebook的资料还是有一些的,比较适合我们的,资料上有这样一个链接(注意这个用法已过期):
http://www.facebook.com/sharer/sharer.php?u=http://www.sina.com.cn&t=this is sina
其中参数u是链接,t是标题,意味着可以分享一个网页,并且可以定义title。09年很多网页中也都是这么写的。但经过测试,facebook对这个sharer进行了优化,它自动抓取了网页的title以及首页的title,甚至抓取了其中的某些图片和描述信息,另外还有个用于用户输入的框。也就是说,现在这个只有u参数的写法还是对的,t这个参数已经无效了。几经测试,并不能完成客户的需求,只好再查找其他资源。(我并没有从facebook api文档中找到这个sharer的用法,惭愧)。
在facebook api文档的对话框项目中,发现有这么个用法:
其中:
其他的非必填项有:
先留下来做记录吧,不知道facebook哪天又要修改它的api,/晕。
备注,注意翻 墙。