goo blog サービス終了のお知らせ 

ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

JCODEをつかって、コードの違いの問題は解決しました

2006-02-09 20:24:37 | JavaとWeb

 さっきのブログ
 FORMで来る値をGETでもPUTでも何でも保存するCGIを、ある実験のために作ってみるで、楽天と、gooで、トラックバックで送られてくる文字コードが違うので、困るといった話。

 ロリポップは、Jcodeがはいっているので、それを使えば、大丈夫でした。

 ちなみに、ウィリアムのいたずらの本家(楽天)の以下の記事で、
「<加護亜依>深夜の喫煙シーン撮られる」って、W(ダブルユー)の活動は?ハローモーニングは?
引数に
blogmei=rakkuten2
を追加して確認したところ、ファイルは、以下のようにかけたので

METHOD = POST
blogmei : rakuten2
blog_name : ウィリアムのいたずら
excerpt :  おお、元モーニング娘。の、加護亜依さんが、たいへんなことに(@_@)このニュース<加護亜依>深夜の喫煙シーン撮られるhttp://headlines.yahoo.co.jp/hl?a=20060209-00000070-mai-sociNEWSは、飲酒で、謹慎処分だよね。。YA-YA-Yahでは、NEWSの部分カットだよね。...
url : http://plaza.rakuten.co.jp/struts/diary/200602090002/
title : 「<加護亜依>深夜の喫煙シーン撮られる」って、W(ダブルユー...


大丈夫そうですね




で、プログラムは、以下のとおり
赤字のところが、追加あるいは修正されたところです。

#!/usr/local/bin/perl
use CGI;
use Jcode;


				#################################
				#	必要な変数の取得	#
				#################################
##引数を取得
#POST型
read (STDIN, $qs, $ENV{'CONTENT_LENGTH'});
@qs = split(/&/,$qs);
foreach $i (0 .. $#qs) 
{
	($name, $value) = split(/=/,$qs[$i],2);
	$value =~ tr/+/ /;    #“+”を空白
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;   # %XX変換
	$kekka{$name} = jcode($value)->sjis();
}

#GET型
$qs = $ENV{'QUERY_STRING'};
@qs = split(/&/,$qs);
foreach $i (0 .. $#qs) 
{
	($name, $value) = split(/=/,$qs[$i],2);
	$value =~ tr/+/ /;    #“+”を空白
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;   # %XX変換
	$kekka{$name} = jcode($value)->sjis();
}

				#################################
				#	カウンタ取得		#
				#################################
#カウンタの取得
$cntfname =  "count.dat";
open(LOCK, ">" . $cntfname . ". lock");
flock(LOCK,2);
if ( -e $cntfname )
{
	open (IN, $cntfname);
	$count=<IN>;
	close(IN);
}
else
{
	$count	=	0;
}
$count=$count+1;
open (OUT, ">" . $cntfname);
printf(OUT "%d",$count);
close(OUT);

flock(LOCK,8);
close(LOCK);
unlink($cntfname . ". lock");

chmod 0600,$cntfname;


				#################################
				#	ファイルに書き出し	#
				#################################
#ファイルを作成する
$outfname = "kekka_" . $count . ".txt";
# 書き込み用にファイルを開く
open(OUTF, ">". $outfname );
print OUTF "METHOD = $ENV{'REQUEST_METHOD'} ¥n";
while (($key, $val) = each(%kekka))
{
	print OUTF "$key : $val ¥n";
}

# ファイルを閉じる
close( OUTF);


				#################################
				#	返信			#
				#################################
#表示
print "Content-Type: text/xml¥n¥n";
print '<?xml version="1.0" encoding="iso-8859-1"?>';
print '<response>';
print '<error>0</error>';
print '</response>';


(上記の< > ¥は、実際には、半角です)

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

BREWのIHTMLVIEWERにおいて、Aタグは、FORMの中に入ってるかどうかで、意味が違う。

2006-02-09 16:37:24 | ケータイ

 ふつうのHTMLにおいて、A(アンカー)タグは、べつにFORMの中に入ってるかどうかなんて、何一つ関係ない。

 しかし、BREWのIHTMLVIEWERにおける、HTMLでは、ちがう。

 IHTMLVIEWERを使う際、
<form method=post action=brewdic:showevent>
<A HREF=ab>はいってる</A>
</form>
のように、フォームタグの中に入っていれば、これは、カーソル制御の対象になる。
したがって、ここのうえに、カーソルがあれば、その位置はIHTMLVIERER_GetViewStateでとってこれる(実際にはID+HREFなどの長さを足した値が帰るが)

しかし、
<A HREF=ab>FORMなし</A>
のように、FORMタグがなければ、それは、IHTMLVIERER_の管理外になる。
つまり、とってこれん。

はいはい、間違えましたよ。ウィリアムのいたずらは(^^;)
これに、1日ぐらい費やしましたよ(;_;)

そのうえ、高校講座見ながらHTML作ったから、まだ、囲んでないのも、いっぱいあるかも(;_;)
うーん、プログラム作って、一気に調べるか。。

こんだけを、手作業で調べるのは・・

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

トラックバックのプロトコルと、楽天と、Gooの日本語コードの違いと解決法

2006-02-09 15:46:14 | JavaとWeb

 さて、まえのブログで、FORMの内容をそのまま出してみたのは、ほかでもない。

 ブログのトラックバックで、実際に、どういう内容を送信しているかということを、確認するためだった(それが、前の「実験」)。
 そのため、返信に、わけもわからないXMLをつけているのでした(あの返信は、トラックバック仕様書に出てきます)




 実際に、トラックバックを送って実験して見ました。

 なお、送信時、どっちがどっちか、わかるように、トラックバック先に

 楽天の場合は、URLに
?blogmei=rakuten

gooの場合は、
?blogmei=gooblo

とつけて送りました。

トラックバック元のブログは、
Gooのほうは、
まえの記事

楽天日記のほうは、以下の記事
元AV女優が「NHKの!!」スペイン語に出るっていうほうがすごいよね!中山エミリがでるというドイツ語より。。

そうしたところ。。。

トラックバック仕様書にかかれているように、

gooブログの場合は、


blogmei : gooblog
excerpt :
blog_name : コピーされるほど儲かるシステム!開発日記
url : http://blog.goo.ne.jp/xmldtp/e/d3f87d216e444e22a27f0a74f86859c3
title : FORMで来る値をGETでもPUTでも何でも保存するCGIを、ある実験のために作ってみる


みたいなかんじで、送ってきます。
(blogmeiは、上記にしめすように、ウィリアムのいたずらが勝手につけた。
 ほかの、excerpt、 blog_name、url 、titleはトラックバック仕様書にある)

ただし、日本語は、EUCです。




楽天日記も、同じ項目、つまり、

blogmei、excerpt、 blog_name、url 、title

を、送ってくるのですが、UTF-8のようです。




げ、どーしよう(>_<!)
コードがちがうじゃん!
と思ったら、もう、すでにこの問題にあたって、解消している人がいた。

ここ

つまり、解決法は、
Jcodeを使うみたいで。。で、Jcode.pmの説明をみたら、Encodeつーのが書いてあった。
まあ、この辺を使うみたいだ。。




で、問題はなにをやろうかとしているのだが。。。
それは、またこんど。

ひとつだけ言っておくと、別に、
 トラックバックスパムをつくろうとか、
 手動トラックバックを作ろう
としているわけではない。念のため
(って、これだけ仕様がわかれば作れるけど)




  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

FORMで来る値をGETでもPUTでも何でも保存するCGIを、ある実験のために作ってみる

2006-02-09 13:21:50 | JavaとWeb

 いやー、昨日は、「BREWでアジャイル」とかやったら、不評だったみたいで(^^;)。。
あとで、イラク人質事件の今井さんネタをもってきても、挽回むなしく、おとといと同じくらいのアクセス数(345 ip)でした(おとといは、かなり低いほうなのです)。

 ということで、今日は、ネットねたに戻します(「BREWでアジャイル」はいつどこでやるの?については、このブログの一番最後に書きますね)




 テストとか、実験とかで、FORMタグで渡す引数について、
 全部、出してみたいこととかありませんか?

  え、ない。

  終了。。。

となってしまうので、あると思ってください。

とくに、
<FORM METHOD=POST ACTION="cgiout.cgi?atai=val1">
のように、メソッドをPOSTを指定してるのに、CGIのURLに、値の引数を付けちゃってる場合とか、だいじょうぶかとか。。。

っていうので、そーいうプログラムをつくってみました。




■■ FORMタグで渡す引数ぜんぶかきだしプログラムの仕様
・POSTの内容も、GETの内容も、とにかく、引数でわたってきたものは、名前と値を全部出す。

・メソッド名も出す

・カウンタをもっていて、ファイルに書き出す。
  カウンタ名は、CGIのあるところに、 ファイル名 count.datで
  結果は、1アクセス1ファイル。   ファイル名 kekka_カウンタ番号.txt

・で、相手には、XMLで、

<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>0</error>
</response>

(実際には<>は、半角です)

と返す。。
。。。はあ?と思うと思いますが、これについては、実験がうまくいったら書きます。




■■ プログラム

こんなかんじ
#!/usr/local/bin/perl
use CGI;


				#################################
				#	必要な変数の取得	#
				#################################
##引数を取得
#POST型
read (STDIN, $qs, $ENV{'CONTENT_LENGTH'});
@qs = split(/&/,$qs);
foreach $i (0 .. $#qs) 
{
	($name, $value) = split(/=/,$qs[$i],2);
	$value =~ tr/+/ /;    #“+”を空白
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;   # %XX変換
	$kekka{$name} = $value;
}

#GET型
$qs = $ENV{'QUERY_STRING'};
@qs = split(/&/,$qs);
foreach $i (0 .. $#qs) 
{
	($name, $value) = split(/=/,$qs[$i],2);
	$value =~ tr/+/ /;    #“+”を空白
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;   # %XX変換
	$kekka{$name} = $value;
}

				#################################
				#	カウンタ取得		#
				#################################
#カウンタの取得
$cntfname =  "count.dat";
open(LOCK, ">" . $cntfname . ". lock");
flock(LOCK,2);
if ( -e $cntfname )
{
	open (IN, $cntfname);
	$count=<IN>;
	close(IN);
}
else
{
	$count	=	0;
}
$count=$count+1;
open (OUT, ">" . $cntfname);
printf(OUT "%d",$count);
close(OUT);

flock(LOCK,8);
close(LOCK);
unlink($cntfname . ". lock");

chmod 0600,$cntfname;


				#################################
				#	ファイルに書き出し	#
				#################################
#ファイルを作成する
$outfname = "kekka_" . $count . ".txt";
# 書き込み用にファイルを開く
open(OUTF, ">". $outfname );
print OUTF "METHOD = $ENV{'REQUEST_METHOD'} ¥n";
while (($key, $val) = each(%kekka))
{
	print OUTF "$key : $val ¥n";
}

# ファイルを閉じる
close( OUTF);


				#################################
				#	返信			#
				#################################
#表示
print "Content-Type: text/xml¥n¥n";
print '<?xml version="1.0" encoding="iso-8859-1"?>';
print '<response>';
print '<error>0</error>';
print '</response>';

(上記の< > ¥は、実際には、半角です)




さ、実験だ(^^)v
うまくいったら、なにやってるか、報告します。

●「BREWでアジャイル」の今後

 ウィリアムのいたずらのBREWのページに、目次をかきました。
 今後、ホームページに直接、あるいは、ねたがないときに、この中から選んで、ブログに書いてリンクしたりして、進めていこうかなあ。。なんて考えています。

 とりあえず、連載は、見てくれる人がいなくなっちゃいそうなんでないけど、ひまができたら、書いていきます。でも、今、ひまがない(>_<!)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする