logo

Shapez Theme

· Home Playground About

10


DECEMBER

关于facebook的项目停了一段时间,最近突然又来了一个这类的项目,是要制作一个专页上的链接。话说创建专页不难啊,但是由于不懂,而且时间比较紧,遇到不少问题,至今还有些搞不明白。幸得本站用户KIVU的鼎力帮助,项目算顺利完成了。这里把制作过程记录下来,分享给大家,以减少大家走的弯路。

首先,专页是facebook专门推出用来展示个人或者企业的一个工具,创建专页在facebook上面有专门的帮助文档,很详细(不过也很多,说实话,我没有详细去看,创建专页自己试试就可以创建出来),url如下:

[http://www.facebook.com/help/?faq=104002523024878&ref\_query=crea](http://www.facebook.com/help/?faq=104002523024878&ref_query=crea)

我们可以看到很多公司做了挺漂亮的专页,但我们创建的专页却仍然只是由涂鸦墙、视频等信息组成的页面,我们自己的页面怎么实现呢?或者说,在左侧上部的链接中,加入我们自己制作的页面。

创建新应用做专业中的页面

这里要感谢本站用户KIVU,一句话说的很明白,左侧的链接都是应用,也就是facebook app。其中涂鸦墙等几个是facebook自己的app,也有几个是必须显示不可删除的,添加怎么办呢?Facebook似乎没有提供一个地方要指定加入一个应用的地方。感觉把专页中的设置尝试遍了,也没找到对应的功能。

KIVU在百忙之中给予支持:

1、创建新应用(前面我们有文章提到过),在编辑应用基本信息的界面左下角,找到“View App Profile Page”这个链接,现在即使是简体中文的界面,这个链接的文字也没有翻译,应该是查看我的应用的专页吧。

2、进入该页面以后(url如http://www.facebook.com/apps/application.php?id=XXX),可以在其左下角找到“加入到我的专业链接”,其实这是一个按钮,点击后会弹出你所有的可以被加入的专页(包括其他应用)。如图:

addtofbpage

找到你想加入的页面,点 add to page就可以了。至于页面中的内容,就是你的app中指定的页面的内容了。还算简单吧。

3、往往你制作好页面以后,页面高度没有按照自己的页面来,就是说即使你设置了高度自适应(那似乎只对应用页面有效,对专业中的页面无效),页面中还是出现了滚动条,其实也很简单,我们只需要写这样一段代码就可以了

FB.Canvas.setSize({ width: 520, height: 2400 });

这里要记住啊,width:520基本上是必须这么写的,因为专页中的页正好是520的宽度。很有爱啊。对了别忘了,要加入facebook js api的引用啊:

<script src="http://connect.facebook.net/en\_US/all.js#xfbml=1"></script>

还有一点要说明,刚创建的应用好像点查看我的应用专页时会直接进入应用详细页,要等几个。我昨天创建的应用就这样,害得我好苦,不过今天都可以点进去了。所以有些东西是不可仓促行事的,必要的时间是需要留出来的。

使用纯静态的页面

如果你的页面是纯静态的话,还有一种实现方式,就是使用别人做的应用来帮忙实现。当然了,这是其他人做好了的应用,facebook有好多此类的应用。比如我们在facebook中搜索FBML:

staticfbml

可以看到有许多做静态FBML的应用,随便找一个把它加入到你的专页中去,然后在编辑专业的应用程序栏找到该应用,如图:

editpage1

然后点击访问应用程序,可以到编辑FBML页面的地方,如图:

editfbml2

如果你的页面足够简单,使用该方法是可以非常轻易制作一个应用的页面,而且不需要自己准备服务器,够爽吧?

当然,如果你的页面中脚本比较多,可能并不适合你,因为需要学习许多FBML中js的用法,我还没用过,也还不清楚是否麻烦。

好了,本文通过两种方式实现了专页中的个性页面,实际上实现过程中还遇到了rss、youtube和twitter中的问题,我会在后面的文章中继续与大家分享。

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

18


AUGUST

近期参与了一些开发facebook相关应用的项目,由于国内访问困难,相关资料查找及测试都比较困难,起初只做一些简单的调用,比如要从手机上打开facebook的发送消息的页面,并把对应的参数传递过去。这个本应该是个很简单的工作,但由于我们对其并不熟悉,相关资料都查过好多。本想咨询做过facebook相关项目开发的iphone团队,可对方使用的是ios上的一个sdk,至于要打开哪个页面,就不知道了。当然,后来这些问题都解决了,我上一篇文章中有对具体方法的描述,但感觉就像一个外行在做开发,我觉得个人站长都应该对此很明白(这些内容甚至不需要使用facebook的api)。

现在另一个项目是开发facebook上面的web app,开发web app需要注册成为facebook开发者,这个很简单,进入

https://developers.facebook.com/

网站自己注册就可以了,如果不是开发者,会提示要注册激活,美国人可以直接绑定手机号码激活,我们只好使用双币信用卡激活了,反正标着visa和万事达卡的信用卡都可以激活(我用了一个即将到期的万事达卡,现在还不知道到期后会不会让重新激活),激活并不会收费,放心激活就行了。

 

入门级javascript sdk:

注册过程不详细写了,很简单,需要注意的是:

1、website项目中的站点url和domain两个项目是不需要http://开头的;而app on facebook的canvas URL,是需要写http的。而且这一段是实际上从facebook打开这个app时,嵌入的iframe的地址。

2、如果本机测试,可以直接使用localhost作为地址,真正上线的时候记得改回来就行。也可以用改host文件的方法随便指定一个域名,加端口访问也没问题,就是不能用ip地址,提交通不过。

注册好了,就开始开发吧,我们首先不使用C#的sdk,直接使用facebook提供的javascript api:

1、创建一个静态页面,引入脚本

http://connect.facebook.net/en_US/all.js

除此之外,还要引用jquery,写脚本方便嘛;

2、另外需要在页面上方这么一个div:

如果不放,就会脚本报错。放哪儿都行,也不显示。但是要放在fb初始话的脚本前面。

3、写段脚本吧,这里我们有个登录按钮:

            FB.init({ appId: ‘{这里是appid}’, status: true, cookie: true, xfbml: true });
$(“#FBLogin”).click(function () {
FB.login(function (response) {
if (response.session) {
// 登录成功
window.location = ‘about.aspx’
} else {
//
}
}, { perms: “publish_stream” });
});

这里首先初始化了fb对象,需要appid,它在创建时自动生成。第二个呢注册了一个登录按钮的点击事件,点击后直接调用FB封装好的login方法,第一个参数是回调函数,第二个参数是一个json对象,这里注明了该app的访问权限是publish_stream,差不多是最小权限了吧。

所有权限的资料和其他api的资料可以直接访问以下地址查找:

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

刚入个门,其实后面的对照文档中的,就都可以了,比如fql:

FB.api({
method: ‘fql.query’,
query: ‘SELECT name, pic FROM profile WHERE id=’ + uid
}, function(response){
fb_User.name = response[0].name;
fb_User.pic = response[0].pic;

});
这是访问用户配置表,返回用户名称和头像。

graph api相比更加简单,先看例子

FB.api({path}, ‘GET’, {}, function(response){
if (!response || response.error) {
alert(‘Error occured’);
}
else {

}
})

path就是对应访问内容的路径,比如访问个人资料,就填me,访问某视频的信息,可以直接填视频的id。很简单吧,回调函数中都是返回的json对象,书写也很便利。

项目用到一半,除了登入退出外,也就用了这么两类的api,很简单吧。

Facebook C# SDK

项目开始时查到过两个SDK,一个叫做Facebook C# SDK,更新的很快;另一个叫做Facebook toolkit什么的,从名字上看似乎是微软自己的帮助系列,代码也很庞大,但有半年多没有更新了。而据我所知,今年6月份facebook的api还有改动(突然某天代码失效,后来发现api改了,竟然不兼容!)。所以我们选择更新的比较快的这个。

代码地址:

http://facebooksdk.codeplex.com/

仅支持vs2010,你可以下载了dll然后加载到项目的引用中去。今天我们介绍另外一种引用方式:

1、在vs2010中,新建web站点(以次举例,也支持mvc、windowsphone),右键项目,选择 Add Library Package Reference,

Capture

把最后那两个安装仅上就可以了。如果没有看到的话,可以从右侧搜索facebook就可以找到了。安装上之后,不仅对应的dll会被拷贝进了,web.config中也会生成对应的两段配置

configSections段中增加了

         

configuration段中增加了

        

我们把我们申请到的appid和appsecret填入即可。

前台的页面我们还是需要按照前面讲的javascript的方式进行编写,只是我们appid的位置可以这么写:

        <%: Facebook.FacebookApplication.Current.AppId %>

到这里,第一步也算迈出去了。详细使用方法,我们举几个例子:

获取用户信息:

// Using dynamic (.Net 4.0 only)  
var client = new FacebookClient();  
dynamic me = client.Get("me");  
string firstName = me.first\_name;  
string lastName = me.last\_name;  
string email = me.email;  
  
// Using IDictionary<string, object> (.Net 3.5, .Net 4.0, WP7)  
var client = new FacebookClient();  
var me = (IDictionary<string,object>)client.Get("me");  
string firstName = (string)me\["first\_name"\];  
string lastName = (string)me\["last\_name"\];  
string email = (string)me\["email"\];

获取某一条post的详细信息

// Using dynamic (.Net 4.0 only)  
var client = new FacebookClient("my\_access\_token");  
dynamic result = client.Get("19292868552\_118464504835613");  
string id = result.id;  
string fromName = result.from.name;  
string fromCategory = result.from.category;  
string message = result.message;  
int likes = result.likes;  
foreach (dynamic comment in result.comments.data) {  
  string commentId = comment.id;  
  string commentMessage = comment.message;  
}

发布一条信息

var client = new FacebookClient("my\_access\_token");  
dynamic parameters = new ExpandoObject();  
parameters.message = "Check out this funny article";  
parameters.link = "http://www.example.com/article.html";  
parameters.picture = "http://www.example.com/article-thumbnail.jpg";  
parameters.name = "Article Title";  
parameters.caption = "Caption for the link";  
parameters.description = "Longer description of the link";  
parameters.actions = new {  
  name = "View on Zombo",  
  link = "http://www.zombo.com",  
};  
parameters.privacy = new {  
  value = "ALL\_FRIENDS",  
};  
parameters.targeting = new {  
  countries = "US",  
  regions = "6,53",  
  locales = "6",  
};  
dynamic result = client.Post("me/feed", parameters);

访问ADS API

var client = new FacebookClient("my\_access\_token");  
  
dynamic reportSpec = new ExpandoObject();  
reportSpec.report\_type = "perf";  
reportSpec.summarize\_by = "ad";  
reportSpec.agg\_time = "daily";  
reportSpec.filter\_obj\_ids = new string\[\] { };  
reportSpec.internal\_columns = false;  
reportSpec.time\_start\_offset = 172800;  
reportSpec.time\_stop\_offset = 86400;  
  
dynamic scheduleSpec = new ExpandoObject();  
scheduleSpec.name = "test\_schedule";  
scheduleSpec.time\_next\_ref = DateTime.UtcNow.AddDays(1).ToString();  
scheduleSpec.report\_spec = reportSpec;  
scheduleSpec.frequency = 1;  
scheduleSpec.status = 1;  
scheduleSpec.email = 1;  
  
dynamic parameters = new ExpandoObject();  
parameters.method = "ads.createAdreportSchedules";  
parameters.account\_id = 1234567891235;  
parameters.schedule\_specs = scheduleSpecs;  
parameters.flags = 1; // Debug Mode  
  
dynamic result = client.Post(parameters);

创建相册

  // create album  
  dynamic albumDetails = new ExpandoObject();  
  albumDetail.name = "test album";  
  
  dynamic fbResult = fbApp.Post('/me/albums', albumDetails);  
  var albumID = fbResult.id;  
  uploadPhotos(albumId);

上传图片

        private void uploadPhoto(string albumID)  
        {  
            var fbUpl = new Facebook.FacebookMediaObject  
            {  
                FileName = @"Some.png",  
                ContentType = "image/png"  
            };  
            var bytes = System.IO.File.ReadAllBytes(@"C:somePath" + fbUpl.FileName);  
            fbUpl.SetValue(bytes);  
  
            var photoDetails = new Dictionary<string, object>();  
            photoDetails.Add("message", "test photo"); // this will appear on the wall  
            photoDetails.Add("image", fbUpl); // the name of this parameter does not matter  
            var fbResult = fbApp.Post(@"/" + albumID + @"/photos", photoDetails);  
            var result = (IDictionary<string, object>)fbResult; // Or we could use dynamic.. only the photo "id"(s) come back  
        }

上传视频

var fb = new FacebookClient("access_token");

dynamic parameters = new ExpandoObject();

parameters.source = new FacebookMediaObject { ContentType = "video/3gpp", FileName = "video.3gp" }.SetValue(File.ReadAllBytes(@"c:video.3gp"));

parameters.title = "video title";

parameters.description = "video description";

dynamic result = fb.Post("/me/videos", parameters);

Console.WriteLine(result);

可获的进度条和可取消的使用方式

var mediaObject = new FacebookMediaObject

{

ContentType = "image/jpeg",

FileName = Path.GetFileName(_filename)

}

.SetValue(File.ReadAllBytes(_filename));

var fb = new FacebookClient(_accessToken);

fb.PostCompleted += fb_PostCompleted;

fb.PostAsync("/me/photos", new Dictionary<string, object> { { "source", mediaObject } });

 

fb.UploadProgressChanged += fb_UploadProgressChanged;

public void fb_UploadProgressChanged(object sender, FacebookUploadProgressChangedEventArgs e)

{

progressBar1.BeginInvoke(

new MethodInvoker(() =>

{

var totalBytesToSend = e.TotalBytesToSend;

var bytesSent = e.BytesSent;

var state = e.UserState;

progressBar1.Value = e.ProgressPercentage;

}));

}

public void fb_PostCompleted(object sender, FacebookApiEventArgs e)

{

if (e.Cancelled)

{

var cancellationError = e.Error;

MessageBox.Show("Upload cancelled");

}

else if (e.Error == null)

{

// upload successful.

MessageBox.Show(e.GetResultData().ToString());

}

else

{

// upload failed

MessageBox.Show(e.Error.Message);

}

}

可以使用fb.CancelAsync()进行结束上传。好了就举这些例子吧,例子代码来源于作者博客。总体感觉使用还是比较方便的。


18


AUGUST

就是样式有些难看,能不能再美一点?

[白兔]( “[email protected]”) -

就是样式有些难看,能不能再美一点?


自己创建的blog?很好很喜欢,加油喽!

[白兔]( “[email protected]”) -

自己创建的blog?很好很喜欢,加油喽!


还不太会调整,在学习,多谢关注

Jason.Z -

还不太会调整,在学习,多谢关注


请问FACEBOOK的集成require ‘src/facebook.php’;

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

请问FACEBOOK的集成require ‘src/facebook.php’;

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
‘appId’ => ‘175974682484604’,
‘secret’ => ‘2cc482fd8cb824b1b95a3afe51b50aac’,
));设置已经正确了,为什么不可以用呢,是不是还要其它条件设置?谢谢!


