トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     【Youtube Data API】Youtube動画を「お気に入り」に追加したい。
投稿するにはまず登録を

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
961832p
Åê¹ÆNo.45278
投稿日時: 2010-7-1 6:39
常連
居住地: Akiruno-shi
投稿: 155
使用環境:
Re: 【Youtube Data API】Youtube動画を「お気に入り」に追加したい。
 
あれからAIRであーだこーだ試してみました。
横着してパスワード等を埋め込んでテストしたので、スクリーンショットのみです(汗)。

投稿内容にありますように、URLLoaderだとXML送信時で #2032ストリームエラー となる事、SocketURLLoaderで回避できる事を確認しました。
また、リクエストヘッダの Content-Length は無くても大丈夫でした。自動で付加されているのかもしれません。

実行すると動画はお気に入りに登録されますが、自分のコードと投稿されてありますコードと見比べても処理に大きな違いは無さそうです。
投稿内容にはステップ3以外のコードが無いので分かりませんが、もしかしたらステップ1や2のところで上手くいっていないのかもしれないと思いました。
動画IDが取得できているのか、正常に認証できているのかを確認してみるのがいいかもしれません。

【作成環境】
 ・WinXP Pro SP3
 ・Adobe Flex 3.4.0.9271 (Adobe AIR 1.5.2.8870)

【実行環境】
 ・WinXP Pro SP3
 ・Adobe AIR 2.0.2.12610

【Main.as(AIR)】
 ※関連していそうな部分は色を変えてあります。

