XMLデータの書き込みをColdFusionで大文字小文字の区別をつけるには?(大文字小文字の区別あり)

元記事はこちらです。

■index1.cfm

<!---/////////////////////////////////////////////////////////////////
xmlデータのattributes部分の追加
    ※大文字小文字を厳密にする
//////////////////////////////////////////////////////////////////--->

<!--- 処理 --->
<cfset cst_exec()>
<!---=================================================================
cst_exec
==================================================================--->
<cffunction name="cst_exec" returnType="void" output="no">
    <cfset var local = structNew()>

    <!--- 絶対パス取得 --->
    <cfset local.path = GetDirectoryFromPath(GetCurrentTemplatePath())>
    <cfset local.inF    = local.path & "in.xml">
    <cfset local.outF   = local.path & "out1.xml">

    <!--- xml読み込み --->
    <cffile action="read" file = "#local.inF#" variable = "local.data" charset = "utf-8">

    <cfset local.xml = XmlParse(local.data, true)>
    <cfset arrayPrepend(local.xml["App"].XmlChildren, XmlElemNew(local.xml,"Command"))>
    <cfset local.xml["App"]["Command"].XmlAttributes["Action"] = "APPEND">
    <cfset arrayAppend(local.xml["App"]["Command"].XmlChildren, XmlElemNew(local.xml,"ID"))>
    <cfset local.xml["App"]["Command"].ID.XmlText = "bbb">
    <cfset arrayAppend(local.xml["App"]["Command"].XmlChildren, XmlElemNew(local.xml,"Name"))>
    <cfset local.xml["App"]["Command"]["Name"].XmlText = "bbb name">


    <!--- xml書き込み --->
    <cffile action="write" file = "#local.outF#" output="#toString(local.xml)#" charset = "utf-8">
</cffunction>

XMLデータの書き込みをColdFusionで大文字小文字の区別をつけるには?(大文字小文字の区別なし)

元記事はこちらです。

■Application.cfm

<cfapplication name="#hash(GetDirectoryFromPath(GetCurrentTemplatePath()))#">

■index.cfm

<!---/////////////////////////////////////////////////////////////////
xmlデータのattributes部分の追加
    ※大文字小文字を区別する方法
    url.kbn="":大文字
    url.kbn<>"":大文字小文字
//////////////////////////////////////////////////////////////////--->
<cfparam name="url.kbn" default="">

<!--- 処理 --->
<cfset cst_exec()>
<!---=================================================================
cst_exec
==================================================================--->
<cffunction name="cst_exec" returnType="void" output="no">
    <cfset var local = structNew()>

    <!--- 絶対パス取得 --->
    <cfset local.path = GetDirectoryFromPath(GetCurrentTemplatePath())>
    <cfset local.inF    = local.path & "in.xml">
    <cfset local.outF   = local.path & "out.xml">

    <!--- xml読み込み --->
    <cffile action="read" file = "#local.inF#" variable = "local.data" charset = "utf-8">

    <cfset local.xml = XmlParse(local.data)>
    <cfset arrayPrepend(local.xml.App.XmlChildren, XmlElemNew(local.xml,"Command"))>

    <!--- 大文字 --->
    <cfif url.kbn eq "">
        <cfset local.xml.App.Command.XmlAttributes.Action = "APPEND">

    <!--- 大文字小文字 --->
    <cfelse>
        <cfset local.xml.App.Command.XmlAttributes["Action"] = "APPEND">
    </cfif>

    <cfset arrayAppend(local.xml.App.Command.XmlChildren, XmlElemNew(local.xml,"ID"))>
    <cfset local.xml.App.Command.ID.XmlText = "bbb">
    <cfset arrayAppend(local.xml.App.Command.XmlChildren, XmlElemNew(local.xml,"Name"))>
    <cfset local.xml.App.Command.Name.XmlText = "bbb name">


    <!--- xml書き込み --->
    <cffile action="write" file = "#local.outF#" output="#toString(local.xml)#" charset = "utf-8">
</cffunction>


■in.xml



aaa


ColdFusionで簡単バックアップ

元記事はこちらです。

■Application.cfm

<cfapplication name="#hash(GetDirectoryFromPath(GetCurrentTemplatePath()))#">

<cfset request.mail_from    = "xxx@yyy.com">
<cfset request.mail_to      = "xxx@yyy.com">
<cfset request.subj         = "cf backup test">

■index.cfm

<!---/////////////////////////////////////////////////////////////////
backup
    1.xcopy.xml内のtoに$date$がある場合は、当日に日付でバックアップ
    2.xcopy-excludelist.txtに除外する拡張子など設定
//////////////////////////////////////////////////////////////////--->

<!--- 処理 --->
<cfset cst_exec()>
<!---=================================================================
cst_exec
==================================================================--->
<cffunction name="cst_exec" returnType="void" output="no">
    <cfset var local = structNew()>

    <!--- 絶対パス取得 --->
    <cfset local.path   = GetDirectoryFromPath(GetCurrentTemplatePath())>
    <cfset local.bat    = local.path & "xcopy.bat">
    <cfset local.xlist  = "/EXCLUDE:" & local.path & "xcopy-excludelist.txt">

    <!--- xmlデータ抽出 --->
    <cfset local.qry = cst_getData()>

    <cfset local.data = "">
    <cfloop query="local.qry">
        <!--- toに$date$がある場合はyyyymmddに変換する --->
        <cfset local.to = replace(local.qry.to, "$date$", "#dateformat(now(),'yyyymmdd')#")>

        <!--- xcopyを呼び出す --->
        <cfexecute
            name = "#local.bat#"
            arguments = "#local.qry.from# #local.to# #local.xlist#"
            timeout = "5"
            variable = "local.tmp"/>

        <cfset local.data = local.data & local.tmp>
    </cfloop>

    <!--- logをメール送信する --->
    <cfmail from="#request.mail_from#" to="#request.mail_to#" subject="#request.subj#">
    #local.data#
    </cfmail>
</cffunction>
<!---=================================================================
cst_getData
==================================================================--->
<cffunction name="cst_getData" returnType="query" output="no">
    <cfset var local = structNew()>
    <cfset local.qry = QueryNew("from,to","varchar,varchar")>

    <!--- 絶対パス取得 --->
    <cfset local.zPath = GetDirectoryFromPath(GetCurrentTemplatePath()) & "xcopy.xml">

    <!--- xml読み込み --->
    <cffile action="read" file = "#local.zPath#" variable = "local.data" charset = "utf-8">

    <cfset local.xml = XmlParse(local.data)>

    <cfset local.data2 = xmlSearch(local.xml, "/xcopy/data")>

    <cfloop index="local.idx" array="#local.data2#">
        <cfset local.from   = local.idx.from.XmlText>
        <cfset local.to     = local.idx.to.XmlText>

        <cfset QueryAddRow(local.qry)>
        <cfset QuerySetCell(local.qry, "from",  local.from)>
        <cfset QuerySetCell(local.qry, "to",    local.to)>
    </cfloop>

    <cfreturn local.qry>
</cffunction>


xcopy.xml



d:\pgm\test001
d:\bak\test001


d:\pgm\test002
d:\bak\test002\$date$



xcopy.bat


xcopy %1 %2\ %3 /D /S /E /H /C /Y /R

xcopy-excludelist.txt


$~
~$
~WRL
.tmp
.temp
IMG00001.DAT
.bkf
.qic
.iso
.img
.mp3
.wmv
.wma
outlook.pst
Thumbs.db
pspbrwse.jbf
pagefile.sys
win386.swp
catalog.wci
.ci
.0
.1
.2
.3
.4
.5
.6
.7
.8
.9
.000
.001
.002
.003
.004
.005
.006
.007
.008
.009
.log
@done
@work
@backup

ClearDBを使ってみた

元記事はこちらです。

■Application.cfm

