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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     GMTとUTC for Twitter
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ひろゆき
Åê¹ÆNo.45580
投稿日時: 2010-8-25 18:52
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: GMTとUTC for Twitter
唐突に、dateAarryが出てきていますが、これが何を示すのか、分かりかねます。
少なくとも、先の質問でも、指摘されていた箇所と異なる部分に問題がありました。
中途半端に省略せずに、回答者が再現できるような質問をなさってください。


----------------
質問する際は、回答者に具体的な情報を与えてください。

hide33
Åê¹ÆNo.45581
投稿日時: 2010-8-25 18:56
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
Re: GMTとUTC for Twitter
ひろゆきさん、重ね重ねお許し下さい。

AS3のXML読み込みではうまく配列にできなかったので
下記のXPathAPIを利用してTwitterXMLを読み込んでいます。
dateArrayはTwitterXMLの投稿日時create_atを読み込んだ配列です。
もう少しでできそうです。

var dateArray:Array = XPath.selectNodes(xmlObj, "statuses/status/created_at/text()");
ひろゆき
Åê¹ÆNo.45582
投稿日時: 2010-8-25 20:11
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: GMTとUTC for Twitter
相変わらず、第三者が再現できる状況にありません。
「省略せずに」と申し上げたと思いますが。


----------------
質問する際は、回答者に具体的な情報を与えてください。

hide33
Åê¹ÆNo.45583
投稿日時: 2010-8-25 21:37
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
Re: GMTとUTC for Twitter
ひろゆきさん、ありがとうございます。

dateArray[0]はこのような日時のWed Aug 25 08:43:48 +0000 2010 Twitterから吐き出されるXMLのcreated_atタグの中身です。
var dateArray:Array = XPath.selectNodes(xmlObj, "statuses/status/created_at/text()");


今これでdataArray(日時の配列)とtextArray(本文の配列)を作成しています。
ここまではOKです。

そこで見出しの9時間のズレをAS2で変換したいと考えています。
ご教示くださった。PubDateTwitter.asを編集しています。現在のコードです。
class PubDateTwitter {
	// プロパティ
	private static var months:Array = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
	private static var days:Array = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
	private static var jdays:Array = ["日", "月", "火", "水", "木", "金", "土"];

	// コンストラクタ
	public function PubDateTwitter() {
	}

	// メソッド
	public static function toDate(str:String):String {
		trace(str);
                 //Wed Aug 25 08:43:48 +0000 2010 ここでは正常に出力されている。
		var dates:Array = str.split(" ");

               trace(dates[0]);
                 //undefineとなってしまう。

		var year:Number = Number(dates[5]);
		for (var m:Number = 0; m < months.length; m++) {
			if (dates[1] == months[m]) {
				var month:Number = m;
				break;
			}
		}
		var date:Number = Number(dates[2]);
		for (var n:Number = 0; n < days.length; n++) {
			if (dates[0].substr(0, 3) == days[n]) {
				var day:Number = n;
				break;
			}
		}
		var time:Array = dates[3].split(":");
		var hour:Number = strToNumber(time[0]);
		var GMT:Number = gmtToInt(dates[4]);
		var minute:Number = time[1];
		//trace(minute);
		var second:Number = strToNumber(time[2]);
		var d:Date = new Date(year, month, date, hour+GMT, minute, second);
		var dateStyle:String = d.getHours()+":"+minute+" "+(d.getMonth()+1)+"/"+d.getDate()+" "+days[d.getDay()];
		return dateStyle;
	}
		
