【作成環境】
・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";
}
//--------------------------------------------------------------------//
}
}