SQLの窓

2018年05月15日


Ruby 2.4 で GET/POST メソッドを想定した CGI 用の簡易テンプレートを作成してみました

Ruby 2.4.0 リファレンスマニュアル

Python 3.6 で GET/POST メソッドを想定した CGI 用の簡易テンプレートを作成してみました と同様です。HTML 部分はヒアドキュメント作成し、GET でも POST でも動作します。

require "cgi"
cgi = CGI.new

puts "Content-Type: text/html; charset=utf-8"
puts  "Expires: Thu, 19 Nov 1981 08:52:00 GMT"
puts "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
puts "Pragma: no-cache"
puts

params = cgi.params

fld_names = {"氏名" => "field1", "フリガナ" => "field2"}
fld_names.each { |key, value|
	if params[value].empty? then
		params[value] = ""
	end
}

out_client = <<HTML
<html>
<head>
</head>
<body>
	<form>
		<p>氏名 : <input type="text" name="#{fld_names["氏名"]}" value="#{params[fld_names["氏名"]][0]}"></p>
		<p>フリガナ : <input type="text" name="#{fld_names["フリガナ"]}" value="#{params[fld_names["フリガナ"]][0]}"></p>
		<p>送信 : <input type="submit" name="send" value="送信"></p>
	</form>
</body>
</html>
HTML

print out_client

Hash#each

※ ドキュメントの参照
fld_names = {"氏名" => "field1", "フリガナ" => "field2"}
fld_names.each { |key, value|
	処理
}
ハッシュのキーと値を引数としてブロックを評価します。 Array#empty? ※ ドキュメントの参照
require "cgi"
cgi = CGI.new
params = cgi.params
if params[value].empty? then
	params[value] = ""
end
同名の値がブラウザより送られて来る事を想定して、params[value] は配列になります。なので、普段は先頭の params[value][0] を使用する事になります。ですから本来ならば、params[value] = [""] ですが、後続の処理的にも結果的にも同じなので、単純に "" をセットしています 式展開 ※ ドキュメントの参照
<input type="text" name="#{fld_names["氏名"]}" value="#{params[fld_names["氏名"]][0]}">
"(ダブルクォート) で作成されたリテラルの中に #{} の形式で変数や文字列を返すメソッドを埋め込むんで、内容に置き換える事ができます。 AN HTTP Server の設定 テストにはまだまだ使える(重宝する) AN HTTP Server の正しい使用方法
posted by lightbox at 2018-05-15 14:49 | Ruby | このブログの読者になる | 更新情報をチェックする

2014年07月25日


Ruby(mechanize) で PHP からの JSON 経由でデータベース(MySQL)の値を取得

Ruby でデータベースの処理を直接するより、普通に PHP で処理して結果を mechanize で使うと簡単になります。PHP では 現在あらゆるデータベースに対してアクセスする為の情報が豊富なので、Windows 環境でほぼ困る事が無いので、Ruby をスクリプトとして運用で使うのは非常にメリットがあると思います。

json.php(MySQLにアクセスして JSONを返す)
<?php
header( "Content-Type: text/plain; Charset=utf-8" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

$server = 'localhost';
$db_name = 'lightbox';
$user = 'root';
$password = 'パスワード';

// 接続
$connect = @ new mysqli($server, $user, $password, $db_name);
if ($connect->connect_error) {
	die('Connect Error (' . $connect->connect_errno . ') '
	. $connect->connect_error);
}

// クエリ
$result = $connect->query("select * from 社員マスタ where 社員コード = '0001'"); 
if ( !$result ) {
	die('クエリーに誤りがあります : ' . $connect->error );
}

// 読み出し
$row = $result->fetch_array(MYSQLI_BOTH);

// 開放
$result->close();

// 接続解除
$connect->close();

print json_encode($row);

?>


json_get.rb
#JSON 経由でデータベースの値を取得

require 'mechanize'

agent = Mechanize.new

agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
agent.follow_meta_refresh = true
agent.user_agent = 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'

page = agent.get("http://localhost/web/various/db_json/json.php")
obj = JSON.parse((page.body).force_encoding("utf-8"))

i = 0
while i < obj.length / 2
	print obj[i.to_s], "\n"
	i += 1
end

print obj["社員コード"],"\n"
print obj["氏名"],"\n"
print obj["フリガナ"],"\n"
print obj["所属"],"\n"
print obj["性別"],"\n"
print obj["作成日"],"\n"
print obj["更新日"],"\n"
print obj["給与"],"\n"
print obj["手当"],"\n"
print obj["管理者"],"\n"
print obj["生年月日"],"\n"




posted by lightbox at 2014-07-25 13:03 | Ruby | このブログの読者になる | 更新情報をチェックする

2014年07月19日


Ruby(mechanize) で Seesaa のエクスポート



本来は、HTA で画面を作って入力パラメータも設定して連携させたいですが、最新月をバックアップしたいのならばこれで十分です。

引数は、cgi に引き渡される(cgi['no'])ので、#{cgi['no']} で文字列内に埋め込んで展開させます。

seesaa_backup.rb
#Seesaa エクスポート

require "cgi"
cgi = CGI.new(:accept_charset => 'utf-8')

require 'mechanize'

agent = Mechanize.new

agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
agent.follow_meta_refresh = true
agent.user_agent = 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'

page = agent.get("https://ssl.seesaa.jp/www/pages/welcome/login/input")
form = page.form_with(:name => 'authpost')
form["member__email"] = "メールアドレス"
form["password"] = "パスワード"
page = form.submit

# 対象ブログのページ
page = agent.get("http://blog.seesaa.jp/cms/home/switch?blog_id=#{cgi['no']}")

# エクスポートページ
page = agent.get('http://blog.seesaa.jp/cms/tools/mt/export/input')

form = page.forms[1]

page = form.submit

print page.body

実行時は、Ruby 用のコマンドプロンプトから以下のように実行させます

ruby seesaa_backup.rb no=ブログ番号 > export.log

関連する記事


posted by lightbox at 2014-07-19 23:17 | Ruby | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり