<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>橋本商会 &#187; XPath4AS2</title>
	<atom:link href="http://shokai.org/blog/archives/tag/xpath4as2/feed" rel="self" type="application/rss+xml" />
	<link>http://shokai.org/blog</link>
	<description>なんか作ったりした記録を忘れないうちに書くblog</description>
	<lastBuildDate>Tue, 07 Sep 2010 13:08:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<atom:link rel="hub" href="http://pubsubhubbub.appspot.com/" />
			<item>
		<title>chumbyで日本語Twitterを読めるwidgetを作った</title>
		<link>http://shokai.org/blog/archives/1535</link>
		<comments>http://shokai.org/blog/archives/1535#comments</comments>
		<pubDate>Fri, 09 May 2008 10:36:22 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[AS2]]></category>
		<category><![CDATA[chumby]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[XPath4AS2]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1535</guid>
		<description><![CDATA[
chumbyは日本語フォントが入っていないので日本語が表示できないが、Flashの中のダイナミックテキストそのものにフォントを埋め込めば日本語が出せる。

Chumby Japan チャンビー・ジャパン: もうすぐ日本 [...]]]></description>
			<content:encoded><![CDATA[<p>
<p><a href="http://www.chumby.com/">chumby</a>は日本語フォントが入っていないので日本語が表示できないが、Flashの中のダイナミックテキストそのものにフォントを埋め込めば日本語が出せる。</p>
<ul>
<li><a href="http://chumbyjapan.com/blog/2008/03/post.html">Chumby Japan チャンビー・ジャパン: もうすぐ日本語表示が可能に？</a></li>
<li><a href="http://d.hatena.ne.jp/marqs/20080313/p1">Chumby Widgetで日本語表示 &#8211; marqs blog</a></li>
</ul>
<p>ちょうどIMのAPIが動いてなかったので、twitterのfriends timelineを表示するchumby widgetを作ってみた。ただしフォントデータそのものを埋め込んで配布するのはライセンス的にまずそうなので、flaファイルのみの公開になります。自分の環境でコンパイルしてください<a href="http://shokai.org/blog/archives/1538">IPAフォントを埋め込んで、swfも公開しました</a></p>
<p>ダウンロード → <a href="http://shokai.org/archive/chumby/080509_Twitter/">SourceCode (Flash CS3 / AS2)</a></p>
<p>（AS2が久しぶりすぎてやばかった）</p>
<p><a title="twitter on chumby by shokai, on Flickr" href="http://www.flickr.com/photos/shokai/2478168816/"><img src="http://farm4.static.flickr.com/3008/2478168816_6df672331e_o.jpg" alt="twitter on chumby" width="240" height="320" /></a></p>
<p>ただしこの方法だとファイルサイズが100kb（chumby widgetの容量制限）を超えるので、USBから起動するしかない。<br /><br />
→ <a href="http://shokai.org/blog/archives/1534">s.h.log » chumbyで自作widgetをUSBメモリから起動する</a></p>
<p><a title="japanese twitter on chumby by shokai, on Flickr" href="http://www.flickr.com/photos/shokai/2477030617/"><img src="http://farm3.static.flickr.com/2107/2477030617_90f403fbf4_o.png" alt="japanese twitter on chumby" width="332" height="290" /></a></p>
<p>■<a href="http://shokai.org/archive/chumby/080509_Twitter/Twitter/profile.xml">profile.xml</a><br /><br />
profile.xmlのusernumの数値を、自分のtimeline用に書き換える。これはtwitter上でのID。<br /><br />
twitter.com/homeで、自分のRSSフィードを見ると 123456.atom みたいな感じになっているので、その数値に書き換える。</p>
<p>intervalの秒数だけ、次の記事を読むまでwaitがかかる。デフォルトは8秒。</p>
<p>■Twitter APIをAS2で読む<br /><br />
<a href="http://www.xfactorstudio.com/">XPath4AS2</a>でxml版のフィードを読んだ。<br /><br />
FlashでBasic認証を通る方法がわからなかったので、protectをかけているユーザのtimelineは読めないかも知れない。<br /><br />
前に作ったXPath4AS2テスターが役に立った。</p>
<ul>
<li><a href="http://shokai.org/blog/archives/1130">s.h.log » Flash &#8211; XPath4AS2でXPathテスター</a></li>
<li><a href="http://shokai.org/blog/archives/1132">s.h.log » FlashでFlickr REST-APIを呼ぶ</a></li>
<li><a href="http://www.trick7.com/blog/2006/09/28-092340.php">trick7.com blog: xfactorstudioのXPath4AS2の使い方</a></li>
</ul>
<p>■favorite<br /><br />
どうしてもふぁぼりたかったんだけど、FlashからBasic認証を通る事ができなくて無理だった。<br /><br />
http://user:pass@twitter.comの方法も、Base64エンコードしてLoadVarsにaddRequestHeaderするのも、getURLも駄目。<br /><br />
ブラウザの中で動いているわけではないのでログイン済みのcookieを共有するも出来ない。<br /><br />
cgiでproxyすればいいんだけど。</p>
<p>■thumbnail<br /><br />
USBから起動した場合、サムネイルが読めない。<br /><br />
同じ画像ファイルでwebにアップした場合は読めたので、profile.xmlの記述ミスかも。</p>
<p>■setIntervalがおかしい<br /><br />
PC上で実行している時は問題ないんだけど、ChumbyのFlashLite3上でsetIntervalを使ってタイマ処理を行っている時、4秒以上待てない。10秒などを指定すると、4秒ぐらいでタイマ処理が回ってしまう。調べても特にFlashLiteは特別という記述は見あたらなかったので、なんだかわからないけど、さすがに4秒はchumbyから目を離せなくなってしまうので今回は1秒を数えるsetIntervalを作ってさらにカウントアップする変数を用意して、時間を数えるようにした。</p>
<p>■プログラム<br /><br />
全部<a href="http://shokai.org/archive/chumby/080509_Twitter/Twitter/twitter.fla">twitter.fla</a>の1フレーム目に書いた</p>
</p>
<blockquote><p><p>
import com.xfactorstudio.xml.xpath.*;</code></p>
<p>if(!interval) interval = 10;<br /><br />
if(!usernum) usernum = 3631571;</p>
<p>var twitterXml:XML = new XML();<br /><br />
twitterXml.ignoreWhite = false;</p>
<p>var xmlUrl = "http://twitter.com/statuses/friends_timeline/"+usernum+".xml";</p>
<p>twitterXml.onLoad = twitterXml_onLoad;<br /><br />
twitterXml.load(xmlUrl);</p>
<p>var int_id;<br /><br />
function twitterXml_onLoad(success:Boolean) {<br /><br />
if(success){<br /><br />
trace("XML load success!!");<br /><br />
loading._visible = false;<br /><br />
preLoadIcon(twitterXml);<br /><br />
int_id = setInterval(count_sec, 1000);<br /><br />
loadNextStat();<br /><br />
}<br /><br />
else{<br /><br />
trace("XML load error!!");<br /><br />
}<br /><br />
}</p>
<p>function preLoadIcon(stats:XML){<br /><br />
//trace(stats);<br /><br />
var icons:Array = XPath.selectNodes(stats, "statuses/status/user/profile_image_url/text()");<br /><br />
trace(icons.length);<br /><br />
for(var i:Number = 0; i &lt; icons.length; i++){<br /><br />
var loader = new mx.controls.Loader();<br /><br />
loader.contentPath = icons[i];<br /><br />
//loader.load();<br /><br />
//trace(loader.autoLoad);<br /><br />
trace(loader.contentPath);<br /><br />
}<br /><br />
}</p>
<p>var stat_id = 0;<br /><br />
var fav = "false";<br /><br />
function loadStats(stats:XML, num:Number){<br /><br />
var len = XPath.selectNodes(stats, "statuses/status").length;<br /><br />
if(num &gt; len){<br /><br />
clearInterval(int_id);<br /><br />
loading._visible = true;<br /><br />
twitterXml.load(xmlUrl);<br /><br />
n = 1;<br /><br />
return;<br /><br />
}<br /><br />
var update = XPath.selectNodes(stats, "statuses/status["+num+"]/text/text()");<br /><br />
fav = XPath.selectNodes(stats, "statuses/status["+num+"]/favorited/text()");<br /><br />
var iconUrl = XPath.selectNodes(stats, "statuses/status["+num+"]/user/profile_image_url/text()");<br /><br />
var userName = XPath.selectNodes(stats, "statuses/status["+num+"]/user/name/text()");<br /><br />
var screenName = XPath.selectNodes(stats, "statuses/status["+num+"]/user/screen_name/text()");<br /><br />
var date = XPath.selectNodes(stats, "statuses/status["+num+"]/created_at/text()");<br /><br />
stat_id = XPath.selectNodes(stats, "statuses/status["+num+"]/id/text()");<br /><br />
iconLoader.contentPath = iconUrl;<br /><br />
//favStar.gotoAndStop(fav); // labelで移動<br /><br />
labelUpdate.text = update;<br /><br />
labelUserName.text = userName + "(" + screenName + ")";<br /><br />
labelDate.text = date;<br /><br />
trace(fav);<br /><br />
}</p>
<p>var sec = 0;<br /><br />
function count_sec(){<br /><br />
sec++;<br /><br />
if(sec &gt;= interval){<br /><br />
sec = 0;<br /><br />
loadNextStat();<br /><br />
}<br /><br />
}</p>
<p>var n = 1;<br /><br />
function loadNextStat(){<br /><br />
trace("loadNextStat");<br /><br />
loadStats(twitterXml, n++);<br /><br />
}<br />
</p></p></blockquote>
<p>
</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1535/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