<cfprocessingdirective pageEncoding = "UTF-8">
<cfsetting enableCFoutputOnly="yes">

<cfapplication name="#hash( getCurrentTemplatePath() )#"
    sessionmanagement="yes"
    sessiontimeout=#CreateTimeSpan(1, 0, 0, 0)# >

<cfset request.proxyServer  = "">
<cfset request.proxyPort    = "80">

<cfset request.username = "xxx">
<cfset request.password = "yyy">
<cfset request.CLR_URL = "http://www.cleardb.com/v1/api.php?action=">

<cfparam name="application.s_id" default="">
<cfif (application.s_id eq "")>
    <cflock scope="application" timeout="60">
        <cfset application.s_id = cmn_login()>
    </cflock>
</cfif>
<!---===============================
cmn_login
    sessionIDを返す
================================--->
<cffunction name="cmn_login" access="public" returnType="string" output="no">
    <cfset var ret = "">

    <cfhttp 
        timeout="60"
        url="#request.CLR_URL#login"
        proxyServer="#request.proxyServer#"
        proxyPort="#request.proxyPort#"
        method = "post">

        <cfhttpparam type="formField" name="username" value="#request.username#">
        <cfhttpparam type="formField" name="password" value="#request.password#">
    </cfhttp>

    <cfif (cfhttp.filecontent eq "")>
        <cfreturn "">
    </cfif>

    <cfset ret = DeserializeJSON(cfhttp.filecontent)>
    <cfreturn ret.response>
</cffunction>

<!---===============================
cmn_sqlQuery
================================--->
<cffunction name="cmn_sqlQuery" access="public" returnType="struct" output="no">
    <cfargument name="s_id" type="string" required="yes">
    <cfargument name="qry"  type="string" required="yes">

    <cfhttp 
        timeout="60"
        url="#request.CLR_URL#sqlQuery"
        proxyServer="#request.proxyServer#"
        proxyPort="#request.proxyPort#"
        method = "post">
        <cfhttpparam type="formField" name="session_id" value="#arguments.s_id#">
        <cfhttpparam type="formField" name="query" value="#arguments.qry#">
    </cfhttp>

    <cfreturn DeserializeJSON(cfhttp.filecontent)>
</cffunction>

■insert.cfm

<cfset local = structNew()>

<cfloop index="local.line" file="#expandpath("data.txt")#">
    <cfif listLen(local.line, chr(9)) eq 3>
        <cfset local.asin       = ListGetAt(local.line, 1, chr(9))>
        <cfset local.title      = ListGetAt(local.line, 2, chr(9))>
        <cfset local.kin        = ListGetAt(local.line, 3, chr(9))>

        <cfsavecontent VARIABLE ="local.tmp">
        <cfoutput>
        insert into TEST_001 (
            ASIN,TITLE,KIN
        )values(
            '#local.asin#',
            '#local.title#',
             #local.kin#
        )
        </cfoutput>
        </cfsavecontent>

        <cfset local.data = cmn_sqlQuery(application.s_id, local.tmp)>
    </cfif>
</cfloop>

■view.cfm

<cfprocessingdirective pageEncoding = "UTF-8">
<cfparam name="url.order" default="asin">

<cfset local = structNew()>

<cfsavecontent VARIABLE ="local.tmp">
<cfoutput>
select *
from TEST_001
order by #url.order#
</cfoutput>
</cfsavecontent>

<cfset local.data = cmn_sqlQuery(application.s_id, local.tmp)>

<cfoutput>
<table border="1" cellspacing=0 cellpadding=0>
<cfloop index="local.idx" array="#local.data.response#">
    <tr>
        <td><a href="http://www.amazon.co.jp/exec/obidos/ASIN/#local.idx.asin#/utalab-22/ref=nosim" target="_blank">#local.idx.title#</a></td>
        <td align="right">#numberformat(local.idx.kin)#</td>
    </tr>
</cfloop>
</table>

</cfoutput>


■data.txt(タブくぎりでUTF-8のデータ)


4478015147 Facebookをビジネスに使う本 1500
4797361123 日本でいちばん社員満足度が高い会社の非常識な働き方 1470
4844329685 できるポケット au IS03をスマートに使いこなす基本&活用ワザ150 1344
4820717901 エバーノートとグーグルを使えばすべてのノート・メモ・書類が一元化できる! クラウド情報整理術 1575
4881668625 Twitter×アメブロでビジネスを加速する方法 1554

Google Baseを使ったサンプル(2)

元記事はこちらです。

■Application.cfm

<cfprocessingdirective pageEncoding = "UTF-8">
<cfsetting enableCFoutputOnly="no">

<cfapplication name="#hash( getCurrentTemplatePath() )#"
    sessionmanagement="yes"
    sessiontimeout=#CreateTimeSpan(1, 0, 0, 0)# >

<cfset request.url = thisURL()>
<cfparam name="session.GToken"      default="">
<cfparam name="session.item_type"   default="">

<cfset request.proxyServer  = "">
<cfset request.proxyPort    = "80">
<cfset request.g_key = "xxx">

<cfset request.item=structNew()>
<cfset request.item.recipe  = "レシピ">
<cfset request.item.book    = "書籍">
<cfset request.item.meishi  = "名刺">
<!---==========================================
    thisURL
        実行されたURL。ただしファイル名は削除。
        例)http://hoge.com/
===========================================--->
<cffunction name="thisURL" access="public" returnType="string" output="no">
    <cfset var local = structNew()>

    <cfset local.server_name = cgi.server_name>
    <cfif cgi.server_port neq 80>
        <cfset local.server_name = local.server_name & ":" & cgi.server_port>
    </cfif>

    <cfset local.url = "#lcase(ListFirst(cgi.server_protocol,"/"))#://#local.server_name##cgi.script_name#">
    <cfset local.url = ListDeleteAt(local.url, ListLen(local.url, "/"), "/") & "/">

    <cfreturn local.url>
</cffunction>

■index.cfm

<cfprocessingdirective pageEncoding = "UTF-8">
<cfparam name="url.p"           default="">
<cfparam name="url.token"       default="">
<cfparam name="url.page"        default="1">
<cfparam name="form.item_type"  default="#session.item_type#">

<cfset iObj = "">
<cfif (form.item_type neq "")>
    <cfset iObj = createObject("component", "i_#item_type#").init()>
    <cfset session.item_type = form.item_type>
</cfif>

<!--- session.GToken --->
<cfif (session.GToken eq "")>
    <cfif (url.token neq "")>
        <cfset session.GToken = cst_authSubSessionToken(url.token)>
    </cfif>
</cfif>

<!--- 処理 --->
<cfset content = cst_dspMain()>
<cfswitch expression = "#url.p#">
    <!--- logout --->
    <cfcase value="logout">
        <cfset session.GToken = "">
    </cfcase>

    <!--- 一覧 --->
    <cfcase value="list">
        <cfset data = iObj.getData(url.page,3)>
        <cfset content = content & iObj.dspList(data)>
    </cfcase>

    <!--- add --->
    <cfcase value="add">
        <cfset content = content & iObj.dspAddFm()>
    </cfcase>

    <!--- addEnd --->
    <cfcase value="addEnd">
        <cfset form.id = "http://www.google.com/base/feeds/items/">
        <cfset data = iObj.setXmlForm()>
        <cfset content = content & cst_actionData(form.id, data, "post")>
    </cfcase>

    <!--- upd --->
    <cfcase value="upd">
        <cfset data = iObj.setXmlForm()>
        <cfset content = content & cst_actionData(form.id, data, "put")>
    </cfcase>

    <!--- del --->
    <cfcase value="del">
        <cfset content = content & cst_actionData(form.id, "", "delete")>
    </cfcase>

    <!--- 指定処理以外 --->
    <cfdefaultcase>
    </cfdefaultcase>
