8月 8 2008
ruby (http)
サーバにhttpにてデータを送信する。httpsの方が安全だけど、これは後回し。httpだけだと、非常に簡単。鯖のrecv.phpは、受信したパラメータを表示するだけ。後々、受信したコード・時刻をデータベースに保存する処理を追加する。
[http.rb]
require ‘net/http’
Net::HTTP.version_1_2
Net::HTTP.start(‘192.168.1.100’, 80) { |http|
rc = http.post(‘/barcode/recv.php’, ‘COD=xxxxxxxxxxxxy&TIM=2008-08-08 00:00:00’)
puts rc.body
}
[recv.php]
<?
print_r($_POST);
?>
鎌倉観光 深谷霊園 インターンシップ
8月 9 2008
ruby (sqlite3)
やはりcsvファイルでは鯖へ送信したデータの更新がやりにくいって事で、sqlite3を使うことにする。用意するものはsqlite3-ruby-1.2.0-msvcrt-bin.zipと、sqlitedll-3_6_1.zip。sqlite3-rubyは、1.2.2があるみたいだけど、msvcrt版がないのでしょうがない。解凍後、sqllite3-rubyはruby install.rbし、sqlitedllはrubyをインスコしたbinディレクトリにcopyする。
dbの初期化をしなければいけないので、別に初期化プログラムを作成。
[bcr_initdb.rb]
require ‘sqlite3’
db = SQLite3::Database.new(“bcr.db”).execute_batch(<<-'EOD') CREATE TABLE BCR01 ( KEYCD INTEGER PRIMARY KEY, INFO01 VARCHAR(20) NOT NULL, INFO02 VARCHAR(20) NOT NULL, INFO03 INTEGER DEFAULT 0 ); EOD KEYCD 登録番号 INFO01 日時 INFO02 バーコード INFO03 送信済フラグ(0:未送信・1:送信済) 作成できたらテストしてみる。以下のプログラムはINSERT文をコメントアウトするとテーブルのダンププログラムとして使用できる。 [sqlite.rb] require 'sqlite3' db = SQLite3::Database.new('bcr.db') db.execute("INSERT INTO BCR01 (INFO01, INFO02) VALUES ('2008-08-08 00:00:00', 'xxxxxxxxxxxxx') "); rc = db.execute("SELECT * FROM BCR01 WHERE INFO03 = 0 ORDER BY KEYCD "); rc.each do |obj| p obj end
で、最後にバーコードリーダ処理ソフトを変更する。変更点は以下の3つ。
require ‘fastercsv’
↓
require ‘sqlite3’
# CSV write
FasterCSV.open(“recv.log”, “a”) { |csv|
csv << [day.strftime("%Y-%m-%d %H:%M:%S"), @bcd, '0'] } ↓ $db.execute(sprintf("INSERT INTO BCR01 (INFO01, INFO02) VALUES ('%s', '%s') ",day.strftime("%Y-%m-%d %H:%M:%S"), @bcd)) b = BCR.new ↓ $db = SQLite3::Database.new('bcr.db') b = BCR.new 鎌倉観光 深谷霊園 インターンシップ
By admin • computer(windows) • 0