search phpbb-phpbb-FC2BLOG-Info-Edit Template-Post-Edit-Upload-LogOut
Click すると1秒足らずの内に、Ajax 通信により取得した xml ファイルから取得した情報を以下に表示します。
但し、恐縮ですが現時点では IE7 では表示されません。ここで行った方法では IE においては、xml ファイルから dc:date タグと dc:subject タグの情報を取得できないため(IEは名前空間に対応した接頭辞付きタグ名を取得するメソッド「getElementsByTagNameNS」に対応してない)、それらの情報を取得しないようにプログラムを修正して、やっと最新 20 エントリイのタイトル情報等を表示させることが出来ました。またマックを利用できる環境にないため Safari はチェックしようがありません。
FireFox(おそらく Mozilla 系は OK のはず)、Opera 及びIEに限定したバージョンとなっています。
jQuery Ajax をつかって取得した過去の 20 エントリイタイトル等一覧
FC2ブログでは URI: http://userName.blogNo.fc2.com/?xml で xml 形式のファイルがブラウザ表示されますが、サイトRSSとして利用されるこのファイルには、次のような諸情報が格納されています。
などです。
そこで、サーバー上にあるこの xmlファイルに Ajax を利用してアクセスすれば、上記の情報の一部又は全てを取得することが随時可能となります。
但し、この xml ファイルの情報には常に「最新の」ものに過ぎません。各エントリイからすれば常に最新情報が必要な訳ではありませんから、任意のエントリイからこの情報を活用することはまずないでしょう。その点ではこれから行うことは余り有り難みのあるものではなく、むしろ無用の長物と言えます。
更に、ブロック変数を利用すればいくらでも収集できる情報ですから、ますます意義もないことと言えます。
ところが、各エントリイにとっては「無用の長物」であるこの xml ファイルは jQuery.js の Ajax Utilities を具体的に詳しく知るための一助とするのには、適しています。
そんな訳で、上記の6つの情報の内、タイトル、本文及び要約文を除く4つの情報を jQuery Ajax を活用して取得して上記に表示してみました。なお、ブログ環境設定において サイトRSS 情報に掲載するエントリイ数は 20 としましたので、ここではその全てをゲットしています。
2つ前のエントリイの ResponseText 版同様、今回の ResponseXML 版でも苦労を重ねました。
Ajax では目的とする情報の取得に数百ミリ秒から数秒の時間を要するため、常にそれを考慮したコードを組まないと、undefined や null 値ばかりをゲットしてしまうことを、痛いほど知らされました。
完成したコードとその逐行解説
<script type="text/javascript"><!--
1. (function(limit){
//変数定義
2. var No, subject, date, target ={
3. target ={
4. title:[],
5. link:[],
6. date:[],
7. subject:[]
8. // description:[] //冒頭200文字は今回は表示しないので除外
};
9. $.ajax({
//或るFc2サイト(自サイトである必要はない)の xml ファイル URI
11. url: /http:.+fc2\.com\//.exec(location.href)[0] + "?xml",
12. type: "GET",
13. dataType: "xml", //dataType を xml と指定
14. success: function(xml){ //以下が Ajax 通信完了時の実行コード
15. $.each(target,function(key){ //各項目毎にイテレート処理
//左辺:各項目値を配列に格納。
//右辺:xml データから key タグ要素を見つけその各々に対して
16. target[key] = $.map($(xml).find(key),function(n){
//タグ内の文字を抽出して左辺に返す。
17. return $(n).text()
18. });
19. }); //二重のイテレート処理完了。これで目的のデータは取得済みとなる。
//次に取得値を表示する為の巡回処理を行う。
20. for (var i=0; i < target.date.length; i++) {
//環境設定が21件未満または一部表示となっていた場合への
//エラー処理。存在確認を行って、それがなければ break するようにした。
21. if (!target.link[i+1]) break;
//エントリイ番号の抽出
//リンクタグはサイト全体用のものが最初にあるの
でこれをスキップするために i+1 としている。
22. No = /entry-([0-9]+)/.exec(target.link[i+1])[1];
//IEでは<dc:subject>タグの抽出が出来ないため
23. subject = $.browser.msie ? "" : " , " +target.subject[i];
//IEでは<dc:date>タグの抽出が出来ないため
24. date = $.browser.msie ? "" : " , " +target.date[i].substring(0,10);
//上で全データが取得できたはずなので、その表示のためにタグ
//文字列とセットの文字列化してから html 配列に格納する。
//タイトルタグもサイト全体用のものが最初にあるので、
これをスキップするために、i+1 としている。
25. html.push( "<li><a href='" + target.link[i+1] + "' target='_blank'>" +
target.title[i+1] + "</a> (No." + No + subject + date + ")</li>"
26. ); //挿入用のデータ完成
27. } //End of for loop
28. html.length = limit; //表示するエントリイ数を引数値で設定
//環境設定故に20エントリイを対象と出来なかった場合への対応策として
//タイトル文字に取得したエントリイ数を表示させることにした。
//メソッドチェーンを大いに活用していることに留意を!
29. $("#put625").prev().children().html("jQuery Ajax をつかって取得した過去の " +
30. ( (i==20) ? 20 :i-1 ) +" エントリイタイトル等一覧").end().end()
//配列の要素を結合子なしで結合して表示タグ内に挿入
31. .html(html.join('')).slideDown("slow");
32. } //End of success()
313. }); //End of $.ajax()
//表示数を20に指定。ここを20以内の数字に変えれば表示数を制御できる。
32. })(20); //End of function()
//--></script>
xml ファイルを扱うのは初めてのことでした。だから document.getElementById が使えないことなどは全く知りませんでした。
しかしそのことは今回の作業ではたいした問題ではありません。目的のタグ情報の取得に苦労したことをこそ述べなければならないでしょう。
Fc2 ブログの xml ファイルの場合、例えば日付情報は <dc:date> と言うタグ名に格納されています。これはXML名前空間と呼ばれる拡張されたタグ名で(XML名前空間の簡単な説明)、その検索を行うメソッドgetElementsByTagNameNS によってFirefox等では検索が可能ですが、IEはこのメソッドに対応していません。。
ですからどのようにしてIEにおいて、日付情報を取得するのか悩みました。そのことはカテゴリイ情報の取得においても同様でした(タグ名は <dc:subject> )。
そこで、巧くいけばラッキーとばかりに "dc:" を除く date や subject 文字列だけでjQuery 検索を掛けてみたところ、何と見事に目的の情報を取得出来てしまったのです(getElementsByTagNameNS を使わないで取得できたのは驚きです)。これは極めてラッキーなことでした。この問題を通過しなければ xml ファイルからの日付情報やカテゴリイ情報の取得は思いもよらなかった訳ですから。
こうして打開策として IE の場合には取得できない情報はゲットしないようにし、その他では日付やカテゴリイのXML名前空間によるタグ名の項目もゲットするように場合分けして解決しました。
IE においてはなかなか(10日弱の間) 20 エントリイタイトルが表示できませんでした。その原因を探ろうにも FireBug のような素晴らしい性能を有する IE 向けの debugger が存在しないため(正確に言えば存在するかも知れませんが、その存在を知らないため)、表示を妨げている原因の探索に大変苦労しました。
悩んでいても何も解決しないので、やむを得ず性能の悪い debugger = IEに備え付けのものやIE専用のもの = を利用して原因を探求し、四苦八苦の末にやっとその原因を究明することが出来ました。
上述のように xml 文書では、日付とカテゴリイに関するタグ名が、dc:date、dc:subjectとなっていますが、jQuery.js を使ってこの xml ファイルを対象として走査する場合において、FireFox と Opera においては find("date") と find("subject") メソッドで当該タグを抽出できるのに、IE においてはそれが出来ずに未定義値をゲットしてしまうのです。このことが求める結果を取得・表示できない真相の闇でした。
そこで当座このエントリイにおいては(この後に、もっと一般化したIEでも同様の結果が得られるようなコードを作成したので)、IE で取得できない値はこれをゲットしない用にプログラムを改変して、やっと IE の場合でも最新20エントリイ情報を表示できるようになったのです。ふぅ〜(;_;)ウルウル
これには $.each メソッドか $.map メソッドのいずれかを使うことが出来るだろうと考え、今回は後者を利用してみました。どちらでも同様のことが出来るので余り使ったことのない map メソッドに挑戦してみた訳です。
悩んだことは map メソッドの引数でした。ここではnと言う文字を使いましたが、要は対象配列の各要素を指す訳ですが、これをどの様に表現して良いか思案してしまいました。結局何てことはなかったのですが、map メソッドを使い慣れていなかったためにちょっと苦労してしまいました。(16-17行)
今回作成したコードで最も自画自賛している箇所が二重イテレーターです。
この方法に至ったのは、xml ファイルから取得したいタグが4つ( title、link、date、subject )あることから、各々のタグ取得に関してほぼ同一内容のコードを書いても仕方ない、それは余りに冗長であると思ったからです。
そこでまずタグ名でイテレートできるよう、タグ名をプロパティ名とし、空配列をプロパティ値とするオブジェクトを作成し、その各プロパティに対して $.each メソッドによるイテレート処理を行うことにしました。(2-7行、15行)
配列に対してではなくオブジェクトに対して $.each メソッドを使うことは初めてでしたので、ここでも引数をどうするかでちょっと手間取りました。
この each イテレータの中に、先に述べたように各タグ要素から必要とする文字列を取得するための $.map メソッドによるイテレートを内包させて二重イテレータをしたのです。
各タグを順番に対象とし、そのタグ要素に対して find メソッドを適用して当該タグの全ての要素から構成される配列を作成し、それを当該タグ要素名のプロパティに格納したのです。(15-19行)
Fc2ブログ環境設定 - ブログの設定に「RSSの設定」という項目があります。ここで表示件数と表示順を設定できるのですが、この内容が 21件以上でかつ全文表示となっていなければ、20エントリイのタイトルなどを取得できないことが判明しました。
表示件数 20 以下でもエラーが出るし、たとえ 21 以上となっていても表示順序が「一部表示」となっていると結局 10 件の記事しか掲載されないために、エラーが出てしまいました。
そこで期待したような環境設定になっていない場合の対応策を盛り込みました(21行)。存在有無を確認し、存在しなければ for loop を break するというものです。
これにより 20 件のタイトルを取得できない環境設定となっている場合でも、獲得できる数だけのタイトル名などを取得することを可能としました。
90%近いシェアを握っているインターネットエクスプローラの描画エンジンを利用したタブbrowser。沢山のタブbrowserがあるが、多機能、カスタマイズフリー、スクリプト利用等で一日の長がある。Gekkoエンジンへの対応も行われ、IEからの自立独立の方向に向かっている。2005年7月にはIE7が登場する見通しの中で、今後の発展が望まれる。
多様なCSS作成支援機能を備えた、タグ入力式 HTML&CSS作成支援エディタ。スキンデザインもすっきりしている。テキストエディター上で作成するよりも確実で安全にタグ打ちが出来る。
文字コードを選べないのが欠点。
StyleNote同様のタグ入力式 HTML&CSS 作成支援エディタ。長年使用してきたが現在StyleNoteに乗り換えつつある。
クリップボード履歴情報を活用する為のソフト。画像まで履歴を取ってくれるのが嬉しい。このソフトを使わない日は絶対ない程に重宝し、愛用している。
起動中のウィンドウの「コピーできない」説明文などの文字列を取得し、コピー可能な文字データにするツール。何かと便利。
ストリーミングデータを保存することが出来るソフト。動画利用には不可欠なソフトだ。
無料ながらレイヤー機能を有し、スクリプトによる拡張も可能な、sleipnir作者が提供している優れもの画像編集ソフト。
画面キャプチャソフトと言えばこれに勝るものなし、ではないだろうか? 様々な取得方法を有しており、ブログ作成にもHomepage作成に不可欠だ。Jtrimと並んでWoodyBellsの作品。
複数ファイルの同時編集は出来ないが、透過pngも作れる画像編集ソフト。
(以下当該サイトから抜粋)初心者にも簡単に操作が出来るフォトレタッチソフトです。多くの加工機能で画像に様々な効果を与えることができます。非常に軽快に動作するため、ストレスなく操作できます。
Animation Gifファイルを作れる無料ソフト。
キャプチャソフト。画面内にサイト全体が表示しきれない場合でも、これを使えば全体をキャプチャすることが出来る。
画像処理。画像のフォーマット変換のみならず、色数やサイズ、圧縮率の変更まで一括処理できてしまう『BatchGOO!』は、大量の画像をまとめて処理したいときに大変便利なソフト。BMP, TIFF, JPEG, PCX, PNG の相互変換をはじめ、色数・サイズ・解像度の統一、JPEG圧縮率の調節など、ホームページ用の画像や携帯電話用の壁紙を揃えるのに抜群の相性を見せる。(Vectorの当該ソフト紹介頁より抜粋引用)
名前から直ぐに想像が付くように画像のサイズを測るためのソフトだ。Homepage作成には欠かせない。2カラム、3カラムのレイアウトを行う場合に大変重宝する。
ランチャーソフトは沢山あるが、中でもこれが一押しだ。2年以上使ってきたがその操作性には毎日満足している。これを使い始めてからデスクトップには一切のアイコンを表示することをやめてしまった。
AdobeReader7によって、起動時間が長すぎるという長年のユーザーの不満はある程度解消した。そのためこの高速化ソフトは存在価値が低下してしまったかもしれない。AdobeReader6迄はこのソフトによる起動高速化で恩恵を受けてきた。
IE専用が難点だが、様々なサイト内でIDやパスワードを入力するのに重宝するソフト。コンテキストメニューから簡単に起動できるのがGood! sleipnir等のIEの描画エンジンを利用しているブラウザでも使える。
利用しているパソコンの諸元値を取得するには、このソフトがベストだ。インストール済みソフトの一覧が取得できるのも嬉しい。
WMPは機能が豊富なだけ重い。RealPlayerも同様だ。そこでMedia Player Classicを使いたい。動作が軽快なだけではなく、対応しているファイル形式もすこぶる多く、これひとつで、wmvもrmも表示できてしまうのだから凄い! 数多あるMedia Playerの王様と言えるだろう。
自宅でPCを起動しているときには必ず起動しているメディアプレーヤー。何かと過剰なWinampよりも、起動も速くスキンはシンプルだ。
DivX, Xvid, Mov, Vob, Mpeg, Mpeg4, avi, wmv, dv, などの動画をDVD-Video形式に変換できるフリーソフト。クリックするとDVD関連ソフト紹介サイト=「DVDなToolたち」なるHomepageが開きます。