</cfswitch>
<cfif (session.GToken eq "")>
    <!--- 初期画面表示 --->
    <cfset content = "Please <a href='https://www.google.com/accounts/AuthSubRequest?next=#request.url#index.cfm&scope=http%3A%2F%2Fwww.google.com%2Fbase%2Ffeeds%2F&session=1&secure=0'>click here</A> to authorize.">
</cfif>
<cfset cst_dspLayout(content)>
<!---===============================
cst_authSubSessionToken
================================--->
<cffunction name="cst_authSubSessionToken" access="public" returnType="string" output="no">
    <cfargument name="token" type="string" required="yes">

    <cfhttp method="get" url="http://www.google.com/accounts/AuthSubSessionToken"
            proxyServer ="#request.proxyServer#"
            proxyPort   ="#request.proxyPort#"
    >
        <cfhttpparam type="header" name="Content-Type" value="application/atom+xml"> 
        <cfhttpparam type="header" name="Authorization" value="AuthSub token=#arguments.token#">
        <cfhttpparam name="X-Google-Key" type="Header" value="key=#request.g_key#">
    </cfhttp>

    <cfreturn ListLast(cfhttp.filecontent, "=")>
</cffunction>
<!---===============================
cst_dspMain
================================--->
<cffunction name="cst_dspMain" access="public" returnType="string" output="no">
    <cfset var local = structNew()>

    <cfsavecontent variable = "local.ret">
    <cfoutput>
    <form name="srch" method="post">
    <select name="item_type">
    <option value=""></option>
    <cfloop item="local.itm" collection="#request.item#">
    <option value="#local.itm#" <cfif (form.item_type eq local.itm)>selected</cfif>>#request.item[local.itm]#</option>
    </cfloop>
    </select>
    <input type="button" value="一覧" onClick="js_list()">
    <input type="button" value="登録" onClick="js_add()">
    <input type="button" value="LOGOUT" onClick="js_logout()">
    </form>
    <script language="JavaScript">
    <!--
    function js_chkSrch(){
        with(document.srch){
            if(item_type.value ==""){
                alert("select item_type");
                return false;
            }
            return true;
        }
    }
    function js_list(){
        if(!js_chkSrch()) return;
        with(document.srch){
            action = "index.cfm?p=list";
            submit();
        }
    }
    function js_add(){
        if(!js_chkSrch()) return;
        with(document.srch){
            action = "index.cfm?p=add";
            submit();
        }
    }
    function js_logout(){
        with(document.srch){
            action = "index.cfm?p=logout";
            submit();
        }
    }
    //-->
    </script>
    </cfoutput>
    </cfsavecontent>

    <cfreturn local.ret>
</cffunction>
<!---===============================
cst_actionData
================================--->
<cffunction name="cst_actionData" access="public" returnType="string" output="no">
    <cfargument name="id"       type="string" required="yes">
    <cfargument name="data"     type="string" required="yes">
    <cfargument name="action"   type="string" required="yes">

    <cfhttp url="#arguments.id#" method="#arguments.action#" redirect="no"
        proxyServer ="#request.proxyServer#"
        proxyPort   ="#request.proxyPort#"
        >
        <cfhttpparam type="header" name="Content-Type" value="application/atom+xml"> 
        <cfhttpparam type="header" name="Authorization" value="AuthSub token=#session.GToken#">
        <cfhttpparam name="X-Google-Key" type="Header" value="key=#request.g_key#">
        <cfhttpparam type="Body" value="#arguments.data#">
    </cfhttp>

    <cfif (left(cfhttp.Responseheader.status_code,2) neq "20")>
        <cfreturn HTMLEditFormat(cfhttp.filecontent)>
    </cfif>

    <cfreturn "">
</cffunction>
<!---===============================
cst_dspLayout
================================--->
<cffunction name="cst_dspLayout" access="public" returnType="void" output="yes">
    <cfargument name="content" type="string" required="yes">

    <cfcontent type="text/html; charset=utf-8">
    <cfoutput>
    <!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" lang="ja" xml:lang="ja">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta http-equiv="content-style-type" content="text/css; charset=utf-8" />
        <title>test</title>
    </head>
    <body>
    #arguments.content#
    </body>
    </html>
    </cfoutput>
</cffunction>

■item.cfc

<cfcomponent>
    <cfset variables.listFld = ""><!--- id,title,item_type以外(継承したcfcでセット) --->
<!---/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/
public
/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=--->
    <!---===============================
    init
    ================================--->
    <cffunction name="init" access="public" returnType="item" output="no">
        <cfreturn this>
    </cffunction>
    <!---===============================
    getData
    ================================--->
    <cffunction name="getData" access="public" returnType="struct" output="no">
        <cfargument name="page"     type="string" required="yes">
        <cfargument name="maxRow"   type="string" default="15">

        <cfset var local    = structNew()>
        <cfset var ret      = structNew()>

        <cfset local.start = 1 + (arguments.page - 1) * arguments.maxRow>

        <!--- Initial query string setup --->
        <cfset local.queryString="http://www.google.com/base/feeds/items?start-index=#local.start#&max-results=#arguments.maxRow#&bq=[itemtype:#urlencodedformat('#request.item[form.item_type]#')#]">

        <cfhttp method="Get" url="#local.queryString#"
            proxyServer ="#request.proxyServer#"
            proxyPort   ="#request.proxyPort#"
        >
            <cfhttpparam type="header" name="Authorization" value="AuthSub token=#session.GToken#">
            <cfhttpparam name="X-Google-Key" type="Header" value="key=#request.g_key#">
        </cfhttp>

        <cfset local.data = xmlparse(cfhttp.filecontent)>

        <cfset ret.totalResults = local.data.feed["openSearch:totalResults"].XmlText>
        <cfset ret.maxPage      = Ceiling(ret.totalResults / arguments.maxRow)>
        <cfif (ret.totalResults neq 0)>
            <cfset local.listFld = "id,title,#variables.listFld#">  <!--- id,titleを追加 --->
            <cfset ret.qry = QueryNew(local.listFld)>

            <cfloop index="local.idx" from="1" to="#arrayLen(local.data.feed.entry)#">
                <cfset local.currentData = local.data.feed.entry[local.idx]>

                <cfset QueryAddRow(ret.qry)>
                <cfloop index="local.idx" list="#local.listFld#">
                    <cfif isDefined("local.currentData.#local.idx#")>
                        <cfset local.tmp = "">
                        <!--- 同じ項目が複数ある場合は、カンマ区切り --->
                        <cfloop index="local.idx2" from="1" to="#arrayLen(local.currentData[local.idx])#">
                            <cfset local.cdata = local.currentData[local.idx][local.idx2]>
                            <cfset local.tmp = ListAppend(local.tmp,local.cdata.XmlText)>
                        </cfloop>
                        <cfset QuerySetCell(ret.qry, "#local.idx#", local.tmp)>
                    </cfif>
                </cfloop>
            </cfloop>
        </cfif>

        <cfreturn ret>
    </cffunction>
    <!---===============================
    setXmlForm
        id,title,item_typeと
        その他text項目だけの分
    ================================--->
    <cffunction name="setXmlForm" access="public" returnType="string" output="no">
        <cfset var local = structNew()>
        <cfset var ret = "">

        <!---xml --->
        <cfxml variable="ret">
        <cfoutput>
        <?xml version='1.0'?>
        <entry  xmlns='http://www.w3.org/2005/Atom'
                xmlns:g='http://base.google.com/ns/1.0'>
        <title type="text">#form.title#</title>
        <g:item_type type="text">#request.item[form.item_type]#</g:item_type>
        <cfloop index="local.idx" list="#variables.listFld#">
            <g:#local.idx# type="text">#form[local.idx]#</g:#local.idx#>
        </cfloop>
        </entry>
        </cfoutput>
        </cfxml>

        <cfreturn toString(ret)>
    </cffunction>
    <!---===============================
    dspList
    ================================--->
    <cffunction name="dspList" access="public" returnType="string" output="no">
        <cfargument name="data" type="struct" required="yes">

        <cfset var local    = structNew()>
        <cfset var qry      = "">
        <cfset var ret      = "">

        <cfset local.listFld = "title,#variables.listFld#"> <!--- titleを追加 --->

        <cfsavecontent variable = "ret">
        <cfoutput>
        <cfif (arguments.data.totalResults eq 0)>
        no data
        <cfelse>
            <cfset qry = arguments.data.qry>

            <table>
                <tr>
                    <cfloop index="local.idx" list="#local.listFld#">
                        <td>#local.idx#</td>
                    </cfloop>
                </tr>

                <cfloop query="qry">
                    <form name="frm_#qry.currentRow#" method="post">
                    <input type="hidden" name="id" value="#qry.id#">
                    <input type="hidden" name="item_type" value="#form.item_type#">

                    <tr>
                        <cfloop index="local.idx" list="#local.listFld#">
                            <cfset local.tmp = "">
                            <cfif isDefined("qry.#local.idx#")>
                                <cfset local.tmp = qry[local.idx]>
                            </cfif>
                            <td><input type="text" name="#local.idx#" value="#local.tmp#"></td>
                        </cfloop>
                        <td><input type="button" value="upd" onClick="js_upd(#qry.currentRow#)"></td>
                        <td><input type="button" value="del" onClick="js_del(#qry.currentRow#)"></td>
                    </tr>
                    </form>
                </cfloop>
            </table>
            <cfif (url.page gt 1)>
                <cfset local.page = url.page - 1>
                <a href="index.cfm?p=list&page=#local.page#">prev</a>&nbsp;
            </cfif>
            <cfif (url.page lt arguments.data.maxPage)>
                <cfset local.page = url.page + 1>
                <a href="index.cfm?p=list&page=#local.page#">next</a>
            </cfif>
        </cfif>

        <script language="JavaScript">
        <!--
        function js_upd(pID){
            with(eval("document.frm_"+pID)){
                action = "index.cfm?p=upd";
                submit();
            }
        }
        function js_del(pID){
            with(eval("document.frm_"+pID)){
                action = "index.cfm?p=del";
                submit();
            }
        }
        //-->
        </script>

        </cfoutput>
        </cfsavecontent>

        <cfreturn ret>
    </cffunction>
    <!---===============================
    dspAddFm
    ================================--->
    <cffunction name="dspAddFm" access="public" returnType="string" output="no">
        <cfset var local = structNew()>
        <cfset var ret = "">

        <cfset local.listFld = "title,#variables.listFld#"> <!--- titleを追加 --->

        <cfsavecontent variable = "ret">
        <cfoutput>
        <form name="frm" action="index.cfm?p=addEnd" method="post">
        <input type="hidden" name="item_type" value="#form.item_type#">
        <table>
            <cfloop index="local.idx" list="#local.listFld#">
                <tr>
                    <td>#local.idx#</td>
                    <td><input type="text" name="#local.idx#"></td>
                </tr>
            </cfloop>
        </table>
        <input type="button" value="add" onClick="js_addEnd()">
        </form>

        <script language="JavaScript">
        <!--
        function js_addEnd(){
            with(document.frm){
                <cfloop index="local.idx" list="#local.listFld#">
                    if(#local.idx#.value==""){
                        alert("please input #local.idx#");
                        return;
                    }
                </cfloop>
                submit();
            }
        }
        //-->
        </script>
        </cfoutput>
        </cfsavecontent>

        <cfreturn ret>
    </cffunction>
