0
0

リフレッシュして、perl と python を楽しもう。

Posted at

私は、たまーに、頭をクリーニングするのに、音楽をききます。始まりは、μ's(ミューズ)で、スクールアイドルシリーズの礎を築いた、現在まで続くアイドルグループの創設者であります。
よく聞くスタート・ミュージックが輝夜の城で踊りたい(μ's)で始まります。
https://music.youtube.com/watch?v=VTKMRBPCut0&list=RDAMVMVTKMRBPCut0
(YouTube music)
myuzu1.png
このシリーズ初代には、
https://music.youtube.com/watch?v=yCz_vEmTHFQ&list=RDAMVMVTKMRBPCut0
myuzu2.png
ことり ちゃんが可愛いと思っています。
現在、地元では「蓮の空」(はすのそら)と言う、ユニットが頑張っています。あなたの近くは?
https://music.youtube.com/watch?v=S0ioLEIPxZk&list=RDAOlh1QZ1CE9hl6f_ZrCh8efA
has1.pnghas2.png
よろしかったら、応援してあげてください。

animationで外せないのが、私的に「スパイ・ファミリー」アーニャが可愛く、これは推しです。
パピリ孔明の歌で踊っているのを紹介。
https://music.youtube.com/watch?v=e_mJqwHd06I
anya1.png
わたしは、YouTube music でお気に入りを流しながら、リフレッシュしますが、皆様の気分転換などを教えていただくと嬉しくおもいます。

これ知っています?
rinna_soto.png
この子が分かれば、それなりの、通ですよ。(りんなAI)ですよ。

さて、リフレッシュ出来たら、ちょっとだけ頭を使ってみましょう。

perlpython比較をしながら紹介します。最後にふたつを上げます。

#!C:/xampp/Perl/bin/perl

# This is a perl header.
################## Another way to specify. ##################
#!C:/xampp/Perl/bin/perl5.32.1
#############################################################

#      information.       
# File      my_perl.cgi
# address1  http://localhost/perl_test/my_perl.cgi
# address2  http://127.0.0.1/perl_test/my_perl.cgi
# environment  xampp:xampp/htdocs/perl_test/
# in xampp:xamp/perl/bin/perl5.32.1 

## script Start
$this_script = 'http://localhost/perl_test/my_perl.cgi';

#!C:/Python/python -X utf8
# coding=utf-8

# This is a python header. 
################## python(anconda header) ###################
#!C:/anaconda/python -X utf8
# coding=utf-8
#############################################################

#      information.       
# File      my_python.cgi
# address1  http://localhost/python_test/my_python.cgi
# address2  http://127.0.0.1/python_test/my_python.cgi
# environment  xampp:xampp/htdocs/python_test/
# outside:Python/python 3.12.1

## script Start
this_script = 'http://localhost/python_test/my_python.cgi'

概ねの概略と1,2行目に注意してください。

$point_err = 'bol1_1';
$point_return = 'bol2_0';
$settig_msgA = 'NO Settig.';
$settig_msgB = 'NO Settig.';
$error_detail = 'No Error.';
sub my_error(error_detail){
	#callされた時点での変数内容に従う。
	if($point_err eq 'bol1_1'){
        print "Content-type:text/html\n\n";
        print "<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\"><title>Error</title></head><body>";
	}
	print "<h1>エラー発生(An error has occurred.)</h1><h2>detail $_[0]</h2><div style=\"background-color: #000066;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">$settig_msgA</div><div style=\"background-color: #006600;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">$settig_msgB</div><br>";
	
	if($point_return eq  'bol2_1'){
		return;
	}
	print"</body></html>\n";
	exit;
}

# &my_error('test error.');

point_err = bool(1)
point_return = bool(0)
settig_msgA = 'NO Settig.'
settig_msgB = 'NO Settig.'
error_detail = 'No Error.'
def my_error(error_detail):
    if point_err:
        print ("Content-type:text/html\n\n")
        print ('<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\"><title>Error</title></head><body>')
    print ('<h1>エラー発生(An error has occurred.)</h1><h2>detail :'+error_detail+'</h2><div style=\"background-color: #000066;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">'+settig_msgA+'</div><div style=\"background-color: #006600;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">'+settig_msgB+'</div><br>')
    if point_return:
        return
    print ('</body></html>\n')
    exit()
    
# my_error('オープン前エラー Occurrence before opening <b>test.</b>')

htmlの外側で発生した時と、html内部で仮発生させて戻る時の仕様になっています。

print "Content-type:text/html\n\n";
print '<!DOCTYPE html><html lang="ja"><head><meta charset="UTF-8"><title>my perl</title></head><BODY BGCOLOR="#ffffff">'."\n";

$point_err = 'bol1_0';#    ここからはErrorでヘッダーが要らない。
$point_return = 'bol2_1';# ここからはError表示後戻ってくる。

print <<MY_EOF ;
<h1>test system</h1>
<p>日本語を話せる、システムです。「This is a system that allows you to speak Japanese.」<br>
カンニングペーパー「コピペオンライン英和翻訳 『Multilingal Online Translation』」はMicrosoftストアーで。<br>
The cheat sheet "Copy and Paste Online English-Japanese Translation 『Multilingal Online Translation』" is available at the Microsoft Store.<br>
ブラウザ、拡張機能もお忘れなく。わからない時は、質問AIですよ。「Don't forget your browser and extensions. When you don't understand, there is a question AI.」</p><br>
MY_EOF

print ('Content-type:text/html'+'\n'+'\n')
print ('<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\"><title>my pyton</title></head><BODY BGCOLOR=\"#ffffff\">\n')
point_err = bool(0)
# ここからはErrorでヘッダーが要らない。
point_return = bool(1)
# ここからはError表示後戻ってくる。
print ('<h1>test system</h1>'+'\n')
print ('<p>日本語を話せる、システムです。「This is a system that allows you to speak Japanese.」<br>\n')
print ('カンニングペーパー「コピペオンライン英和翻訳 『Multilingal Online Translation』」はMicrosoftストアーで。<br>\n')
print ('The cheat sheet \"Copy and Paste Online English-Japanese Translation 『Multilingal Online Translation』\" is available at the Microsoft Store.<br>\n')
print ('ブラウザ、拡張機能もお忘れなく。わからない時は、質問AIですよ。「Don\'t forget your browser and extensions. When you don\'t understand, there is a question AI.」</p><br>\n')

htmlの書き出しと、Error処理の切り替えです。

###### 時間取得
sub time_get {
	$date_sec = time;
	($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($date_sec);
	@week = ('','','','','','','');
	$m_week = $week[$wday]; #koko2013/02/21
# 日時のフォーマット
	$full_date = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d",$year+1900,$mon+1,$mday,$week[$wday],$hour,$min,$sec);
	$date = sprintf("%04d/%02d/%02d",$year+1900,$mon+1,$mday);
	$date1 = sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec);
	$date2 = sprintf("%04d年%02d月%02d日",$year+1900,$mon+1,$mday);
	$date3 = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
	$return_hour=$hour;
}

###### 時間取得
import datetime
now = datetime.datetime.now()
formatted_date = now.strftime("%Y/%m/%d %H:%M:%S")
it_day = now.strftime("%Y年%m月%d日")
it_time = now.strftime("%H時%M分%S秒")

pytoonは数字になって出て来ない?

# 受信
if ($ENV{'REQUEST_METHOD'} eq "POST") {
	$post_flag = 1;
	if ($ENV{'CONTENT_LENGTH'} > 51200) { &my_error("投稿量が大きすぎます"); }
	read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
} else {
	$post_flag = 0;
	$query = $ENV{'QUERY_STRING'};
	if(length($query) > 15){&my_error("GETは受け付けていません。");}
}

$tmp_q_m = '<b>get or post.</b>:'.length($query).'<br>query:'.$query;
$settig_msgA = $tmp_q_m;
&my_error('testエラー Test query.<b>test.</b>');

# 受信
import re
import sys
import os

req_met = os.environ.get('REQUEST_METHOD')
if req_met == 'POST':
    for query in sys.stdin:
        os.environ.get('CONTENT_LENGTH')
        pass
else :
    query = os.environ.get('QUERY_STRING')
    if len(query) > 0 and req_met != 'POST':
        tmp_q_m = '<b>not post.</b>:'+str(len(query))+'<br>query:'+query
        settig_msgB = tmp_q_m
        # 受信したアドレスバーに付いている情報をBに入れておく。2行は最終的に要らない。
if len(query) > 10 :
    language = len(query)

tmp_q_m = '<b>get or post.</b>:'+str(len(query))+'<br>query:'+query
settig_msgA = tmp_q_m
my_error('testエラー Test query.<b>test.</b>')

post,get

#
# この項目は無し。
my_hash = {}
#my_hkey_list0 = list(my_hash.keys())
my_hash['name'] = ''
my_hash['subm'] = ''
my_hash['comment'] = ''
my_hash['url'] = ''
my_hash['l_tim'] = formatted_date
my_hash['to_day'] = it_day
# 一応、使うhash(連想配列)のkeyとValue(値)を初期化して置く。
come = ''

変数の初期化宣言。

foreach ( split(/&/, $query) ) {
	($key, $val) = split(/=/);
	
	$key =~ tr/+/ /;
	$key =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
	$key =~ s/&/&amp;/g;
	$key =~ s/</&lt;/g;
	$key =~ s/>/&gt;/g;
	$key =~ s/\r\n/<br>/g;
	$key =~ s/\r|\n/<br>/g; #key end	
	$val =~ tr/+/ /;
	$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
	$val =~ s/\r\n/<br>/g;
	$val =~ s/\r|\n/<br>/g;
	
	if($key eq 'comment'){
		$come = $val;
		$come =~ s/<br>/\n/g;
	}
	#
	#
	$my_hash{$key} = $val;
}

key_myh = list(my_hash.keys())

import urllib.parse
key0=''
value0=''
buf_arrey = query.split("&")
from urllib.parse import parse_qs

if "" != buf_arrey:

    for my_buf in buf_arrey:
        
        mytem_buf = my_buf
        mytem_buf += '='
        key_val_arry = mytem_buf.split("=")
        key0 = key_val_arry[0]
        value0 =key_val_arry[1]
        
        key0 = re.sub(r'\+', ' ', key0)
        key0 = re.sub(r'%([0-9a-fA-F][0-9a-fA-F])', lambda x: chr(int(x.group(1), 16)), key0)
     #  key0 =  urllib.parse.unquote(key0)        
        key0 = re.sub(r'&', '&amp;', key0)
        key0 = re.sub(r'<', '&lt;', key0)
        key0 = re.sub(r'>', '&gt;', key0)
        key0 = re.sub(r'\r\n', '<br>', key0)
        key0 = re.sub(r'\r|\n', '<br>', key0)
        my_key = key0
        value0 = re.sub(r'\+', ' ', value0)
        # 私が馬鹿なのでここは出来ません。
     #  value0 = re.sub(r'%([0-9a-fA-F][0-9a-fA-F])', lambda x: chr(int(x.group().encode('utf-8').decode('ascii', 'ignore'), 16)), value0)
        value0 = re.sub(r'%([0-9a-fA-F][0-9a-fA-F])', lambda x: chr(int(x.group(1), 16)), value0)
        # I don't have the power to change it.       
        # value0 = re.sub(r'\x', '%', value0)
        value0 = urllib.parse.unquote(value0)        
        value0 = re.sub(r'&', '&amp;', value0)
        value0 = re.sub(r'<', '&lt;', value0)
        value0 = re.sub(r'>', '&gt;', value0)
        value0 = re.sub(r'\r\n', '<br>', value0)
        value0 = re.sub(r'\r|\n', '<br>', value0)
        my_val = value0
        if my_key == 'comment':
            value0 = re.sub(r'<br>', '\n', value0)
            come = value0

        key_c=0
        for key_myh_s in key_myh:
            if key0 == key_myh_s:
                key_c=1

        if key_c==0:
            if "" != my_val:
                my_val =  value0

        #I can't get around to it, so I'll try putting it out.
        my_hash[my_key] = my_val
        # print (f'key={my_key} value={my_val}<br>\n')
# end field。

keyとValueに日本語を使える様にして、一部出来ないの。

&my_key_value();

sub my_key_value(){
	foreach $key (keys %in) {
		print "key=$key value=$in{$key}<br>\n";
	}
}
# &my_key_value();

def my_key_value():
    key_list0 = list(my_hash.keys())
    print(key_list0)
    print ('<br>\n')
    for i, val0 in enumerate(key_list0):
        if i == len(key_list0) - 1:
            print('last: '+val0+' :'+my_hash[val0]+'<br>\n')
        else:
            print('middle '+val0+' :'+my_hash[val0]+'<br>\n')

my_key_value()

hash「連想配列」の書き出し。

&time_get();

print <<MY_EOF ;
<br>
現在の日付と時刻: $date_sec<br>
$full_date Japanise style. きょうは、$date2 で時計は $date3<br>
これをComment欄に貼り付けでご利用してください。"%E6%97%A5%E6%9C%AC%E8%AA%9E%E9%9D%9E%E5%AF%BE%E5%BF%9C"<br>
<!-- <form action="$this_script" method="GET"> -->
<form action="$this_script" method="POST">
<table border=0 cellspacing=1>
<tr><td><b>name</b></td><td><input type=text name=name size=28 value="$my_hash{'name'}" maxlength="12" class=f></td></tr>
<tr><td><b>submit</b></td><td><input type=text name=subm size=100 value="$my_hash{'subm'}" maxlength="100"class=f></td></tr>
<tr><td colspan=2><b>comment</b><br><textarea cols=70 rows=7 name=comment wrap="soft" class=f>$come</textarea></td></tr>
<tr><td><b>url</b></td><td><input type=text size=52 name=url value="$my_hash{'url'}" maxlength="60" class=f></td></tr>'
<tr><td><input type=submit value="submit"></td><td><input type=reset value="reset"></td></tr>
</form></table><br>
<b><font color="#ff00ff">receives</font></b><br>
name=$my_hash{'name'}<br>comment<br>$my_hash{'comment'}<br>It OK?<br>
<br><a href="$this_script">reload</a><br>
MY_EOF

# &my_error('test message.all end!!');
print "<br><br><br></body></html>\n";

exit;
print('<br>\n')
print("現在の日付と時刻: ", now)
print('<br>'+formatted_date+' Japanise style. きょうは、'+it_day+'で時計は'+it_time+'<br>\n')
print ('これをComment欄に貼り付けでご利用してください。\"%E6%97%A5%E6%9C%AC%E8%AA%9E%E9%9D%9E%E5%AF%BE%E5%BF%9C\"<br>\n')
#print ('<form action=\"'+this_script+'\" method=\"GET\">\n')
print ('<form action=\"'+this_script+'\" method=\"POST\">\n')
print ('<table border=0 cellspacing=1>\n')
print ('<tr><td><b>name</b></td><td><input type=text name=name size=28 value=\"'+my_hash['name']+'\" maxlength=\"12\" class=f></td></tr>\n')
print ('<tr><td><b>submit</b></td><td><input type=text name=subm size=100 value=\"'+my_hash['subm']+'\" maxlength=\"100\"class=f></td></tr>'+'\n')
print ('<tr><td colspan=2><b>comment</b><br><textarea cols=70 rows=7 name=comment wrap=\"soft\" class=f>'+come+'</textarea></td></tr>'+'\n')
print ('<tr><td><b>url</b></td><td><input type=text size=52 name=url value=\"'+my_hash['url']+'\" maxlength=\"60\" class=f></td></tr>'+'\n')
print ('<tr><td><input type=submit value=\"submit\"></td><td><input type=reset value=\"reset\"></td></tr>\n')
print ('</form></table><br>\n')
print('<b><font color="#f0f">receives</font></b><br>\n')
print ('name='+my_hash['name']+'<br>comment<br>'+my_hash['comment']+'<br>It OK?<br>\n')
print ('<br><a href="'+this_script+'">reload</a><br>\n')

# my_error('test message.all end!!')
print ('<br><br><br></body></html>\n')

exit()

書き出して、おわり。

最後に抜けていないか確認のため。

#!C:/xampp/Perl/bin/perl

# This is a perl header.
################## Another way to specify. ##################
#!C:/xampp/Perl/bin/perl5.32.1
#############################################################

#      information.       
# File      my_perl.cgi
# address1  http://localhost/perl_test/my_perl.cgi
# address2  http://127.0.0.1/perl_test/my_perl.cgi
# environment  xampp:xampp/htdocs/perl_test/
# in xampp:xamp/perl/bin/perl5.32.1 

## script Start
$this_script = 'http://localhost/perl_test/my_perl.cgi';

$point_err = 'bol1_1';
$point_return = 'bol2_0';
$settig_msgA = 'NO Settig.';
$settig_msgB = 'NO Settig.';
$error_detail = 'No Error.';
sub my_error(error_detail){
	#callされた時点での変数内容に従う。
	if($point_err eq 'bol1_1'){
        print "Content-type:text/html\n\n";
        print "<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\"><title>Error</title></head><body>";
	}
	print "<h1>エラー発生(An error has occurred.)</h1><h2>detail $_[0]</h2><div style=\"background-color: #000066;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">$settig_msgA</div><div style=\"background-color: #006600;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">$settig_msgB</div><br>";
	
	if($point_return eq  'bol2_1'){
		return;
	}
	print"</body></html>\n";
	exit;
}

# &my_error('test error.');

print "Content-type:text/html\n\n";
print '<!DOCTYPE html><html lang="ja"><head><meta charset="UTF-8"><title>my perl</title></head><BODY BGCOLOR="#ffffff">'."\n";

$point_err = 'bol1_0';#    ここからはErrorでヘッダーが要らない。
$point_return = 'bol2_1';# ここからはError表示後戻ってくる。

print <<MY_EOF ;
<h1>test system</h1>
<p>日本語を話せる、システムです。「This is a system that allows you to speak Japanese.<br>
カンニングペーパー「コピペオンライン英和翻訳 Multilingal Online Translation』」はMicrosoftストアーで。<br>
The cheat sheet "Copy and Paste Online English-Japanese Translation 『Multilingal Online Translation』" is available at the Microsoft Store.<br>
ブラウザ、拡張機能もお忘れなく。わからない時は、質問AIですよ。「Don't forget your browser and extensions. When you don't understand, there is a question AI.</p><br>
MY_EOF

###### 時間取得
sub time_get {
	$date_sec = time;
	($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($date_sec);
	@week = ('','','','','','','');
	$m_week = $week[$wday]; #koko2013/02/21
# 日時のフォーマット
	$full_date = sprintf("%04d/%02d/%02d(%s) %02d:%02d:%02d",$year+1900,$mon+1,$mday,$week[$wday],$hour,$min,$sec);
	$date = sprintf("%04d/%02d/%02d",$year+1900,$mon+1,$mday);
	$date1 = sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec);
	$date2 = sprintf("%04d年%02d月%02d日",$year+1900,$mon+1,$mday);
	$date3 = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
	$return_hour=$hour;
}


# 受信
if ($ENV{'REQUEST_METHOD'} eq "POST") {
	$post_flag = 1;
	if ($ENV{'CONTENT_LENGTH'} > 51200) { &my_error("投稿量が大きすぎます"); }
	read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
} else {
	$post_flag = 0;
	$query = $ENV{'QUERY_STRING'};
	if(length($query) > 15){&my_error("GETは受け付けていません。");}
}

$tmp_q_m = '<b>get or post.</b>:'.length($query).'<br>query:'.$query;
$settig_msgA = $tmp_q_m;
&my_error('testエラー Test query.<b>test.</b>');

#
#
foreach ( split(/&/, $query) ) {
	($key, $val) = split(/=/);
	
	$key =~ tr/+/ /;
	$key =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg;
	$key =~ s/&/&amp;/g;
	$key =~ s/</&lt;/g;
	$key =~ s/>/&gt;/g;
	$key =~ s/\r\n/<br>/g;
	$key =~ s/\r|\n/<br>/g; #key end	
	$val =~ tr/+/ /;
	$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
	$val =~ s/\r\n/<br>/g;
	$val =~ s/\r|\n/<br>/g;
	
	if($key eq 'comment'){
		$come = $val;
		$come =~ s/<br>/\n/g;
	}
	#
	#
	$my_hash{$key} = $val;
}

&my_key_value();

sub my_key_value(){
	foreach $key (keys %in) {
		print "key=$key value=$in{$key}<br>\n";
	}
}
# &my_key_value();

&time_get();

print <<MY_EOF ;
<br>
現在の日付と時刻: $date_sec<br>
$full_date Japanise style. きょうは、$date2 で時計は $date3<br>
これをComment欄に貼り付けでご利用してください。"%E6%97%A5%E6%9C%AC%E8%AA%9E%E9%9D%9E%E5%AF%BE%E5%BF%9C"<br>
<!-- <form action="$this_script" method="GET"> -->
<form action="$this_script" method="POST">
<table border=0 cellspacing=1>
<tr><td><b>name</b></td><td><input type=text name=name size=28 value="$my_hash{'name'}" maxlength="12" class=f></td></tr>
<tr><td><b>submit</b></td><td><input type=text name=subm size=100 value="$my_hash{'subm'}" maxlength="100"class=f></td></tr>
<tr><td colspan=2><b>comment</b><br><textarea cols=70 rows=7 name=comment wrap="soft" class=f>$come</textarea></td></tr>
<tr><td><b>url</b></td><td><input type=text size=52 name=url value="$my_hash{'url'}" maxlength="60" class=f></td></tr>'
<tr><td><input type=submit value="submit"></td><td><input type=reset value="reset"></td></tr>
</form></table><br>
<b><font color="#ff00ff">receives</font></b><br>
name=$my_hash{'name'}<br>comment<br>$my_hash{'comment'}<br>It OK?<br>
<br><a href="$this_script">reload</a><br>
MY_EOF

# &my_error('test message.all end!!');
print "<br><br><br></body></html>\n";

exit;

続いて

#!C:/Python/python -X utf8
# coding=utf-8

# This is a python header. 
################## python(anconda header) ###################
#!C:/anaconda/python -X utf8
# coding=utf-8
#############################################################

#      information.       
# File      my_python.cgi
# address1  http://localhost/python_test/my_python.cgi
# address2  http://127.0.0.1/python_test/my_python.cgi
# environment  xampp:xampp/htdocs/python_test/
# outside:Python/python 3.12.1

## script Start
this_script = 'http://localhost/python_test/my_python.cgi'

point_err = bool(1)
point_return = bool(0)
settig_msgA = 'NO Settig.'
settig_msgB = 'NO Settig.'
error_detail = 'No Error.'
def my_error(error_detail):
    if point_err:
        print ("Content-type:text/html\n\n")
        print ('<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\"><title>Error</title></head><body>')
    print ('<h1>エラー発生(An error has occurred.)</h1><h2>detail :'+error_detail+'</h2><div style=\"background-color: #000066;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">'+settig_msgA+'</div><div style=\"background-color: #006600;color: #cccccc;font-size: 12px;margin: 3px;padding: 3px;\">'+settig_msgB+'</div><br>')
    if point_return:
        return
    print ('</body></html>\n')
    exit()
    
# my_error('オープン前エラー Occurrence before opening <b>test.</b>')

print ('Content-type:text/html'+'\n'+'\n')
print ('<!DOCTYPE html><html lang=\"ja\"><head><meta charset=\"UTF-8\"><title>my pyton</title></head><BODY BGCOLOR=\"#ffffff\">\n')
point_err = bool(0)
# ここからはErrorでヘッダーが要らない。
point_return = bool(1)
# ここからはError表示後戻ってくる。
print ('<h1>test system</h1>'+'\n')
print ('<p>日本語を話せる、システムです。「This is a system that allows you to speak Japanese.」<br>\n')
print ('カンニングペーパー「コピペオンライン英和翻訳 『Multilingal Online Translation』」はMicrosoftストアーで。<br>\n')
print ('The cheat sheet \"Copy and Paste Online English-Japanese Translation 『Multilingal Online Translation』\" is available at the Microsoft Store.<br>\n')
print ('ブラウザ、拡張機能もお忘れなく。わからない時は、質問AIですよ。「Don\'t forget your browser and extensions. When you don\'t understand, there is a question AI.」</p><br>\n')

import datetime
now = datetime.datetime.now()
formatted_date = now.strftime("%Y/%m/%d %H:%M:%S")
it_day = now.strftime("%Y年%m月%d日")
it_time = now.strftime("%H時%M分%S秒")

# 受信
import re
import sys
import os

req_met = os.environ.get('REQUEST_METHOD')
if req_met == 'POST':
    for query in sys.stdin:
        os.environ.get('CONTENT_LENGTH')
        pass
else :
    query = os.environ.get('QUERY_STRING')
    if len(query) > 0 and req_met != 'POST':
        tmp_q_m = '<b>not post.</b>:'+str(len(query))+'<br>query:'+query
        settig_msgB = tmp_q_m
        # 受信したアドレスバーに付いている情報をBに入れておく。2行は最終的に要らない。
if len(query) > 10 :
    language = len(query)

tmp_q_m = '<b>get or post.</b>:'+str(len(query))+'<br>query:'+query
settig_msgA = tmp_q_m
my_error('testエラー Test query.<b>test.</b>')

my_hash = {}
#my_hkey_list0 = list(my_hash.keys())
my_hash['name'] = ''
my_hash['subm'] = ''
my_hash['comment'] = ''
my_hash['url'] = ''
my_hash['l_tim'] = formatted_date
my_hash['to_day'] = it_day
# 一応、使うhash(連想配列)のkeyとValue(値)を初期化して置く。
come = ''

key_myh = list(my_hash.keys())

import urllib.parse
key0=''
value0=''
buf_arrey = query.split("&")
from urllib.parse import parse_qs

if "" != buf_arrey:

    for my_buf in buf_arrey:
        
        mytem_buf = my_buf
        mytem_buf += '='
        key_val_arry = mytem_buf.split("=")
        key0 = key_val_arry[0]
        value0 =key_val_arry[1]
        
        key0 = re.sub(r'\+', ' ', key0)
        key0 = re.sub(r'%([0-9a-fA-F][0-9a-fA-F])', lambda x: chr(int(x.group(1), 16)), key0)
     #  key0 =  urllib.parse.unquote(key0)        
        key0 = re.sub(r'&', '&amp;', key0)
        key0 = re.sub(r'<', '&lt;', key0)
        key0 = re.sub(r'>', '&gt;', key0)
        key0 = re.sub(r'\r\n', '<br>', key0)
        key0 = re.sub(r'\r|\n', '<br>', key0)
        my_key = key0
        value0 = re.sub(r'\+', ' ', value0)
        # 私が馬鹿なのでここは出来ません。
     #  value0 = re.sub(r'%([0-9a-fA-F][0-9a-fA-F])', lambda x: chr(int(x.group().encode('utf-8').decode('ascii', 'ignore'), 16)), value0)
        value0 = re.sub(r'%([0-9a-fA-F][0-9a-fA-F])', lambda x: chr(int(x.group(1), 16)), value0)
        # I don't have the power to change it.       
        # value0 = re.sub(r'\x', '%', value0)
        value0 = urllib.parse.unquote(value0)        
        value0 = re.sub(r'&', '&amp;', value0)
        value0 = re.sub(r'<', '&lt;', value0)
        value0 = re.sub(r'>', '&gt;', value0)
        value0 = re.sub(r'\r\n', '<br>', value0)
        value0 = re.sub(r'\r|\n', '<br>', value0)
        my_val = value0
        if my_key == 'comment':
            value0 = re.sub(r'<br>', '\n', value0)
            come = value0

        key_c=0
        for key_myh_s in key_myh:
            if key0 == key_myh_s:
                key_c=1

        if key_c==0:
            if "" != my_val:
                my_val =  value0

        #I can't get around to it, so I'll try putting it out.
        my_hash[my_key] = my_val
        # print (f'key={my_key} value={my_val}<br>\n')
# end field。

def my_key_value():
    key_list0 = list(my_hash.keys())
    print(key_list0)
    print ('<br>\n')
    for i, val0 in enumerate(key_list0):
        if i == len(key_list0) - 1:
            print('last: '+val0+' :'+my_hash[val0]+'<br>\n')
        else:
            print('middle '+val0+' :'+my_hash[val0]+'<br>\n')

my_key_value()

print('<br>\n')
print("現在の日付と時刻: ", now)
print('<br>'+formatted_date+' Japanise style. きょうは、'+it_day+'で時計は'+it_time+'<br>\n')
print ('これをComment欄に貼り付けでご利用してください。\"%E6%97%A5%E6%9C%AC%E8%AA%9E%E9%9D%9E%E5%AF%BE%E5%BF%9C\"<br>\n')
#print ('<form action=\"'+this_script+'\" method=\"GET\">\n')
print ('<form action=\"'+this_script+'\" method=\"POST\">\n')
print ('<table border=0 cellspacing=1>\n')
print ('<tr><td><b>name</b></td><td><input type=text name=name size=28 value=\"'+my_hash['name']+'\" maxlength=\"12\" class=f></td></tr>\n')
print ('<tr><td><b>submit</b></td><td><input type=text name=subm size=100 value=\"'+my_hash['subm']+'\" maxlength=\"100\"class=f></td></tr>'+'\n')
print ('<tr><td colspan=2><b>comment</b><br><textarea cols=70 rows=7 name=comment wrap=\"soft\" class=f>'+come+'</textarea></td></tr>'+'\n')
print ('<tr><td><b>url</b></td><td><input type=text size=52 name=url value=\"'+my_hash['url']+'\" maxlength=\"60\" class=f></td></tr>'+'\n')
print ('<tr><td><input type=submit value=\"submit\"></td><td><input type=reset value=\"reset\"></td></tr>\n')
print ('</form></table><br>\n')
print('<b><font color="#f0f">receives</font></b><br>\n')
print ('name='+my_hash['name']+'<br>comment<br>'+my_hash['comment']+'<br>It OK?<br>\n')
print ('<br><a href="'+this_script+'">reload</a><br>\n')

# my_error('test message.all end!!')
print ('<br><br><br></body></html>\n')

exit()

おわり。
皆様の理解に繋がればと、思い例として出しました。力不足があり、満足できないところは、皆様のご努力で解決に至る事を、望みます。
x は「Space」x「Space」で、定数は分かるし(x)で関数は、分かるのだが・・・? xとXは検索では区別しない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0