忍者ブログ
全くIT系ではない製造業の社員がイントラ上でColdFusionと格闘。システム構築を外部委託するとき「できればColdFusionでお願いします」と頼むのだが・・・・
[14] [15] [16] [17] [18] [19] [20] [21] [22]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

♪地震に強くみせーたり、
    地震を弱くみせーたり・・・・♪
平井堅のLIFE IS ・・・ 好きだったんですが、この替え歌聴いてからこの歌詞ばっかり浮かびます。

さて、
ColdFusionとは少し離れますが、FlashPlayerのバージョン別普及率について。
先日8.5が9.0として正式リリースされました。
σ(・・*)ワタシ的には、7.0と8.0の普及率が気になります。

先月あたりに、会社の外部コンテンツでFLVを使った動画配信を本格的(?)に始めたのですが、そのときFlash7以上を対象とするか、8以上にするかで悩みました。
8で作ると、圧縮率の高いFLVのコーデックを使えるし、コンポーネントも扱いやすい。
でもFlashPlayer8の普及率は6割くらいと言われていました。

で、結局FlashPlayer7以上を対象として作りました。

ホントに8の普及率は6割なんだろうか・・・と思いながらも、最近のデータはどこにも見つからず、まぁそのうち・・・と思っていたのですが、最近始めたGoogleのanalyticsデータには実はFlashのバージョンが記録されていると知ったわけです。

FlashVer
一応会社のサイトはGooglePageRankが5です。直近1週間の訪問者のFlashのバージョンが記録されています。ちなみに5278人。
何か同じバージョンでもr22とかr24とか細かく分かれてしまっていますが、集計すると、
9:4.1%
8:58.4%
7:29.3%
6:6.2%
5:0.6%
4:0.1%
未インストール:1.3%

といった感じです。8と9合わせて62.5%ですから、もうちょっとですかね。
早くバージョン8以上を前提にして作りたいところです。

ちなみにColdFusionが生成するswfやflashpaperなんかは、Ver6以上が対象のようです。


PR
♪土日も休まずに 築 宅 築 宅
 おじまさんといっしょに 築 宅 築 宅♪
耳から離れません。

さて、

何かの時に「プロってのは、エラー処理まで考えるんだよ」という話を聞いた覚えがあります。
エラーが出たら出っぱなしになるのがアマチュア。想定できるエラーなら処理を考えておくのがプロってことでしょうか。

まぁσ(・・*)はプロフィールにあるとおりプロじゃないわけですが、アマとしてのエラー処理くらいはやっておこうと思います。自動スケジュールものは、エラーが出ても気がつかないことが多いので、「通知」する程度のエラー処理ですが。

<cftry>
 <!--- ■RSS get --->
 <!--- ■xml解析 --->
 <!--- ■内部mt_entry更新 --->
 <!--- ■表示部分 --->
 <!--- ■html作成 --->
 <!--- ■ftpでput --->
<cfcatch>
 <cfmail from="server@hoge.co.jp" to="cfif@hoge.co.jp" subject="RSS更新のエラーでてますって!">
  #cfcatch.message#
  例外エラー、type = #CFCATCH.TYPE# を検出しました。
</cfcatch>
</cftry>

こんな感じで、エラーが想定される場所を<cftry>→LiveDocsでくくって、エラーが起きたときの処理を<cfcatch>→LiveDocs )に書くのが基本です。すると、例えばRSSのxmlをcfhttpで取れなかった時や、putに失敗した時など、何らかのエラーが発生した場合に<cfmail>→LiveDocs )でColdFusionがメールを送ってくれます。

なんでもかんでも一緒くたにメール飛ばすだけ ってところがアマチュア対応ですなぁ。


愛という字は真心で、 恋という字は下心。

・・・・最近肩こりがひどくなってきました。

さて、
取ってきたRSSから新着を取って、それをhtmlファイルにして社外にFTPでputする最後の部分です。
使うColdFusionのタグは、<cffile>→LiveDocs ) と <cfftp>→LiveDocs

まず、htmlファイルの元ネタを文字列変数にします。
<cfset htmlDoc = '
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>各ブログのRSSを取ってくる</title>
</head>'>
こんな感じで、改行含めてそのまんま変数に突っ込んでいきます。

それから
<!--- ■File書き込み --->
<cffile action="write" output="#htmlDoc#" file="/var/www/blogs/ftp/test.html" >
ここで file はサーバーの絶対パスです。windowsなら、D:\inetpub\wwwroot\・・・・とか。
これでファイルがColdFusionサーバー側に作成されます。

そんでもって、
<!--- ■FTP --->
<cfftp action = "open" username = "hoge" connection = "Blogs_new" password = "hoge" server = "hoge.co.jp" stopOnError = "Yes">
 
<cfftp action="putfile" connection="Blogs_new" localfile="/var/www/blogs/ftp/test.html" remotefile="/blogs_html/test.html">

 
<cfftp action = "close" connection = "Blogs_new" stopOnError = "Yes">


action="open" でFTPサーバーに接続して、
action="putfile" でPUT。
action="close" で接続のクローズ。
行儀良くやるとこんな感じですかね。実は今回初めて使ったタグです。

初めてでもColdFusionのリファレンス(Dreamweaverのヘルプからいつも開いてます)を見れば、ちょっとの試行錯誤ですぐ使えるので、ColdFusionが大好きです。


次回はエラー処理についてでも。
こういう自動スケジュールモノってエラーが出ても気がつかないことが多いですからね。




苦い濃いより、甘い濃い。
毎日暑くてふにゃふにゃです。

さて、

<cfset blogList = "satou,suzuki,tanaka,yamaguchi,yamada">

<cfset rssDoc = structnew()>

<!--- ■RSS get --->
<cfloop list="#blogList#" index="blogname">
<cfhttp url="http://blog.hogehoge.co.jp/#blogname#/index.xml" result="#blogname#" />
</cfloop>

<!--- ■xml解析 --->
<cfloop list="#blogList#" index="blogname">
<cfset rssDoc[#blogname#] = XmlParse(Evaluate("#blogname#.filecontent"))>
</cfloop>

<!--- ■内部mt_entry更新 --->
<cfquery name="upd" datasource="mtdb">
UPDATE hogehoge SET hoge WHERE entry_id = '123'
</cfquery>

<!--- ■表示部分 --->
<cfloop list="#blogList#" index="blogername">
<cfoutput>
BlogerName:#blogername#<br />
lastBuildDate:#CreateODBCDateTime(rssDoc[blogername].rss.channel.lastBuildDate.XmlText)#<br />
TITLE:#rssDoc[blogername].rss.channel.item[1].title.XmlText#<br />
description:#REReplace(rssDoc[blogername].rss.channel.item[1].description.XmlText,"<[^>]*>","","All")#
<hr />
</cfoutput>
</cfloop>

コアな部分はこんな感じですね。
ポイントとしては、数人分のxmlオブジェクトをループ処理できるように、rssDoc という構造体にまとめて入れたこと。
で、構造体を扱うときにハマリがちな部分は、
rssDoc.satou.hoge.fuga.ColdFusion.great という風に、直書きなら扱えるけれど、
rssDoc.#blogername#.hoge.fuga.ColdFusion.great という風に変数をドットシンタックスには入れられない点。なんで?と言われてもよくわかりまへん。変数名なのか構造体のキー名なのかわからないからかな?ColdFusionの仕様
その場合は、[連想配列]として扱えばOKです。
rssDoc[blogername].hoge.fuga.ColdFusion.great

あと、わかってるようで実はイマイチわかっていないのが Evaluate 関数。(→LiveDocs
マニュアルには、

説明

1 つ以上の文字列式をダイナミックに左から右へ評価します(左部分の評価結果が右部分に対して意味を持つことがあります)。右端にある式の評価結果が返されます。

とありますが、σ(・・*)ワタシ的には意味不明。
ただ、いろいろやっているうちに、この関数は、「変数で変数名を作る」ときに使える と理解しています。
今回の場合、satou.filecontent や suzuki.filecontent という変数をXmlParseする必要があったのですが、XmlParse(#blogername#.filecontent) とするとエラーになります。
XmlParse(Evaluate("#blogername#.filecontent")) とすると、XmlParse(satou.filecontent) としたときと同じ処理になってくれます。

構造体や配列をループ処理するときによく使いますね。Evaluateは。
RSSを外から取ってきて、必要な情報を抜き出せればRSSリーダー「もどき」としては出来たも同然。
あとはどう見せるかという、プログラマが苦手なデザインセンス部分が問題になります。

とりあえず現状のままだと記事のhtmlタグもついてきてしまうので、タグを取らないことには画像なんかも入ってくるので厄介です。

ColdFusionにはタグストリップ関数みたいなのはありません。
で、どうするかというと、文字を置き換えてくれるReplace関数(→LiveDocs )というやつを使います。タグの部分を""に置き換えて取っちゃうわけですね。
普通のReplace関数だと、置き換えるテキストを完全一致で書かなければいけません。まさか全部のhtmlタグを書くことは出来ないので、
正規表現で置き換えてくれる、REReplace関数(→LiveDocs )を使います。
RE は正規表現(Regular Expression)のREだと思われます。
σ(・・*)ワタシ的には、正規表現、かなり苦手です。多分、正規表現をマスターする数学的な脳がちょっと足りないんだろうと思います。物理的脳はいいセンいってると思うんですがね・・・・

#REReplace(tag_tuki_Text , "<[^>]*>" , "" , "All")#

はい、これでタグストリップ完了です。

tag_tuki_Text はタグ付きテキストが入っている変数です。(そのまんまやん)
< [ ^ > ] * >
こいつが正規表現。顔文字じゃあない。こう書くと、「最初の < から 次の > まで」という意味になる。
それを "" で "All"全部 置き換えちゃってくれ! という事になる。

えーと、
"<[^>]*>" < が出てきて、

"<[^>]*>" > ではない文字が、

"<[^>]*>" 連続して、

"<[^>]*>" > が出てくるまで。
無理矢理訳すとこんな感じかな・・・

ってことで、次回仕上げます。



ブログ内検索
プロフィール
HN:
CFIF
性別:
男性
自己紹介:
もっと日本でもColdFusionが広まって欲しいです。

情報通信を生業としない企業の、システム系でもない普通の社員なので、 ColdFusionは独学。参考書が少ないのがツライです・・・・なんだかんだ、ColdFusion4.xのシリウス時代から7年くらいのおつきあい?リンコムNextのソースが教科書かも。

外注するときはよく「できればColdFusionで・・・・」とお願いするのですが、ほとんどの場合「えっ!?」と驚かれてしまい、「SEのアサインが・・・」などと営業さんが困ってしまうことが多くて悲しいです。
ちょっとしたものなら自分でシステム構築しちゃいますが、一人でやるには時間が足りませんね・・・

FlashRemotingとかもやりますが、Flexには手を出してません。
と、最初の頃書きましたが、ついにFlexに手を出しました。Flex1.5はイマイチわかりませんでしたが、Flex2は別物ですね。これで6万円でイインデスカ?
そしてFlex2とColdFusionの組み合わせなら無敵な気がしますよ。ほんとに。
最新トラックバック
カレンダー
03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
なかのひと
忍者ブログ [PR]