<!---/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/
private
/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=--->
</cfcomponent>

■i_book.cfc

<cfcomponent extends="item">
    <cfset variables.listFld = "asin,author,price"><!--- id,title,item_type以外 --->
</cfcomponent>

■i_meishi.cfc

<cfcomponent extends="item">
    <cfset variables.listFld = "sei,sei_yomi,mei,mei_yomi,company,tel,fax"><!--- id,title,item_type以外 --->
</cfcomponent>

■i_recipe.cfc

<cfcomponent extends="item">
    <cfprocessingdirective pageEncoding = "UTF-8">  <!--- ソース内に画面など書く場合、component内ではここで指定(cfcomponentの上ではエラーとなる) --->
    <cfset variables.listFld = "content,cuisine,cooking_time,main_ingredient"><!--- id,title,item_type以外 --->
<!---/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/
public
/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=--->
    <!---===============================
    setXmlForm
    ================================--->
    <cffunction name="setXmlForm" access="public" returnType="string" output="no">
        <cfset var local = structNew()>
        <cfset var ret = "">

        <!---xml --->
        <cfxml variable="ret">
        <cfoutput>
        <?xml version='1.0'?>
        <entry  xmlns='http://www.w3.org/2005/Atom'
                xmlns:g='http://base.google.com/ns/1.0'>
        <title type="text">#form.title#</title>
        <g:item_type type="text">#request.item[form.item_type]#</g:item_type>
        <content type="xhtml">#form.content#</content>
        <g:cuisine type="text">#form.cuisine#</g:cuisine>
        <g:cooking_time type="intUnit">#form.cooking_time#</g:cooking_time>

        <!--- 複数あり --->
        <cfloop index="local.idx" list="#form.main_ingredient#">
            <g:main_ingredient type="text">#local.idx#</g:main_ingredient>
        </cfloop>
        </entry>
        </cfoutput>
        </cfxml>

        <cfreturn toString(ret)>
    </cffunction>

    <!---===============================
    dspAddFm
    ================================--->
    <cffunction name="dspAddFm" access="public" returnType="string" output="no">
        <cfset var local = structNew()>
        <cfset var ret = "">

        <cfset local.listFld = "title,#variables.listFld#"> <!--- titleを追加 --->

        <cfsavecontent variable = "ret">
        <cfoutput>
        <form name="frm" action="index.cfm?p=addEnd" method="post">
        <input type="hidden" name="item_type" value="#form.item_type#">
        <table>
            <tr>
                <td>title</td>
                <td><input type="text" name="title"></td>
                <td>タイトル</td>
            </tr>
            <tr>
                <td>content</td>
                <td valign="top"><textarea cols="30" rows="5" name="content"></textarea></td>
                <td>コンテンツ(htmlタグを使う)</td>
            </tr>
            <tr>
                <td>cuisine</td>
                <td><input type="text" name="cuisine"></td>
            </tr>
            <tr>
                <td>cooking_time</td>
                <td><input type="text" name="cooking_time"></td>
                <td>料理時間(半角数字)</td>
            </tr>
            <tr>
                <td>main_ingredient</td>
                <td><input type="text" name="main_ingredient"></td>
                <td>メインとなる材料(複数の場合半角カンマ区切り)</td>
            </tr>
        </table>
        <input type="button" value="add" onClick="js_addEnd()">
        </form>

        <script language="JavaScript">
        <!--
        function js_addEnd(){
            with(document.frm){
                <cfloop index="local.idx" list="#local.listFld#">
                    if(#local.idx#.value==""){
                        alert("please input #local.idx#");
                        return;
                    }
                </cfloop>
                submit();
            }
        }
        //-->
        </script>
        </cfoutput>
        </cfsavecontent>

        <cfreturn ret>
    </cffunction>
</cfcomponent>

Google Baseを使ったサンプル(1)

元記事はこちらです。

■Application.cfm

<cfprocessingdirective pageEncoding = "UTF-8">
<cfsetting enableCFoutputOnly="no">

<cfapplication name="#hash( getCurrentTemplatePath() )#"
    sessionmanagement="yes"
    sessiontimeout=#CreateTimeSpan(1, 0, 0, 0)# >

<cfset request.url = thisURL()>
<cfparam name="session.GToken" default="">

