logo

Shapez Theme

· Home Playground About

12


DECEMBER

本文记录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。还是很简单的。

logo

Shapez Theme

· Home Playground About

20


OCTOBER

昨日有朋友问及关于facebook 的php sdk的问题,由于之前并没有关注其php sdk,并不是特别的了解,于是专门下载了php sdk来试用,现把学习所得与大家分享。

下载php sdk

首先,到facebook的开发者站上下载php的sdk,具体页面在以下地址:

https://developers.facebook.com/docs/reference/php/

这个页面其实是使用文档,讲到了许多使用方法。下载后把下载的压缩包解压缩到站点的目录中即可。

appkey和secretkey

下载的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方法?)。如果朋友们有兴趣,欢迎留言,我们再深入探讨。

logo

Shapez Theme

· Home Playground About

20


OCTOBER

嘻嘻,不错,写得很详细,把你这网址收藏了,有机会可以交流!

[kivu]( “[email protected]”) -

嘻嘻,不错,写得很详细,把你这网址收藏了,有机会可以交流!


http://www.facebook.com/wbintl?sk=app_276923065674...

[kivu]( “[email protected]”) -

http://www.facebook.com/wbintl?sk=app_276923065674608在这个专题应用程序页,你的facebook就算登陆了,也得在这里 login一次才不会返NULL。请问LOGIN这一步能跳过?我想客户打开这个应用程序,直接获取他当前语言,选择对应语言专题。?


这个链接看似应该是打开一个应用,但链接并没有通过应用的方式去打开,如果链接:

http://w... Jason.Z -

这个链接看似应该是打开一个应用,但链接并没有通过应用的方式去打开,如果链接:
http://www.facebook.com/276923065674608
则会到应用的介绍页面,点进入应用会有授权。
如果链接:
http://apps.facebook.com/wbabout/
直接到应用页面。
不知道是这个意思么?


facebook 换版了,以前在应用程序里点See App Timeline View然后就可以选择…

[kivu]( “[email protected]”) -

facebook 换版了,以前在应用程序里点See App Timeline View然后就可以选择要把这个应用程序加到哪个专页的,现在不知道改哪里去,嘻嘻,你也看看怎么样才能把应用加入到指定专页!


ok,我正好有时间。

[Jason]( “[email protected]”) -

ok,我正好有时间。


logo

Shapez Theme

· Home Playground About

28


SEPTEMBER

土豆的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

论坛说文档中增加了,其实文档中还是没有。先记下,免得忘记。

logo

Shapez Theme

· Home Playground About

23


SEPTEMBER

发现一些与分享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

logo

Shapez Theme

· Home Playground About

31


JULY

         近期有个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这个用户的页面,我了个去,还是加密连接。看来这次猜的不给力啊。

        边查边猜,发现另外一种写法:

        http://twitter.com/?status=内容

        那么,是不是它有对应的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文档的对话框项目中,发现有这么个用法:

     http://www.facebook.com/dialog/feed?app_id=123050457758183&redirect_uri=http://www.facebook.com&message=I%27m%20not%20ignoring%20you.%20I%27m%20just%20waiting%20for%20you%20to%20talk%20to%20me%20first.%20http://baidu.com

     其中:

  1.     app_id是必填,且必须是1230204577581这么个值,这个值是facebook的一个应用(app)的id,叫做Cool Social App,我想这算是facebook提供的公用app吧;
  2.     redirect_uri也是必填参数,在用户发布涂鸦墙消息后,返回到哪个页面。我们这个应用并没有自己的独立页面,所以返回到facebook上吧;
  3.     message表明你要给涂鸦墙的输入框中带过去的内容文字,没有数量限制,当然,这个不是必填项目。

    其他的非必填项有:

  1. link,链接地址;
  2. picture,可以显示一个图片;
  3. name,链接的title,显示在涂鸦墙输入框的下面第一行,字体是加粗的;
  4. caption,说明/摘要,显示在标题下面一行;
  5. description,详细介绍,显示在摘要的下面。

   先留下来做记录吧,不知道facebook哪天又要修改它的api,/晕。

   备注,注意翻 墙。