今回は、他サイトを利用してみます。
自分のサイトで他サイトの画面を表示する方法としては、
フレーム機能を使う場合がほとんどだと思います。
ただし、フレーム機能は内容の変更まではできません。
今回は、他サイトの内容の流用に加えて、
内容も変更してしまう、というものです。
あくまでも実験として楽しんでくださいね。
利用するサイトはなんでもよいですが、
デフォルトとしてyahooを利用してみます。
そして、文字列の変換もしてみます。
こちらをクリックしてください。
フォームの下にヤフーの画面が表示され、
該当の文字列が変換されました。
作り方によっては、偽装サイトができてしまうので、
あくまでも個人で実験する範囲でお願いします。
今回使用したcfhttpタグは、cfmailタグと同様に衝撃的でした。
このように便利なタグが標準でたくさんあります。
他の言語でも別途ライブラリを追加すれば対応可能ですが、
標準で装備されているものは、たぶんほとんどないと思います。
個人でいろいろアイデアだしてツールを作ってみるのも
いいかもしれませんね。
<cfset title="他サイトの表示">
<cfparam name="url.sts" default="">
<cfparam name="form.moto_list" default="自動車,掲示板,ブログ,ビューティー,ビジネス">
<cfparam name="form.saki_list" default="car,bbs,blog,beauty,biz">
<cfparam name="form.url1" default="http://www.yahoo.co.jp/">
<cfparam name="form.url2" default="http://www.samuraiz.co.jp/coldfusion/">
<cfoutput>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>#title#</title>
</head>
<body>
■#title#<br><br>
<form action="index.cfm?sts=1" method="post">
<table>
<tr>
<td>URL1</td>
<td>
<input type="text" name="url1" size="30" value="#form.url1#">
</td>
</tr>
<tr>
<td>URL2</td>
<td>
<input type="text" name="url2" size="30" value="#form.url2#">
</td>
</tr>
<tr>
<td>変換元文字列</td>
<td>
<input type="text" name="moto_list" size="30" value="#form.moto_list#">
</td>
</tr>
<tr>
<td>変換先文字列</td>
<td>
<input type="text" name="saki_list" size="30" value="#form.saki_list#">
</td>
</tr>
</table>
<input type="submit" value="send">
</form>
</body>
</html>
<cfif url.sts neq "">
<!---解説
「url.stsがヌルでない場合」
この条件は、sendボタンを押した場合に
<form action="index.cfm?sts=1" method="post">
によって、
url.sts=1が生成されるので、
この条件に該当します。
--->
<cfhttp url="#form.url1#" resolveURL="yes" result="ret1" method="get">
<!---解説
注目のcfhttpタグです。
resolveURL="yes"により、
リンク部分がヤフーサイトと同様になります。
noの場合は、リンクは自分のサイト名がついた状態なので
リンクをクリックしてもエラーが発生します。
--->
<cfhttp url="#form.url2#" resolveURL="yes" result="ret2" method="get" charset="shift_jis">
<!---解説
「charset="shift_jis"」は呼び出すサイトで同じ指定がされている場合、
使用すると文字化けしません。
なにも指定しない場合はutf-8がデフォルトです。
--->
<cfset content = ret1.fileContent & ret2.fileContent>
<!---解説
2つのサイトのコンテンツを結合します。
上記のように複数のサイトから情報を取得する場合は、
「result="ret1"」のように指定します。
1つの場合は指定しなくてもよいですが、
その場合は、
cfhttp.fileContent
で、コンテンツの中身を取得します。
--->
<cfset content = ReplaceList(content, form.moto_list, form.saki_list)>
<!---解説
コンテンツの中身の文字列を置換します。
--->
<hr>
#content#
<!---解説
コンテンツを表示します。
--->
</cfif>
</cfoutput>