[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
今朝、会社の女子トイレから「キャー!きゃー!」と何度も悲鳴が聞こえた。
あとで聞くと、「コオロギが出た!」と言う・・・・
ここは東京都中央区のビルの8階。
そいつは絶対コオロギじゃないと思うぞ。
さて、
MovabeType用のpingサーバーの作り方、その5です。
[その1] [その2] [その3] [その4]
1)pingが来たら、
2)postされたcontentの内容を読んで
3)XMLとして取り込み
4)URLを取り出したら
5)RSSを読みに行って
6)新着記事を入手し
7)データーベースに書く
の7) について。
DBにping用のテーブルを用意します。
とりあえず、SEQ,URL,PINGDATE,TITLE,CONTENTSといったフィールドにしました。
<cfquery datasource="etc" name="pingins">
INSERT INTO BLOG (SEQ,URL,PINGDATE,TITLE,CONTENTS) VALUES
(BLOG_SEQ.NEXTVAL,'#ping.methodCall.params.param[2].value.xmltext#','#xmlDoc["rdf:RDF"].item[1]["dc:date"].XmlText#','#xmlDoc["rdf:RDF"].channel.title.xmltext#','#xmlDoc["rdf:RDF"].item[1].title.XmlText#')
</cfquery>
SEQ以外は文字列型でそのまんま突っ込んでます。f(^^;)
ColdFusionのわかりやすさの一つが、この<cfquery>の書き方。
aspやphpなどは、SQL文を作るのがめんどくさいなぁ といつも思います。文字列変数を何度もつなげて・・・・。作るのがめんどくさいというより、実はワタシ的にはほとんどaspやphpでゼロから作ることは無いので、ソースから逆追いするのがメンドクサい・・・・・といつも思います。
検索用に条件がいろいろ変わるときなんかは特にそうです。
aspやphpだと、結局どんなSQL文になってるのか、デバッグ用にsqlを表示させながら確認するしか方法をしりません。
ColdFusionだと、SQL文をそのまま書けるから見た目にわかりやすい。
検索系で動的に条件が変わる場合は、CFCとして別出しすることが多いかな?
そのときはそれなりに複雑になってしまいますが・・・・
さて、DBに突っ込めばとりあえずおしまいな訳ですが、なにやらpingを受け取ると結果をxmlで返すルールのようなので(よくわかってない)見よう見まねで返しておきます。本来なら成功か失敗かで返すxmlが代わるわけですが、その辺はなんちゃってイントラpingサーバーなので、気にしない気にしない。
=======以下、実際に使ってるソース index.cfm ========
<cfprocessingdirective pageencoding="utf-8">
<cfset x = GetHttpRequestData()><!---httpリクエストを取る--->
<cfif x.method is "POST">
<cfset ping = XMLParse(x.content)><!---xml展開--->
<cfset Variable.url = "#ping.methodCall.params.param[2].value.xmltext#index.rdf">
<cfhttp url="#Variable.url#" method="GET" resolveurl="Yes" throwOnError="Yes" />
<cfset xmlDoc = XmlParse(CFHTTP.FileContent)>
<cfset resources=xmlDoc.xmlroot.xmlChildren>
<cfquery datasource="etc" name="pingins">
INSERT INTO BLOG (SEQ,URL,PINGDATE,TITLE,CONTENTS) VALUES
(BLOG_SEQ.NEXTVAL,'#ping.methodCall.params.param[2].value.xmltext#',#now()#,'#resources[1].title.xmltext#','#resources[2].title.xmltext#')
</cfquery>
<?xml version="1.0" encording="UTF-8"?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>flerror</name>
<value>
<boolean>0</boolean>
</value>
</member>
<member>
<name>message</name>
<value>Thanks for the ping.</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
<cfelse>
<!---そうか GETだったら表示しよう--->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ブログ更新情報</title>
</head>
<cfquery name="blogs" datasource="etc">
SELECT
C.SEQ , B.URL , B.LASTUPDATE , C.TITLE , C.CONTENTS
FROM
(SELECT A.URL,MAX(A.PINGDATE) LASTUPDATE FROM BLOG A GROUP BY A.URL) B, BLOG C
WHERE
B.URL = C.URL AND B.LASTUPDATE = C.PINGDATE
ORDER BY B.LASTUPDATE DESC
</cfquery>
<body>
<div id="blogs">
<h3>Blogs</h3>
<ul>
<cfoutput query="blogs">
<li><a href="#url#">#TITLE#</a>(#dateformat(lastupdate,'m/d')# <cfif datediff('d',lastupdate,now()) lt 3><span style="color:red">New!</span></cfif>)<br>
#CONTENTS#
</li>
</cfoutput>
</ul>
</div>
</body>
</html>
</cfif>
以上でした。
情報通信を生業としない企業の、システム系でもない普通の社員なので、 ColdFusionは独学。参考書が少ないのがツライです・・・・なんだかんだ、ColdFusion4.xのシリウス時代から7年くらいのおつきあい?リンコムNextのソースが教科書かも。
外注するときはよく「できればColdFusionで・・・・」とお願いするのですが、ほとんどの場合「えっ!?」と驚かれてしまい、「SEのアサインが・・・」などと営業さんが困ってしまうことが多くて悲しいです。
ちょっとしたものなら自分でシステム構築しちゃいますが、一人でやるには時間が足りませんね・・・
FlashRemotingとかもやりますが、Flexには手を出してません。
と、最初の頃書きましたが、ついにFlexに手を出しました。Flex1.5はイマイチわかりませんでしたが、Flex2は別物ですね。これで6万円でイインデスカ?
そしてFlex2とColdFusionの組み合わせなら無敵な気がしますよ。ほんとに。
01 | 2025/02 | 03 |
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 |