【问题标题】:AS3 youtube library event questionAS3 youtube 图书馆活动问题
【发布时间】:2010-08-09 03:17:59
【问题描述】:

我正在尝试在 AS3 中构建我的 youtube 视频搜索项目。我找到了以下链接...

http://blog.martinlegris.com/2008/02/20/youtube-data-api-as3-youtubeclient-functions-associated-events/

他的图书馆有

YouTubeClient.getStandardFeed(…)
Event: StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED
.feed: VideoFeed

YouTubeClient.getVideos(…)
Event: VideoFeedEvent.VIDEO_DATA_RECEIVED
.feed: VideoFeed

我不确定这两者之间的区别...有人可以为我解释一下吗?谢谢..

【问题讨论】:

    标签: apache-flex flash actionscript-3 youtube


    【解决方案1】:

    我没有使用过这个库,但我尝试下载它并查看源代码。不幸的是,源代码没有记录,它是从 2008 年开始的!

    无论如何,环顾四周后,您会发现创建者为您提供了两个涵盖这两个事件的示例。一个事件侦听自定义搜索,另一个事件侦听您可以在主页中找到的常规库:

    数据 API AS3 - 第一个教程

    http://blog.martinlegris.com/2008/02/19/youtube-data-api-as3-first-tutorial/

    上面的示例涵盖了自定义搜索,当您侦听事件时,您可以扫描结果以将它们显示给用户

    AS3 中的 Youtube 数据 API 已准备就绪!

    http://blog.martinlegris.com/2008/02/15/youtube-data-api-in-as3-is-ready/

    在上面的示例中,您可以看到演示如何在 Youtube 中搜索 TOP 视频,一旦获得结果,您就可以将它们显示给用户。

    所以回顾一下。 getStandardFeed 应在您查找 YouTube 热门视频等时使用,而 getVideos 方法应在您进行自定义搜索时使用。

    【讨论】:

      【解决方案2】:

      Helmut Granda 提到他的文档链接非常古老,因此对于任何感兴趣的人,这里是更新的文档:

      http://blog.martinlegris.com/2010/05/28/sample-code-using-the-youtube-as3-api-with-the-youtube-player-api/

      如果您使用此 API,需要注意的另一件事是,自 2016 年 1 月起,Google 正式弃用了在 Flash 中的搜索和嵌入,并提倡开发人员使用 i-Frame 中的 API 搜索和播放视频。

      https://developers.google.com/youtube/iframe_api_reference

      引用:

      IFrame 播放器 API 可让您将 YouTube 视频播放器嵌入到您的 网站并使用 JavaScript 控制播放器。不同于 Flash 和 JavaScript 播放器 API,它们都涉及将 Flash 对象嵌入到 您的网页,IFrame API 将内容发布到您的标签 页。这种方法提供了比以前更大的灵活性 可用的 API,因为它允许 YouTube 提供 HTML5 播放器而不是 比适用于不支持 Flash 的移动设备的 Flash 播放器

      但是,如果您的 Flash 应用程序在 Flash 中比作为 i-Frame 运行得更好,那么播放器 API 在截止日期之后仍然可以正常工作,并且如果您执行 URLRequest 并解析结果,则搜索可以在 Flash 中运行在 As3 中。我的例子如下:

      package {
          import flash.display.*;
          import flash.events.*;
          import flash.display.MovieClip;
          import flash.display.Stage;
          import flash.media.Sound;
          import flash.net.URLRequest;
          import flash.system.Security;
          import flash.system.LoaderContext;
          import flash.system.ApplicationDomain;
          import flash.system.SecurityDomain;
          import flash.events.KeyboardEvent;
          import flash.external.ExternalInterface;
          import flash.net.URLRequest;
          import flash.net.navigateToURL;
          import flash.net.URLLoader;
          import flash.net.URLRequestHeader;
          import flash.net.URLRequestMethod;
          import flash.events.*;
      
          public class theaterYouTube3 extends MovieClip {
              public var pRoot:MovieClip = null;
              private var pSearchDataResultArray:Array = [];
              private var pSearchKey:String = "PutYourSearchKeyHere";
              private var pMaxSearchResults:int = 20;
      
      
              public function theaterYouTube3():void {
                  traceOut("init");
                  //date, rating, relevance, viewCount
                  doYouTubeSearchSearch("trailers", "rating", pMaxSearchResults);
              }
              //
              private function doYouTubeSearchSearch(searchTerm:String, searchOrder:String, maxResults:int) {
                  var request:URLRequest=new URLRequest();
                  //request.url = "https://www.googleapis.com/youtube/v3/search?safeSearch=strict&part=snippet&q=" + searchTerm+ "&maxResults="+maxResults+"&key="+pSearchKey;
                  request.url = "https://www.googleapis.com/youtube/v3/search?safeSearch=strict&type=video&part=snippet&q=" + searchTerm+ "&order=" + searchOrder+"&maxResults="+maxResults+"&key="+pSearchKey
                  request.requestHeaders = [new URLRequestHeader("Content-Type","application/json")];
                  request.method = URLRequestMethod.GET;
                  var loader:URLLoader=new URLLoader();
                  loader.addEventListener(Event.COMPLETE, searchDataRecieved);
                  //loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, notAllowed);
                  //loader.addEventListener(IOErrorEvent.IO_ERROR, notFound);
                  loader.load(request);
              }
              //
              private function searchDataRecieved(event:Event):void{
                  trace("search data received");
                  var vidsData:String = event.target.data;
                  parseVideoSearchData(vidsData);
              }
              //
              private function parseVideoSearchData(vidsDataString:String){
                  pSearchDataResultArray = [];
                  var tempArray:Array = vidsDataString.split('"items":');
                  if (tempArray.length ==0){
                      parseVideoSearchDataError("no data");
                  }
                  vidsDataString = tempArray[1];
                  vidsDataString=vidsDataString.split("{\n").join("");
                  vidsDataString=vidsDataString.split("\n}").join("");
                  vidsDataString=vidsDataString.split("\n}").join("");
                  vidsDataString=vidsDataString.split("},\n").join("");
                  vidsDataString=vidsDataString.split("}\n").join("");
                  //trace(vidsDataString);
                  tempArray = vidsDataString.split('"kind": "youtube#searchResult"');
                  for (var i = 1; i< tempArray.length; i++){
                      var resultString:String = tempArray[i];
                      var vid_Id:String = extractVideoId(resultString);
                      var vid_title:String = extractVideoTitle(resultString);
                      var vid_thumb:String = "https://i.ytimg.com/vi/" + vid_Id + "/mqdefault.jpg";
                      var dataSet:Array = [vid_Id, vid_title, vid_thumb];
                      pSearchDataResultArray.push(dataSet);
                      traceOut("dataSet = \r" + dataSet + "\r");
                  }
              }
              //
              private function extractVideoId(sourceString:String):String{
                  //trace(sourceString);
                  var parseArray1:Array = sourceString.split('"videoId":');
                  var split1:String = parseArray1[1];
                  var parseArray2:Array = split1.split('"');
                  var itemValue:String = parseArray2[1];
                  return (itemValue);
              }
              //
              private function extractVideoTitle(sourceString:String):String{
                  var parseArray1:Array = sourceString.split('"title":');
                  var split1:String = parseArray1[1];
                  var parseArray2:Array = split1.split(",");
                  var itemValue:String = parseArray2[0];
                  return (itemValue);
              }
              //
              private function parseVideoSearchDataError (error:String):void{
                  trace("parseVideoSearchDataError = " + error);
              }
              //
              private function traceOut(txt):void {
                  trace("THEATER: " + txt);
                  //traceLogin(txt);
              }
          }
      }
      

      在这个例子中,人们会调用:

      doYouTubeSearchSearch("trailers", "rating", pMaxSearchResults);

      这将根据评分对预告片进行 youtube 视频搜索。

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
      • 我发布了一个链接只是为了更正 Helmut Granda 的旧链接,而不是提供答案。我已经用更多信息更新了我的答案,我认为这对任何尝试这样做的人都有用,因为 API 最近发生了变化,而且谷歌引入了新的限制,这将使接受的答案有些不可用。跨度>
      猜你喜欢
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-29
      • 1970-01-01
      相关资源
      最近更新 更多