	private static function strToNumber(str:String):Number {
		var n:Number;
		if (str.substr(0, 1) == "0") {
			n = Number(str.substr(1, 1));
		} else {
			n = Number(str.substr(0, 2));
		}
		return n;
	}
	private static function gmtToInt(str:String){
		str = str.substr(0, 3);
		var n:Number = strToNumber(str.substr(1, 2));
		var gmt:Number;
		if (str.substr(0, 1) == "+") {
			gmt = n;
		} else {
			gmt = - n;
		}
		return gmt;
		trace(gmt);
	}

}
ひろゆき
Åê¹ÆNo.45584
投稿日時: 2010-8-25 21:42
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: GMTとUTC for Twitter
「ここまではOK」の部分に問題がないと判断できません。
むしろ、そこに問題があるような気がします。

その証拠に、フレームアクションに
_root の第1フレームに
var pd:String = "Wed Aug 25 08:43:48 +0000 2010";
pd.split("+0000").join("+0900");
trace(PubDateTwitter.toDate(pd));
と記述しても、エラーは出ません。

PubDateTwitter.as
class PubDateTwitter {
	// プロパティ
	private static var months:Array = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
	private static var days:Array = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
	private static var jdays:Array = ["日", "月", "火", "水", "木", "金", "土"];

	// コンストラクタ
	public function PubDateTwitter() {
	}

	// メソッド
	public static function toDate(str:String):String {
		
		var dates:Array = str.split(" ");
		var year:Number = Number(dates[5]);
		for (var m:Number = 0; m < months.length; m++) {
			if (dates[1] == months[m]) {
				var month:Number = m;
				break;
			}
		}
		var date:Number = Number(dates[2]);
		for (var n:Number = 0; n < days.length; n++) {
			if (dates[0].substr(0, 3) == days[n]) {
				var day:Number = n;
				break;
			}
		}
		var time:Array = dates[3].split(":");
		var hour:Number = strToNumber(time[0]);
		var GMT:Number = gmtToInt(dates[4]);
		var minute:Number = time[1];
		//trace(minute);
		var second:Number = strToNumber(time[2]);
		var d:Date = new Date(year, month, date, hour+GMT, minute, second);
		var dateStyle:String = d.getHours()+":"+minute+" "+(d.getMonth()+1)+"/"+d.getDate()+" "+days[d.getDay()];
		return dateStyle;
	}
		
	private static function strToNumber(str:String):Number {
		var n:Number;
		if (str.substr(0, 1) == "0") {
			n = Number(str.substr(1, 1));
		} else {
			n = Number(str.substr(0, 2));
		}
		return n;
	}
	private static function gmtToInt(str:String){
		str = str.substr(0, 3);
		var n:Number = strToNumber(str.substr(1, 2));
		var gmt:Number;
		if (str.substr(0, 1) == "+") {
			gmt = n;
		} else {
			gmt = - n;
		}
		return gmt;
		trace(gmt);
	}

}


----------------
質問する際は、回答者に具体的な情報を与えてください。

hide33
Åê¹ÆNo.45585
投稿日時: 2010-8-25 22:32
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
Re: GMTとUTC for Twitter
そうですね。ひろゆきさんのとおりにしたらエラーはでませんが、9時間が調整されずにそのままの時間が表示されました。何故でしょう?

下記コードをMsgbtn.as(クラスではなく外部ファイル)としていました。
さらにこのファイルをrootにあるムービークリップの中のタイムラインに移動しました。なのでPubDateTwitterクラスのパスがうまく通ってないようです。
このコードはまだ他にボタン制御などの関係でrootに書いていなかったのですが、何とかこれをrootに移動したら解決しそうです。
import mx.xpath.XPathAPI;
import com.xfactorstudio.xml.xpath.*;

Security.loadPolicyFile("http://assets0.twitter.com/crossdomain.xml");
Security.loadPolicyFile("http://assets1.twitter.com/crossdomain.xml");
Security.loadPolicyFile("http://assets2.twitter.com/crossdomain.xml");
Security.loadPolicyFile("http://assets3.twitter.com/crossdomain.xml");
Security.loadPolicyFile("http://assets4.twitter.com/crossdomain.xml");