package{
    …省略…
    //
    import my.Log;
    import my.FlexDefaultComponents;
    import my.AIRDefaultComponents;
    //========================================================================//
    public class Main extends WindowedApplication{
        //ユーザー名 ※通常は埋め込まない
        private var m_user:String = "********";
        //パスワード ※通常は埋め込まない
        private var m_pass:String = "********";
        //アプリケーション識別名
        private var m_source:String = "example.com-YT-2010062901";
        //デベロッパーキー
        private var m_dev_key:String = "********";
        //お気に入り登録したい動画のID
        private var m_video_id:String = "********";
        //認証時レスポンスデータの保存用
        private var m_auth_respons:Object = new Object();
        //ログ用
        private var m_log_tarea:TextArea;
        //--------------------------------------------------------------------//
        public function Main() {
            super();
            FlexDefaultComponents.stylesInit();
            AIRDefaultComponents.stylesInit();
            Log.trace("i Main");
            //
            this.layout = "absolute";
            this.setStyle("backgroundColor", 0xEFF1F1);
            this.addEventListener(FlexEvent.APPLICATION_COMPLETE, app_complete);
        }
        //--------------------------------------------------------------------//
        private function app_complete(a_event:FlexEvent):void{
            Log.trace("i app_complete:" + a_event);
            //
            var acbar:ApplicationControlBar = new ApplicationControlBar();
            acbar.dock = true;
            var label:Label = new Label();
            label.text = "YouTubeの動画をマイアカウントのお気に入りへ登録";
            acbar.addChild(label);
            this.addChild(acbar);
            //
            var root_layout:HBox = new HBox();
            root_layout.setStyle("paddingLeft", 8);
            root_layout.setStyle("paddingTop", 8);
            root_layout.setStyle("paddingRight", 8);
            root_layout.setStyle("paddingBottom", 8);
            root_layout.y = 8;
            root_layout.percentWidth = root_layout.percentHeight = 100;
            this.addChild(root_layout);
            //
            var left_layout:VBox = new VBox();
            left_layout.setStyle("paddingLeft", 8);
            left_layout.setStyle("paddingTop", 8);
            left_layout.setStyle("paddingRight", 8);
            left_layout.setStyle("paddingBottom", 8);
            root_layout.addChild(left_layout);
            //
            m_log_tarea = new TextArea();
            m_log_tarea.setStyle("fontFamily", "_typewriter");
            m_log_tarea.setStyle("fontSize", 11);
            m_log_tarea.editable = false;
            m_log_tarea.percentWidth = m_log_tarea.percentHeight = 100;
            m_log_tarea.text = '';
            root_layout.addChild(m_log_tarea);
            //
            var list_item:Array = [
              {label:"認証", type:"auth"}
            , {label:"お気に入り登録", type:"add_favorite"}
            , {label:"ログ消去", type:"eraselog"}
            ];
            var tbbar:ToggleButtonBar = new ToggleButtonBar();
            tbbar.direction = BoxDirection.VERTICAL;
            tbbar.buttonMode = true;
            tbbar.dataProvider = list_item;
            tbbar.addEventListener(FlexEvent.CREATION_COMPLETE, tbbar_complete);
            tbbar.addEventListener(ItemClickEvent.ITEM_CLICK, tbbar_item_click);
            left_layout.addChild(tbbar);
        }
        //--------------------------------------------------------------------//
        //ボタンバーのイベント関数
        //--------------------------------------------------------------------//
        private function tbbar_complete(a_event:FlexEvent):void{
            Log.trace("i tbbar_complete:" + a_event);
            //
            a_event.currentTarget.selectedIndex = -1;
        }
        private function tbbar_item_click(a_event:ItemClickEvent):void{
            Log.trace("i tbbar_item_click:" + a_event);
            //
            m_log_tarea.text += "[" + a_event.label + "]\n";
            switch (a_event.item.type) {
                case"auth":
                (function():void{
                //
                //「認証」ボタンが押された時
                //
                //中身のデータを作成
                var content:URLVariables = new URLVariables();
                content.Email   = encodeURI(m_user);
                content.Passwd  = encodeURI(m_pass);
                content.service = "youtube";
                content.source  = encodeURI(m_source);
                //リクエストデータを作成
                var req:URLRequest = new URLRequest(
                    "https://www.google.com/youtube/accounts/ClientLogin"
                );
                req.method = URLRequestMethod.POST;
                req.contentType = "application/x-www-form-urlencoded";
                req.data = content;
                //リクエスト
                var urlloader:URLLoader = new URLLoader();
                urlloader.addEventListener(IOErrorEvent.IO_ERROR, io_error);
                urlloader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, security_error);
                urlloader.addEventListener(Event.COMPLETE, auth_complete);
                urlloader.load(req);
                })();
                break;

                case"add_favorite":
                (function():void{
                //
                //「お気に入り登録」ボタンが押された時
                //
                //中身のデータを作成
                var content:String = 
                      '<?xml version="1.0" encoding="UTF-8"?>'
                    + '<entry xmlns="http://www.w3.org/2005/Atom">'
                    + '<id>' + m_video_id + '</id>'
                    + '</entry>'
                ;
                /*
                //↑こちらでもOK↓
                var content:XML =
                    <entry xmlns="http://www.w3.org/2005/Atom">
                        <id>{m_video_id}</id>
                    </entry>
                ;
                */
                //リクエストデータを作成
                var req:URLRequest = new URLRequest(
                    "http://gdata.youtube.com/feeds/api/users/default/favorites"
                );
                req.method = URLRequestMethod.POST;
                req.contentType = "application/atom+xml";
                req.data = content;
                req.requestHeaders.push(
                  new URLRequestHeader("Authorization", "GoogleLogin auth=" + m_auth_respons.Auth)
                , new URLRequestHeader("GData-Version", "2")
                , new URLRequestHeader("X-GData-Key", "key=" + m_dev_key)
                );
                //リクエスト
                var urlloader:SocketURLLoader = new SocketURLLoader();
                urlloader.addEventListener(IOErrorEvent.IO_ERROR, io_error);
                urlloader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, security_error);
                urlloader.addEventListener(Event.COMPLETE, add_favorite_complete);
                urlloader.load(req);
                })();
                break;

                case"eraselog":
                //
                //「ログ消去」ボタンが押された時
                //
                m_log_tarea.text = '';
                break;
            }
        }
        //--------------------------------------------------------------------//
        //URLLoaderのイベント関数
        //--------------------------------------------------------------------//
        private function auth_complete(a_event:Event):void{
            m_log_tarea.text += "i auth_complete" + "\n";
            //レスポンスデータ分解、分かりやすく保存しておく
            var respons:String = a_event.currentTarget.data.replace(/\n$/, "");
            for each(var key_val:String in respons.split("\n")) {
                m_auth_respons[key_val.split("=")[0]] = key_val.split("=")[1];
            }
            //確認
            for (var key:String in m_auth_respons) {
                m_log_tarea.text += key + "[" + m_auth_respons[key] + "]\n";
            }
        }
        //--------------------------------------------------------------------//
        private function add_favorite_complete(a_event:Event):void{
            m_log_tarea.text += "i add_favorite_complete" + "\n";
            //確認
            m_log_tarea.text += a_event.currentTarget.data + "\n";
        }
        //--------------------------------------------------------------------//
        //共通のイベント関数
        //--------------------------------------------------------------------//
        private function io_error(a_event:IOErrorEvent):void{
            m_log_tarea.text += "i socket_io_error" + a_event + "\n";
        }
        private function security_error(a_event:SecurityErrorEvent):void{
            m_log_tarea.text += "i socket_security_error" + a_event + "\n";
        }
        //--------------------------------------------------------------------//
    }
}


----------------
:961832p:
- だんだんAS3に慣れてきた“なんちゃって”AMES使いの日曜プログラマー

フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
   【Youtube Data API】Youtube動画を「お気に入り」に追加したい。 utakuso 2010-6-27 2:53
     Re: 【Youtube Data API】Youtube動画を「お気に入り」に追加したい。 961832p 2010-6-30 0:36
   » Re: 【Youtube Data API】Youtube動画を「お気に入り」に追加したい。 961832p 2010-7-1 6:39

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops