#!/usr/bin/perl

# tips ticker
# 2008 copyright(c) shin'nosuke.All rights reserved.



require './jcode.pl';
use IO::Socket;

$TRUE=1;
$FALSE=0;
$LOOP_END=0;
$LOCKFILE="tips_ticker_lock.";

#--- modify here ---
#$DATE_HEADER="<div class=\"datebody\"><h2 class=\"date\">";
#$DATE_FOOTER="</h2></div>";
#$SUBJECT_HEADER="<div class=\"titlebody\"><h3 class=\"title\">";
#$SUBJECT_FOOTER="</h3></div>";
#$BODY_HEADER="<div class=\"main\">";
#$BODY_FOOTER="<br clear=\"all\"></div>";
#$MAX_ARTICLES=5;
$DATE_HEADER="";
$DATE_FOOTER="";
$SUBJECT_HEADER="";
$SUBJECT_FOOTER="";
$BODY_HEADER="";
$BODY_FOOTER="";
$MAX_ARTICLES=5;

#--- modify here ---
#$TIPS_TICK_SERVER="blog.livedoor.jp";
#$TIPS_TICK_PATH="/lakeside_shinnosuke/archives/cat_29255.html";
#$IMAGEFILE="./sologo.gif";
#$TIPSFILE="tipslive.js";
$TIPS_TICK_SERVER="";
$TIPS_TICK_PATH="";
$IMAGEFILE="";
$TIPSFILE="";


sub get_http_source()
{
	local $server=$_[0];
	local $path=$_[1];

	local $response="";
	local $buf="";

	local $sock = new IO::Socket::INET(PeerAddr=>$_[0],PeerPort=>80,Proto=>'tcp');
	die "IO::Socket : $!" unless $sock;
	print $sock "GET $_[1] HTTP/1.0\r\n\r\n";

	while (chomp($buf=<$sock>)) {
		&jcode'convert(*buf,'euc');
		$response=$response.$buf;
	}

	close($sock);

	return $response;

}

sub replace_charactor()
{
	$_[0]=~s/\r//g;
	$_[0]=~s/\n//g;
	$_[0]=~s/"/\\"/g;
#	$_[0]=~s/<br>//g;

	return $_[0];

}

sub get_jsout_string()
{
	local $jsstring="";

	$jsstring=
		sprintf("document.write(\"%s\");\n",
				$_[0]);

	return $jsstring;

}

sub create_lockfile()
{
	local $retvalue=$FALSE;

	unless(-f $LOCKFILE)
	{
		$retvalue=open(OUT,"> $LOCKFILE");
		if($retvalue==$TRUE)
		{
			close(OUT);
			$retvalue=$TRUE;
		}
	}

	return $retvalue;

}

sub create_tips_file()
{
	local $ret = open(OUT,"> $TIPSFILE");

	if($ret==$TRUE)
	{
		print OUT $_[0];
		close(OUT);
	}
}

sub release_lockfile()
{
	unlink $LOCKFILE;
}


sub output_imagefile()
{
	open(IMG, "./$_[0]") or die;

	binmode IMG;
	binmode STDOUT;
	print while (<IMG>);

	close(IMG);
}


sub main()
{
	local $source="";
	local $buf="";

	local $i=0;
	local $j=0;
	local $k=0;
	local $articles=0;
	local $switch=0;

	local $date="",$subject="",$body="";

	local $outputstring="";


	$source=&get_http_source(
		$TIPS_TICK_SERVER,
		$TIPS_TICK_PATH);

	$LOOP_END=length($source)+1;

	while($i<length($source))
	{
		$j=$i;

		if($switch==0)
		{
			$i=index($source,$DATE_HEADER,$i);
			if($i==-1)
			{
				$i=$j;
				$switch=2;
			}
			else
			{
				$i+=length($DATE_HEADER);
				$k=$i;
				$switch+=1;
			}
		}
		elsif($switch==1)
		{
			$i=index($source,$DATE_FOOTER,$i);
			if($i==-1){	$i=$LOOP_END;	}
			else
			{
				$date=substr($source,$k,$i-$k);
				$i+=length($DATE_FOOTER);
				$switch+=1;
			}
		}
		elsif($switch==2)
		{
			$i=index($source,$SUBJECT_HEADER,$i);
			if($i==-1){	$i=$LOOP_END;	}
			else
			{
				$i+=length($SUBJECT_HEADER);
				$k=$i;
				$switch+=1;
			}
		}
		elsif($switch==3)
		{
			$i=index($source,$SUBJECT_FOOTER,$i);
			if($i==-1){	$i=$LOOP_END;	}
			else
			{
				$subject=substr($source,$k,$i-$k);
				$i+=length($SUBJECT_FOOTER);
				$switch+=1;
			}
		}
		elsif($switch==4)
		{
			$i=index($source,$BODY_HEADER,$i);
			if($i==-1){	$i=$LOOP_END;	}
			else
			{
				$i+=length($BODY_HEADER);
				$k=$i;
				$switch+=1;
			}
		}
		elsif($switch==5)
		{
			$i=index($source,$BODY_FOOTER,$i);
			if($i==-1){	$i=$LOOP_END;	}
			else
			{
				$body=substr($source,$k,$i-$k);
				$i+=length($BODY_FOOTER);
				$switch=0;

				$date=&replace_charactor($date);
				$subject=&replace_charactor($subject);
				$body=&replace_charactor($body);

				$outputstring=$outputstring.
					&get_jsout_string("<li><strong>$subject</strong>").
					&get_jsout_string("<ul>").
					&get_jsout_string("$body").
					&get_jsout_string("</ul>");
					#&get_jsout_string("<br>");

				#printf("\n\ndate:%s\nsubject:%s\nbody:\n%s",$date,$subject,$body);

				$subject="";
				$body="";
				$articles++;

				if($articles>$MAX_ARTICLES-1){	$i=$LOOP_END;	};

			}
		}

		$i++;

	}

	if(&create_lockfile()==$TRUE)
	{
		&create_tips_file($outputstring);
		&release_lockfile();
	}

	print "Content-type: image/gif\n\n";

	&output_imagefile($IMAGEFILE);

	return;

}


&main;