//XMLファイル読込
var n:Number = Math.floor(Math.random()*1000000);
var XMLFile:String = "http://www.hogehoge.com/swf/crossdomain-proxy.php?url=http://twitter.com/statuses/user_timeline/hogehoge.xml?cache="+n;

var xmlObj:XML = new XML();
xmlObj.ignoreWhite = true;
xmlObj.load(XMLFile);
xmlObj.onLoad = function(success:Boolean):Void {

	var dateArray:Array = XPath.selectNodes(xmlObj, "statuses/status/created_at/text()");
	var textArray:Array = XPath.selectNodes(xmlObj, "statuses/status/text/text()");
	var pd:String = dateArray[0];
	pd = pd.split("+0000").join("+0900");
	trace(PubDateTwitter.toDate(pd));
	//初期設定
	_root.date.text = PubDateTwitter.toDate(pd);
	_root.title.text = textArray[0];
	_root.topic.text = textArray[0];
}

ubDateTwitter.toDate(pd);がNaN:undefined NaN/NaN undefinedになるみたい。
もう少しだなぁ。
ひろゆき
Åê¹ÆNo.45587
投稿日時: 2010-8-26 0:41
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: GMTとUTC for Twitter
もっとシンプルに試すことができたはずですが、ここまで複雑な構造にした上で、
回答者に確認しろというのは、負担が大きすぎます。

ボタン制御などを今回の問題に絞ったもので、改めて質問し直すなどされないと、
何が問題で、どうしたら解決するのかは不明確だと思います。

ほぼ確実に言えることは、PubDateTwitter.as 側の問題ではないでしょう。

datteArray[0] 自体が、String ではないのでは?
String であるべきものが、そうでなかったり、
XPath の取り扱いに問題があるように思います。


----------------
質問する際は、回答者に具体的な情報を与えてください。

hide33
Åê¹ÆNo.45588
投稿日時: 2010-8-26 11:36
半人前
居住地:
投稿: 39
使用環境:
CS4
10.6
Re: GMTとUTC for Twitter
どうも有難う御座います。ご指摘の通りdateArray[0]の型がobjectになっていました。あとは型変換だけのようです。
//XMLファイル読込とテキストフィールドに表示
var n:Number = Math.floor(Math.random()*1000000);
var XMLFile:String = "http://www.hogehoge.com/swf/crossdomain-proxy.php?url=http://twitter.com/statuses/user_timeline/hoge.xml?cache="+n;
//var XMLFile:String = "message.xml";
var xmlObj:XML = new XML();
xmlObj.ignoreWhite = true;
xmlObj.load(XMLFile);
xmlObj.onLoad = function(success:Boolean):Void {

	var dateArray:Array = XPath.selectNodes(xmlObj, "statuses/status/created_at/text()");
	var textArray:Array = XPath.selectNodes(xmlObj, "statuses/status/text/text()");
	
	trace(typeof(dateArray[0])); //object
	var pd:String = dateArray[0];
	pd = pd.split("+0000").join("+0900");
	//var _date:Date = new Date(pd);
	trace(PubDateTwitter.toDate(pd));
	//初期設定
	_root.date.text = PubDateTwitter.toDate(pd);
	_root.title.text = textArray[0];
	_root.topic.text = textArray[0];
}


型変換で下記のようなコードでpd[i]とかいろいろやってるんだが
最初に代入されるdateArray[0];だけ正常に値が変換されるところまでいった。
for (var i:Number=0; i<dateArray.length; i++) 
	{ 
		var pd:String;
		pd = String(dateArray[i]);
		pd = pd.split("+0000").join("+0900");
		var newArray:Array = [pd];
		trace(newArray);
	}

追伸:上記でpdにdateArrayを型変換していれることができたので、For文を書くのが良くわからなかったので力技で繰り返し記述で解決しました。格好がわるいですが動作するようになりました。ひろゆきさん、大変ご丁寧に有り難う御座いました。
« 1 (2)
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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