(過ぎたことは忘れちまえ)つらつら書くなり
カレンダー
カテゴリー
プロフィール
HN:
lenguasydialectos
性別:
男性
ブログ内検索
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
最近web系のプログラミングにはまっていて、googleAPIをさんざんいじくっていたのだが、yahooにも色々とおもしろい機能があるようなのでいじってみることにした。
あまり知られていないことだが、検索エンジンの裏では文章の構文解析を行っており、どれがどの単語と関連性が高いのか、などを判定して正確な検索結果を出すということに日夜腐心している御仁たちがいるわけだ。
そういう人たちが作り上げた機能の一部を一般向けに公開しているということなので、ためしに簡単なアプリをflashで作ってみた。前のようにjavascriptを使ってHTML主体で作ることができれば良かったのだが、javascriptのxmlHttpRequestは同一ドメイン内のデータしか読み書きできないので、そういった制限が割と少ないflashで作ることに。
解析自体はAPIのおかげでかなり簡単で、自分のyahooAPIのIDと解析したい文字列をWEB用にエンコードして指定のアドレスに送ってやるだけでいい。そうするとXML形式で解析結果が送られてくるので、自分で好きなように組み替えて使うことができる。
ところが、このXMLはactionscriptのxmlパース機能が直接適用できないようになっていて、そこに結構苦労してしまった。独自のnamespaceを定義してある為、actionscriptのコード内で、どんなタグをこれから解析しますよ、ということをいちいち書いておかないといけない。
つまり
Function xmlData_Loaded(e:event){
var xmlDoc:xml=new xml(e.target.data);
var aElement:XMLList=xmlDoc.elements(‘something’);
//ここでXMLデータから直接要素を取り出すつもり。
for(var i:uint=0;i<aElement.length;i++)someTextBox.appendText(aElement[i]);
}
では全く動かず、あらかじめ使う要素を指定してやる必要がある。
つまり、
var nSpace:Namespace=new Namespace(“urn:yahoo:jp:jlp”);
//使用する名前空間を指定
var somethings:QName=new QName(nSpace,”something”);
//名前空間内で定義されているタグの名前も指定。
Public function xmlData_Loaded(e:event){
var xmlDoc:XML=new XML(e.target.data);
var someElements:XMLList=xmlDoc.descendants(somethings);
//このように上で明示したタグを使って子要素を取り出す
Var i:uint=0;
while(someElements[i]!=null){
someTextBox.appendText(someElements[i]);
//ここで適当にテキストボックスに出力してやる。
i++;
}
return;
}
return;
}
のように、NamespaceとQNameを使ってどんなタグを使うかを明示する必要がある。
出来たのがこれ。
PR
この記事にコメントする