<cfset request.proxyServer  = "">
<cfset request.proxyPort    = "80">
<cfset request.g_key = "xxx">
<!---==========================================
    thisURL
        実行されたURL。ただしファイル名は削除。
        例)http://hoge.com/
===========================================--->
<cffunction name="thisURL" access="public" returnType="string" output="no">
    <cfset var local = structNew()>

    <cfset local.server_name = cgi.server_name>
    <cfif cgi.server_port neq 80>
        <cfset local.server_name = local.server_name & ":" & cgi.server_port>
    </cfif>

    <cfset local.url = "#lcase(ListFirst(cgi.server_protocol,"/"))#://#local.server_name##cgi.script_name#">
    <cfset local.url = ListDeleteAt(local.url, ListLen(local.url, "/"), "/") & "/">

    <cfreturn local.url>
</cffunction>

■index.cfm

<cfprocessingdirective pageEncoding = "UTF-8">
<cfparam name="url.p"       default="">
<cfparam name="url.token"   default="">
<cfparam name="url.page"    default="0">

<!--- session.GToken --->
<cfif (session.GToken eq "")>
    <cfif (url.token neq "")>
        <cfset session.GToken = cst_authSubSessionToken(url.token)>
    </cfif>
<cfelse>
    <cfif (url.p eq "init")>
        <cfset session.GToken = "">
    </cfif>
</cfif>

<!--- 処理 --->
<cfset content = "<a href='index.cfm?p=list'>一覧</a> <a href='index.cfm?p=add'>登録</a><br><br>">
<cfswitch expression = "#url.p#">
    <!--- 一覧 --->
    <cfcase value="list">
        <cfset data = cst_getData(url.page)>
        <cfset content = content & cst_dspList(data)>
    </cfcase>

    <!--- add --->
    <cfcase value="add">
        <cfset content = content & cst_dspAddFm()>
    </cfcase>

    <!--- addEnd --->
    <cfcase value="addEnd">
        <cfset form.id = "http://www.google.com/base/feeds/items/">
        <cfset data = cst_setXmlForm()>
        <cfset content = content & cst_actionData(form.id, data, "post")>
    </cfcase>

    <!--- upd --->
    <cfcase value="upd">
        <cfset data = cst_setXmlForm()>
        <cfset content = content & cst_actionData(form.id, data, "put")>
    </cfcase>

    <!--- del --->
    <cfcase value="del">
        <cfset content = content & cst_actionData(form.id, "", "delete")>
    </cfcase>

    <!--- 指定処理以外 --->
    <cfdefaultcase>
        <cfif (session.GToken eq "")>
            <!--- 初期画面表示 --->
            <cfset content = "Please <a href='https://www.google.com/accounts/AuthSubRequest?next=#request.url#index.cfm&scope=http%3A%2F%2Fwww.google.com%2Fbase%2Ffeeds%2F&session=1&secure=0'>click here</A> to authorize.">
        </cfif>
    </cfdefaultcase>
</cfswitch>
<cfoutput>#content#</cfoutput>
<!---===============================
cst_authSubSessionToken
================================--->
<cffunction name="cst_authSubSessionToken" access="public" returnType="string" output="no">
    <cfargument name="token" type="string" required="yes">

    <cfhttp method="get" url="http://www.google.com/accounts/AuthSubSessionToken"
            proxyServer ="#request.proxyServer#"
            proxyPort   ="#request.proxyPort#"
    >
        <cfhttpparam type="header" name="Content-Type" value="application/atom+xml"> 
        <cfhttpparam type="header" name="Authorization" value="AuthSub token=#arguments.token#">
        <cfhttpparam name="X-Google-Key" type="Header" value="key=#request.g_key#">
    </cfhttp>

    <cfreturn ListLast(cfhttp.filecontent, "=")>
</cffunction>
<!---===============================
cst_getData
================================--->
<cffunction name="cst_getData" access="public" returnType="struct" output="no">
    <cfargument name="page"     type="string" required="yes">
    <cfargument name="maxRow"   type="string" default="15">

    <cfset var local    = structNew()>
    <cfset var ret      = structNew()>

    <cfset local.start = 1 + arguments.page * arguments.maxRow>

    <!--- Initial query string setup --->
    <cfset local.queryString="http://www.google.com/base/feeds/items?start-index=#local.start#&max-results=#arguments.maxRow#">

    <cfhttp method="Get" url="#local.queryString#"
        proxyServer ="#request.proxyServer#"
        proxyPort   ="#request.proxyPort#"
    >
        <cfhttpparam type="header" name="Authorization" value="AuthSub token=#session.GToken#">
        <cfhttpparam name="X-Google-Key" type="Header" value="key=#request.g_key#">
    </cfhttp>

    <cfset local.data = xmlparse(cfhttp.filecontent)>

    <cfset ret.totalResults = local.data.feed["openSearch:totalResults"].XmlText>
    <cfif (ret.totalResults neq 0)>
        <cfset ret.qry = QueryNew("id,title,item_type","varchar,varchar,varchar")>

        <cfloop index="local.idx" from="1" to="#arrayLen(local.data.feed.entry)#">
            <cfset local.currentData = local.data.feed.entry[local.idx]>

            <cfset QueryAddRow(ret.qry)>
            <cfset QuerySetCell(ret.qry, "id",          local.currentData.id.XmlText)>
            <cfset QuerySetCell(ret.qry, "title",       local.currentData.title.XmlText)>
            <cfset QuerySetCell(ret.qry, "item_type",   local.currentData.item_type.XmlText)>
        </cfloop>
    </cfif>

    <cfreturn ret>
</cffunction>
<!---===============================
cst_dspList
================================--->
<cffunction name="cst_dspList" access="public" returnType="string" output="no">
    <cfargument name="data" type="struct" required="yes">

    <cfset var local    = structNew()>
    <cfset var qry      = "">
    <cfset var ret      = "">

    <cfsavecontent variable = "ret">
    <cfoutput>
    <cfif (arguments.data.totalResults eq 0)>
    no data
    <cfelse>
        <cfset qry = arguments.data.qry>

        <table>
            <tr>
                <td>title</td>
                <td>item_type</td>
            </tr>

            <cfloop query="qry">
                <form name="frm_#qry.currentRow#" method="post">
                <input type="hidden" name="id" value="#qry.id#">

                <tr>
                    <td><input type="text" name="title"     value="#qry.title#"></td>
                    <td>#qry.item_type#</td>
                    <input type="hidden" name="item_type"   value="#qry.item_type#">
                    <td><input type="button" value="upd" onClick="js_upd(#qry.currentRow#)"></td>
                    <td><input type="button" value="del" onClick="js_del(#qry.currentRow#)"></td>
                </tr>
                </form>
            </cfloop>
        </table>
    </cfif>

    <script language="JavaScript">
    <!--
    function js_upd(pID){
        with(eval("document.frm_"+pID)){
            action = "index.cfm?p=upd";
            submit();
        }
    }
    function js_del(pID){
        with(eval("document.frm_"+pID)){
            action = "index.cfm?p=del";
            submit();
        }
    }
    //-->
    </script>

    </cfoutput>
    </cfsavecontent>

    <cfreturn ret>
</cffunction>
<!---===============================
cst_dspAddFm
================================--->
<cffunction name="cst_dspAddFm" access="public" returnType="string" output="no">
    <cfset var ret = "">

    <cfsavecontent variable = "ret">
    <cfoutput>
    <form name="frm" action="index.cfm?p=addEnd" method="post">
    <table>
    <tr>
        <td>title</td>
        <td>item_type</td>
    </tr>
    <tr>
        <td><input type="text" name="title"></td>
        <td><input type="text" name="item_type"></td>
    </tr>
    </table>
    <input type="button" value="add" onClick="js_add()">
    </form>

    <script language="JavaScript">
    <!--
    function js_add(){
        with(document.frm){
            if((title.value=="")||(item_type=="")){
                alert("please input all data");
                return;
            }
            submit();
        }
    }
    //-->
    </script>

    </cfoutput>
    </cfsavecontent>

    <cfreturn ret>
