前の記事の仕組みを使って、ちょっとお遊びで作りました(^^;)Yahoo!のトップページのトピックスから見出しを取ってきて、適当につぎはぎにして表示するプログラムです。
まったく乱数で表示してるので、出てくる見出しはでたらめです。

取ったテキストを抜き出してなんやらかんやら加工をかけてます。
もっとスマートな方法があるとは思うんですが、、、今の自分では
この辺で限界(^^;)

JavaScriptで正規表現とか、配列の操作、タイマー、乱数とかほとんどはじめて使ってみました。今後こういったプログラムを書くときのために残しておきます。

やはりこれもローカルでないと動きません。

<?xml version="1.0">
<!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">

<script language="javascript">
<!--
varhttpObj;

function httpRequest(target_url)
{
try
{

httpObj = false;

if(window.XMLHttpRequest) {
    // Firefox, Opera など
    httpObj = new XMLHttpRequest();

} else if(window.ActiveXObject) {
    // IE
    try {
        httpObj = new ActiveXObject('Msxml2.XMLHTTP');
    } catch (e) {
        httpObj = new ActiveXObject('Microsoft.XMLHTTP');
    }
}

}
catch(e)
{
alert('エラーです');
return;
}

//データを取得する
httpObj.open("GET", target_url, true);
httpObj.onreadystatechange = DataRead;
httpObj.send("");

return;
}

function DataRead()
{
        if (httpObj.readyState == 4 && httpObj.status == 200)
{

//取得したレスポンスをgetTextに入れる
var getText=httpObj.responseText;

//getText1にgetTextの「<ul class="emphasis">」から始まるテキストを入れる
var getText1=getText.substring(getText.indexOf('<ul class="emphasis">'));

//getText2にgetText1の「</ul>」の前までのテキストを入れる
var getText2=getText1.substring(0,getText1.indexOf('</ul>'));

//getText3の配列に、<a>~</a>を入れる
var getText3=getText2.match(/<a.+?>.+?</a>/g);

//すべてのgetText3の配列のタグを取り除く
for (var i=0;i<getText3.length;i++){
var xx=getText3[i].match(/<a.+?>(.+?)</a>/);
getText3[i]=RegExp.$1;
}

//すべてのgetText3の「、」を半角スペースに置き換え
for (var i=0;i<getText3.length;i++){
getText3[i]=getText3[i].replace('、',' ').replace('「',' ').replace('」',' ');
}
//すべてのgetText3の連続する半角スペースを1つにする
for (var i=0;i<getText3.length;i++){
while (getText3[i].indexOf('  ')!=-1){
getText3[i]=getText3[i].replace('  ',' ');
}
}

//すべてのgetText3の両端の半角スペースを削除する
for (var i=0;i<getText3.length;i++){
getText3[i]=getText3[i].replace(/^[  ]*/gim, "").replace(/[  ]*$/gim,"");
}

//半角スペースがあるものだけがつぎはぎの対象なので、それの要素番号をtaishouYousoにpushする
var taishouYouso=new Array();
for (var i=0;i<getText3.length;i++){
if (getText3[i].indexOf(' ')!=-1){
taishouYouso.push(i);
}
}

//もし要素が1つ以下の場合、作れないのでごめんなさい
if (taishouYouso.length<=1){
alert('今の見出しでは作れませんでした。。。ごめんなさい');
} else {

//異なる2つの要素を取得する
ret="                            ";
for (var youso1=0;youso1<taishouYouso.length;youso1++){
do {
var youso2=Math.floor( Math.random() * taishouYouso.length );
} while (youso1==youso2)

//1つめの要素の前半部分と、2つめの要素の後半部分をくっつけて見出しを作る

var nukidashi1=getText3[taishouYouso[youso1]].substr(0,getText3[taishouYouso[youso1]].indexOf(' '));
var nukidashi2=getText3[taishouYouso[youso2]].substr(getText3[taishouYouso[youso2]].indexOf(' '));
ret=ret+nukidashi1+nukidashi2+'                     ';
}
setTimeout("scroll()",200);
}

       }
}
function getTsugihagi(){
httpRequest('http://www.yahoo.co.jp/');
}
function scroll(){
    ret=ret.substring(1,ret.length)+ret.substring(0,1);
    document.fm.txt.value=ret;
    setTimeout("scroll()",200);
}

//-->
</script>
</head>

<body onload="getTsugihagi()">
<form name="fm">
<input type="text" name="txt" size="30">
</form>
</body>
</html>

問い合わせ先をこのサーバー上のCGI(Yahoo!からトップのソースを取ってくるだけ)にして、動作するものを置いておきます。こちらからどぞ。

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2011 simple blog いろいろ勉強中 Suffusion theme by Sayontan Sinha