你说的是php的sdk么?

Jason.Z -

你说的是php的sdk么?


@kivu

Jason.Z -

@kivu
facebook 官网的文档中,初始化确实这一段就可以了:

require_once(“facebook.php”);
$config = array();
$config[‘appId’] = ‘YOUR_APP_ID’;
$config[‘secret’] = ‘YOUR_APP_SECRET’;
$config[‘fileUpload’] = false; // optional
$facebook = new Facebook($config);

你说不可以的是什么情况?


我刚才下载了最近版的facebook,PHP sdk,测试过程中也遇到问题了,提示curl执行失败。…

Jason.Z -

我刚才下载了最近版的facebook,PHP sdk,测试过程中也遇到问题了,提示curl执行失败。
就是说,首先需要启用php.ini中的extension=php_curl.dll扩展;
其次,在访问facebook某些api的时候,一些访问路径被GFW给墙了,如果要做测试,最好使用VPN。
另外,似乎sdk中的key和安全码已经失效了,需要自己再申请一个帐号,创建应用,并设置应用可以通过url访问,然后把key和安全码换成自己的,否则会在链接登录到facebook时报一个应用错误的提示。
不知道你遇到的是否如此。欢迎来信交流。


@Jason.Z

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

@Jason.Z

php sdk后面我知道为什么失效了,要先给当前用户LOGIN,允使操作这个应用程序。
现在我就有点想不明白,这个应用程序本想让浏览客户看到PHP SDK调出来数据显示在专题的,如果不”LOGIN,允使操作这个应用程序”,$facebook->getUser()反回是null。


这是因为demo中的登录过程,包含了部分app授权的过程。我记得在js版的facebook登录的方法…

Jason.Z -

这是因为demo中的登录过程,包含了部分app授权的过程。我记得在js版的facebook登录的方法中,可以直接写进入访问权限的参数,代码大概是这样的
FB.login(handleSessionResponse, {
perms: ‘user_videos,publish_stream’
});
我记得这样写之后,从facebook直接点开该app时,会自动授权,不需要重新登录。
你的链接我看到了,我也研究下。



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,/晕。

   备注,注意翻 墙。