</cffunction>
<!---===============================
cst_setXmlForm
================================--->
<cffunction name="cst_setXmlForm" access="public" returnType="string" output="no">
    <cfset var ret = "">

    <!---xml --->
    <cfxml variable="ret">
    <cfoutput>
    <?xml version='1.0'?>
    <entry  xmlns='http://www.w3.org/2005/Atom'
            xmlns:g='http://base.google.com/ns/1.0'>
    <title type="text">#form.title#</title>
    <g:item_type type="text">#form.item_type#</g:item_type>
    </entry>
    </cfoutput>
    </cfxml>

    <cfreturn toString(ret)>
</cffunction>
<!---===============================
cst_actionData
================================--->
<cffunction name="cst_actionData" access="public" returnType="string" output="no">
    <cfargument name="id"       type="string" required="yes">
    <cfargument name="data"     type="string" required="yes">
    <cfargument name="action"   type="string" required="yes">

    <cfhttp url="#arguments.id#" method="#arguments.action#" redirect="no"
        proxyServer ="#request.proxyServer#"
        proxyPort   ="#request.proxyPort#"
        >
        <cfhttpparam type="header" name="Content-Type" value="application/atom+xml"> 
        <cfhttpparam type="header" name="Authorization" value="AuthSub token=#session.GToken#">
        <cfhttpparam name="X-Google-Key" type="Header" value="key=#request.g_key#">
        <cfhttpparam type="Body" value="#arguments.data#">
    </cfhttp>

    <cfif (left(cfhttp.Responseheader.status_code,2) neq "20")>
        <cfreturn HTMLEditFormat(cfhttp.filecontent)>
    </cfif>

    <cfreturn "">
</cffunction>

ColdFusionを使ったGoogle Baseのサンプルを自分流に改造する

元記事はこちらです。

■Application.cfm

<cfprocessingdirective pageEncoding = "UTF-8">
<cfsetting enableCFoutputOnly="no">

<cfapplication name="#hash( getCurrentTemplatePath() )#"
    sessionmanagement="yes"
    sessiontimeout=#CreateTimeSpan(1, 0, 0, 0)# >

<cfset request.url = thisURL()>

<cfset request.proxyServer  = "">
<cfset request.proxyPort    = "80">
<cfset request.g_key = "xxx">
<!---==========================================
    thisURL
        実行されたURL。ただしファイル名は削除。
        例)http://hoge.com/
===========================================--->
<cffunction name="thisURL" access="public" returnType="string" output="no">
    <cfset var local = structNew()>

    <cfset local.server_name = cgi.server_name>
    <cfif cgi.server_port neq 80>
        <cfset local.server_name = local.server_name & ":" & cgi.server_port>
    </cfif>

    <cfset local.url = "#lcase(ListFirst(cgi.server_protocol,"/"))#://#local.server_name##cgi.script_name#">
    <cfset local.url = ListDeleteAt(local.url, ListLen(local.url, "/"), "/") & "/">

    <cfreturn local.url>
</cffunction>

■index.cfm

<cfprocessingdirective pageEncoding = "UTF-8">
<cfparam name="url.p"       default="">
<cfparam name="url.token"   default="">
<cfparam name="url.page"    default="0">

<!--- session.gbase --->
<cfif ((not isDefined("session.gbase")) or (url.p eq "0"))>
    <cfset session.gbase = CreateObject("component", "gbase").init(
                                request.proxyServer,
                                request.proxyPort,
                                request.g_key)>
</cfif>

<!--- token set --->
<cfif (session.gbase.getGToken() eq "")>
    <cfif (url.token neq "")>
        <cfset session.gbase.setGToken(url.token)>

        <cfset cfhttp = session.gbase.AuthSubSessionToken()>
        <cfset token = ListLast(cfhttp.filecontent, "=")>
        <cfset session.gbase.setGToken(token)>
    </cfif>
</cfif>

<!--- 処理 --->
<cfset content = "">
<cfswitch expression = "#url.p#">
    <!--- 検索 --->
    <cfcase value="srch">
        <cfset qStr = cst_chkSrch(url.page)>
        <cfset cfhttp = session.gbase.gSrch(qStr)>
        <cfset resultsList = xmlparse(cfhttp.filecontent)>

        <!--- 検索画面表示 --->
        <cfset content = dsp_srch()>
        <!--- 一覧表示 --->
        <cfset content = content & dsp_list(resultsList)>
    </cfcase>

    <!--- カレンダーにセット --->
    <cfcase value="addToCal">
        <cfset data = cst_makeDataAddToCal()>
        <cfset cfhttp = session.gbase.sendTheEntryToGoogleCalendar(data)>

        <cfif ((left(cfhttp.statusCode,3) EQ "302"))>   <!--- If Google Calendar gives us a redirect, redirect --->
         <cfset redir=#cfhttp.responseHeader["location"]#>                  <!--- Get redirect location --->
         <cfhttp url="#redir#" method="post" redirect="no"
                proxyServer ="#request.proxyServer#"
                proxyPort   ="#request.proxyPort#"

         >                  <!--- Send the old entry to the new location --->
              <cfhttpparam type="header" name="Content-Type" value="application/atom+xml"> 
              <cfhttpparam type="header" name="Authorization" value="AuthSub token=#session.gbase.getGToken()#">
              <cfhttpparam type="Body" value="#data#">
         </cfhttp>

         <center>
         <font size=+2 color="##4466DD" face="verdana"><b>CalendarMeIn</b></font><br>
        Google Base/Google Calendar Event Scheduler <font color="##787878">BETA</font>
         <br><br><br><br>The event "#title#" has been added to your calendar!<br><br>
         <a href="http://calendar.google.com">View Calendar</a> <br> <a href="eventscheduler.cfm?token=#token#&search=1">Back to Event Search</a>
        </center><br><br>
                                                                            <!--- If Calendar returns a "500", "404" or "400" code, we have a problem... --->
        <cfelseif ((left(cfhttp.statusCode,3) EQ "500") or (left(cfhttp.statusCode,3) EQ "400") or (left(cfhttp.statusCode,3) EQ "404"))>
         <b><font size=+1>Unable to add event to Google Calendar. Please make sure you have a Google Calendar account set up and that you are logged into it. Please visit <a href="http://calendar.google.com" target="_blank">calendar.google.com</a> to sign up, then refresh this page to try again.</font></b>
        <cfelse>
        Error - status:<br>
        #cfhttp.header# 
        </cfif>

    </cfcase>

    <!--- 指定処理以外 --->
    <cfdefaultcase>
        <cfif (session.gbase.getGToken() eq "")>
            <!--- 初期画面表示 --->
            <cfset content = dsp_init()>
        <cfelse>
            <!--- 検索画面表示 --->
            <cfset content = dsp_srch()>
        </cfif>
    </cfdefaultcase>
</cfswitch>
<cfoutput>#content#</cfoutput>
<!---===============================
dsp_init
    初期画面
================================--->
<cffunction name="dsp_init" access="public" returnType="string" output="no">
    <cfset var ret = "">

    <cfsavecontent variable = "ret">
    <cfoutput>
    Please <a href="https://www.google.com/accounts/AuthSubRequest?next=#request.url#index.cfm&p=aa&scope=http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2F&session=1&secure=0">click here</A> to authorize.<br>
    </cfoutput>
    </cfsavecontent>

    <cfreturn ret>
</cffunction>
<!---===============================
dsp_srch
================================--->
<cffunction name="dsp_srch" access="public" returnType="string" output="no">
    <cfset var ret = "">

    <cfsavecontent variable = "ret">
    <cfoutput>
    <FORM name="gbsearch" action="index.cfm?p=srch" method="post">  <!--- Submits the query to this same form, getting the Base results --->
    <table border="0" cellspacing="6" cellPadding="0" align=center>
    <tr>
        <td rowspan="3" valign="top" width=200>&nbsp;</td>
        <td rowspan="3">&nbsp;&nbsp;</td>
        <td style="font-size:80%">
            Event Type: <br><select name="eventType">
             <option value="">All</option>
             <option value="Art ">- Art</option>
             <option value="Class OR Lesson OR Lecture">- Classes and Lectures</option>
             <option value="Comedy OR Stand-up OR Standup ">- Comedy</option>
             <option value="Food OR Cuisine ">- Food</option>
             <option value="Festival OR Fair ">- Festivals and Fairs</option>
             <option value="Music OR Concert ">- Music</option>
             <option value="Reading OR Signing ">- Readings and Signings</option>
             <option value="Shopping OR Sale OR Market ">- Shopping</option>
            </select> or other: <INPUT name="textQuery" type="text" size="20" > &nbsp; &nbsp; <button type="submit" >Search for events</BUTTON>
        </td>
    </tr>

    <tr>
        <td style="font-size:80%">
        Location:<br> <select name="miles">
         <option value="5">Within 5 miles</option>
         <option value="10">Within 10 miles</option>
         <option value="25">Within 25 miles</option>
         <option value="50">Within 50 miles</option>
        </select> of &nbsp; <input name="location" type="text" size="20" ><font color="##222222"> (leave blank for anywhere)</font>
        </td>
    </tr>   
        
    <tr>
        <td style="font-size:80%">
       
       When:<br><select name="dateMonth">
        <option value="00">Any</option>
        <option value="01">January</option>
        <option value="02">February</option>
        <option value="03">March</option>
        <option value="04">April</option>
        <option value="05">May</option>
        <option value="06">June</option>
        <option value="07">July</option>
        <option value="08">August</option>
        <option value="09">September</option>
        <option value="10">October</option>
        <option value="11">November</option>
        <option value="12">December</option>
       </select>
      
       <select name="dateDay">
        <option value="00">Any</option>
        <option value="01">1</option>
        <option value="02">2</option>
        <option value="03">3</option>
        <option value="04">4</option>
        <option value="05">5</option>
        <option value="06">6</option>
        <option value="07">7</option>
        <option value="08">8</option>
        <option value="09">9</option>
        <option value="10">10</option>
        <option value="11">11</option>
        <option value="12">12</option>
        <option value="13">13</option>
        <option value="14">14</option>
        <option value="15">15</option>
        <option value="16">16</option>
        <option value="17">17</option>
        <option value="18">18</option>
        <option value="19">19</option>
        <option value="20">20</option>
        <option value="21">21</option>
        <option value="22">22</option>
        <option value="23">23</option>
        <option value="24">24</option>
        <option value="25">25</option>
        <option value="26">26</option>
        <option value="27">27</option>
        <option value="28">28</option>
        <option value="29">29</option>
        <option value="30">30</option>
        <option value="31">31</option>
       </select>
       
       <select name="dateYr">
        <option value="2006">2006</option>   
        <option value="2007">2007</option>
        <option value="2008">2008</option>
        <option value="2009">2009</option>
        <option value="2010">2010</option>
       </select>
      
    </td>
    </tr>
    </table>
    </FORM>
  
    </cfoutput>
    </cfsavecontent>

    <cfreturn ret>
</cffunction>
<!---===============================
dsp_list
================================--->
<cffunction name="dsp_list" access="public" returnType="string" output="no">
    <cfargument name="xmlData" type="xml" required="yes">

    <cfset var ret = "">
    <cfset var resultsList = arguments.xmlData>

    <cfsavecontent variable = "ret">
    <cfoutput>
    <cfif isdefined("resultsList.feed.entry")>                                          <!--- If there are results, display them --->
        <div style='padding:0px; width: 72%;background-color:##555555;'>

        <cfloop index="loopIndex" from="1" to="#arraylen(resultsList.feed.entry)#">
            <cfset currentResult = resultsList.feed.entry[loopIndex]>                           <!--- Store the current product in a temporary variable --->

            <cfset addEventURL="#request.url#?p=addtocal&title=#urlencodedformat(currentResult.title.xmltext)#">

            <cfif isdefined("currentResult.location")>                                      <!--- If there's a location, add it to the query --->
                <cfset addEventURL=(addEventURL & "&where=#urlencodedformat(currentResult.location.xmltext)#")>
            </cfif>

            <cfif isdefined("currentResult.event_date_range")>                                  <!--- If there's a date, add it to the query and format the dates for display --->
                <cfset addEventURL=(addEventURL & "&when=#urlencodedformat(currentResult.event_date_range.xmltext)#")>
                <cfset startdate=trim(mid(currentResult.event_date_range.xmltext, 1, find(" ", currentResult.event_date_range.xmltext)))>
                <cfset enddate=trim(mid(currentResult.event_date_range.xmltext, find(" ", currentResult.event_date_range.xmltext) + 1, len(currentResult.event_date_range.xmltext)))>
                <cfif startdate EQ "">
                    <cfset startdate = enddate>
                </cfif>
            </cfif>

            <cfif isdefined("currentResult.link")>                                              <!--- If there's a link, add it to the query --->
                <cfset addEventURL=(addEventURL & "&link=#urlencodedformat(currentResult.link.xmlattributes.href)#")>
            </cfif>

            <div style='padding:3px;border:1px solid darkblue;background-color:##AABBFF;text-align:left;position: relative;top: -5px;left: -3px;'><b> &nbsp; #currentResult.title.xmltext#</b></div>
            <div style='background-color:##F1F1FF;border:1px solid gray;position: relative;top:-1px;left:-1px;'>
            <table width="98%" cellpadding="2" cellspacing="2"><tr><td><font size=-1>

            <b>Link:</b> <a href="#currentResult.link.xmlattributes.href#">#currentResult.link.xmlattributes.href#</a><br>

            <cfif isdefined("currentResult.location")>                                          <!--- If there's a location, display it --->
                <b>Where:</b> <a href="http://maps.google.com/maps?f=q&hl=en&q=#urlencodedformat(currentResult.location.xmltext)#">#currentResult.location.xmltext#</a><br>
            </cfif>  

            <cfif isdefined("currentResult.event_date_range")>                                  <!--- If there are dates, format and display them --->
                <cfif startdate NEQ enddate>
                    <cfset startyear=mid(startdate, 1, 4)>
                    <cfset startmonth=mid(startdate, 6, 2)>
                    <cfset startday=mid(startdate, 9, 2)>
                    <cfset starttime=mid(startdate, 12,5)>
                    <cfset endyear=mid(enddate, 1, 4)>
                    <cfset endmonth=mid(enddate, 6, 2)>
                    <cfset endday=mid(enddate, 9, 2)>
                    <cfset endtime=mid(enddate, 12,5)>
                    <b>When:</b> #startmonth#/#startday#/#startyear# #starttime# - #endmonth#/#endday#/#endyear# #endtime#<br><br>
                <cfelse>
                    <cfset startyear=mid(startdate, 1, 4)>
                    <cfset startmonth=mid(startdate, 6, 2)>
                    <cfset startday=mid(startdate, 9, 2)>
                    <b>When:</b> #startmonth#/#startday#/#startyear#<br><br>
                </cfif>
            </cfif>

            <cfif #currentResult.content.xmltext# EQ "">                                        <!--- If there is a value in the description, display it --->
                <b>Description:</b> (no description given)
            <cfelse>
                <b>Description:</b> #currentResult.content.xmltext#
            </cfif>

            </font><br><br></td><td rowspan="2" width="5%">
            <center><a href="#addEventURL#"><img src="calendar.jpeg" alt="Add to calendar" border="0" align="center"><br><font size="-2" face="verdana">Add To<br>Calendar</font></a></center>
            </td></tr></table>
            </div>
        </cfloop>
        </div>
    </cfif>
    </cfoutput>
    </cfsavecontent>

    <cfreturn ret>
</cffunction>
<!---===============================
cst_chkSrch
================================--->
<cffunction name="cst_chkSrch" access="public" returnType="string" output="no">
    <cfargument name="page"     type="string" required="yes">
    <cfargument name="maxRow"   type="string" default="15">

    <cfset var local = structNew()>

    <cfset local.start = 1 + arguments.page * arguments.maxRow>

    <!--- Initial query string setup --->
    <cfset local.queryString="http://www.google.com/base/feeds/snippets?start-index=#local.start#&max-results=#arguments.maxRow#&bq=">

    <cfif isdefined("form.location")>                                               <!--- If this field is present, then we have an actual search query --->
        <cfif isdefined("form.textQuery")>                                                      <!--- If the user wants to refine by text, add it --->
            <cfset local.querystring = local.queryString & form.eventType & form.textQuery & " ">
        </cfif>

        <cfset local.queryString = local.queryString & "[item type:events and activities] ">                <!--- Restrict items to events --->

        <cfif form.location NEQ "">                                                             <!--- If location actually has a value, add it --->
            <cfset local.queryString = local.queryString & "%5Blocation%3A%40%22#form.location#%22%2B#miles#mi%5D">
        </cfif>
                                                                                            <!--- Only return items AFTER today --->
        <cfset local.queryString = local.queryString & "[event_date_range > " & dateformat(now(), "YYYY-MM-DD") & "] ">

        <cfif (form.dateDay EQ "00") or (form.dateMonth EQ "00") or (form.dateYr EQ "0000")>                <!--- If user specified a date range, add that too --->
            <cfif (form.dateDay EQ "00") and (form.dateMonth EQ "00") and (form.dateYr EQ "0000")>
            No date specified!<br>
            <cfelseif (form.dateDay EQ "00") and (form.dateMonth EQ "00")>
                <cfset local.queryString = local.queryString & "[event_date_range: #form.dateYr#Z]">
            <cfelseif (form.dateDay EQ "00")>
                <cfset local.queryString = local.queryString & "[event_date_range: #form.dateYr#-#form.dateMonth#Z]">
            </cfif>
        <cfelse>
            <cfset local.queryString = local.queryString & "[event_date_range: #form.dateYr#-#form.dateMonth#-#form.dateDay#Z]">
        </cfif>
    </cfif>

    <cfreturn local.queryString>
</cffunction>
<!---===============================
cst_makeDataAddToCal
================================--->
<cffunction name="cst_makeDataAddToCal" access="public" returnType="string" output="no">

    <cfif isdefined("when")>                                            <!--- If there's a date... --->
        <cfset startdate=trim(mid(when, 1, find(" ", when)))>               <!--- Start date starts at the beginning, ends at the first space --->
        <cfset enddate=trim(mid(when, find(" ", when) + 1, len(when)))> <!--- End date is the rest of it --->
        <cfif startdate EQ "">                                          <!--- If the event JUST has a start date, startDate will be empty right now --->
            <cfif mid(enddate, 12, 8) EQ "00:00:00">                            <!--- If enddate has no time specified, chop it off --->
                <cfset enddate = mid(enddate, 1, 10)>
            </cfif>
            <cfset startdate = enddate>
        </cfif>
    </cfif>
                                                    <!--- Set up the initial Calendar XML entry --->
    <cfset xmlentry="<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'> <category scheme='http://schemas.google.com/g/2005##kind' term='http://schemas.google.com/g/2005##event'></category> <title type='text'>#urldecode(title)#</title>">

    <cfif isdefined("link")>                                            <!--- If there's a link, add it to the entry --->
        <cfset xmlentry = xmlentry & "<content type='text'><![CDATA[#urldecode(link)#]]></content>">
    </cfif>

    <cfif isdefined("where")>                                           <!--- If there's a location, add it to the entry --->
        <cfset xmlentry = xmlentry & "<gd:where valueString='#urldecode(where)#'></gd:where>">
    </cfif>

    <cfif isdefined("when")>                                            <!--- If there's a time, add it to the entry --->
        <cfset xmlentry = xmlentry & "<gd:when startTime='#startdate#'">
        <cfif startDate NEQ endDate>                                    
            <cfset xmlentry = xmlentry & " endTime='#enddate#'">
        </cfif>
        <cfset xmlentry = xmlentry & "></gd:when>">
    </cfif>

    <cfset xmlentry = xmlentry & "</entry>">

    <cfreturn xmlentry>
</cffunction>

■gbase.cfc

<!---/////////////////////////////////////////////////////////////////
gbase
//////////////////////////////////////////////////////////////////--->
<cfcomponent>
    <cfset variables.proxyServer    = "">
    <cfset variables.proxyPort      = "">
    <cfset variables.g_key          = "">
    <cfset variables.token          = "">
<!---/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/
public
/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=/=--->
    <!---===============================
    init
    ================================--->
    <cffunction name="init" access="public" returnType="gbase" output="no">
        <cfargument name="proxyServer"  type="string" required="yes">
        <cfargument name="proxyPort"    type="string" required="yes">
        <cfargument name="g_key"        type="string" required="yes">

        <cfset variables.proxyServer    = arguments.proxyServer>
        <cfset variables.proxyPort      = arguments.proxyPort>
        <cfset variables.g_key          = arguments.g_key>

        <cfreturn this>
    </cffunction>

    <!---===============================
    AuthSubSessionToken
    ================================--->
    <cffunction name="AuthSubSessionToken" access="public" returnType="any" output="no">

        <cfhttp method="get" url="http://www.google.com/accounts/AuthSubSessionToken"
                proxyServer ="#variables.proxyServer#"
                proxyPort   ="#variables.proxyPort#"
        >
            <cfhttpparam type="header" name="Content-Type" value="application/atom+xml"> 
            <cfhttpparam type="header" name="Authorization" value="AuthSub token=#variables.token#">
            <cfhttpparam name="X-Google-Key" type="Header" value="key=#variables.g_key#">
        </cfhttp>
    
        <cfreturn cfhttp>
    </cffunction>

    <!---===============================
    sendTheEntryToGoogleCalendar
        Send the entry to Google Calendar
    ================================--->
    <cffunction name="sendTheEntryToGoogleCalendar" access="public" returnType="any" output="no">
        <cfargument name="xmlData"  type="string" required="yes">

        <cfhttp url="http://www.google.com/calendar/feeds/default/private/full" method="post" redirect="no"
            proxyServer ="#variables.proxyServer#"
            proxyPort   ="#variables.proxyPort#"
            >
            <cfhttpparam type="header" name="Content-Type" value="application/atom+xml"> 
            <cfhttpparam type="header" name="Authorization" value="AuthSub token=#variables.token#">
            <cfhttpparam type="Body" value="#arguments.xmlData#">
        </cfhttp>

        <cfreturn cfhttp>
    </cffunction>

    <!---===============================
    gSrch
    ================================--->
    <cffunction name="gSrch" access="public" returnType="any" output="no">
        <cfargument name="qStr" type="string" required="yes">

        <cfhttp method="Get" url="#arguments.qStr#"
            proxyServer ="#variables.proxyServer#"
            proxyPort   ="#variables.proxyPort#"
        >                                           <!--- Send out the query to Base --->
            <cfhttpparam name="X-Google-Key" type="Header" value="key=#variables.g_key#">
        </cfhttp>

        <cfreturn cfhttp>
    </cffunction>

    <!---===============================
    getter,setter
    ================================--->
    <!--- token --->
    <cffunction name="getGToken" access="public" returnType="string" output="no">
        <cfreturn variables.token>
    </cffunction>
    <cffunction name="setGToken" access="public" returnType="void" output="no">
        <cfargument name="token" type="string" required="yes">
    
        <cfset variables.token = arguments.token>
    </cffunction>
</cfcomponent>