我正在使用FacebookSDK(ASP.Net MVC Facebook Canvas应用程序),我只是想从我上传到Facebook的两个视频中输出视频ID。使用SDK我已经成功检索了视频,并说它有两个视频但是我不知道如何编写代码来自己抓取和输出视频ID?
我的动作看起来像这样:
FacebookApp app = new FacebookApp();
dynamic parameters = new ExpandoObject();
parameters.fields = "id,videos";
dynamic result = app.Api("me", parameters);
return View(result);
当我在ASP.Net中逐步执行代码并在调用app.API后将鼠标移到结果上时,它说我有一个带有两个项目的Facebook.JsonObject。一个是我的facebook用户名,另一个是另一个Facebook.JsonObject,里面有两个视频。所以我的结论是它返回了用户ID和与该用户相关的视频。这是有道理的,但输出这些类型结构的最佳方法是什么?
我的查看如下所示:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>
" %><% foreach (var video in Model) { %> <object width="352" height="221" > <param name="allowfullscreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="movie" value="http://www.facebook.com/v/<%: video.id %>" /> <embed src="http://www.facebook.com/v/<%: video.id %>" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="352" height="221"></embed> </object> <% } %>
上面的查看没有处理错误,说找不到video.id。我的猜测是我需要更好地理解动态数据类型以及Facebook.JsonObject的工作原理。
任何有使用FacebookSDK经验并且可以帮助我从我的脸书视频中提取视频ID的人我将不胜感激。
我是否需要专门创建一个具有用户ID的独立ViewModel类和包含视频的List类型?
干杯 罗布
答案 0 :(得分:0)
使用此代码,它应该可以使用,但您不会拥有用户ID。
FacebookApp app = new FacebookApp();
dynamic result = app.Api("me/videos");
return View(result.data);
如果你真的想要它,你仍然可以创建一个ViewModel对象来存储用户ID和视频。
public class VideosViewModel{
public dynamic userId {get;set;}
public dynamic videos {get;set;}
}
行动中的代码:
FacebookApp app = new FacebookApp();
var VideosViewModel vvm = new VideosViewModel();
dynamic result = app.Api("me/videos");
vvm.videos = result.data;
dynamic parameters = new ExpandoObject();
parameters.fields = "id";
dynamic result = app.Api("me", parameters);
vvm.userId = app.Api("me");
return View(vvm);
在您的视图中使用Model.videos
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<% foreach (var video in Model.videos) { %>
<object width="352" height="221" >
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="movie" value="http://www.facebook.com/v/<%: video.id %>" />
<embed src="http://www.facebook.com/v/<%: video.id %>" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="352" height="221"></embed>
</object>
<% } %>
你也可以在这里找到有趣的例子:
http://www.facebook.com/notes/nathan-totten/dynamic-objects-and-the-facebook-c-sdk/158611014180033
答案 1 :(得分:0)
在我昨晚进行的一些研究之后,这是正确的方法:
动作应如下所示:
FacebookApp app = new FacebookApp();
dynamic parameters = new ExpandoObject();
parameters.fields = "id,name";
dynamic result = app.Api("me/videos/uploaded", parameters);
return View(result);
查看应如下所示:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>
" %><% foreach (var video in Model.data) { %> <object width="352" height="221" > <param name="allowfullscreen" value="true" /> <param name="allowscriptaccess" value="always" /> <param name="movie" value="http://www.facebook.com/v/<%: video.id %>" /> <embed src="http://www.facebook.com/v/<%: video.id %>" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="352" height="221"></embed> </object> <% } %>
问题有两个:
1)我的URI路径不正确,应该是:
动态结果= app.Api(“我/视频/上传”,参数);
2)当我说我实际收回视频时,我只收回用户ID和视频的空数据集。所以实际上它归结为我的URI不正确。
3)输出结果时,我应该将指针设置为从以下位置开始:
Model.data而不是Model本身。
@MrKow感谢您对此问题的反馈和帮助,您提供的链接非常宝贵。我已预订标记以供将来参考: - )
干杯 罗布