SQLの窓

2014年07月24日


VB.net(2010) : COMの Msxml2.ServerXMLHTTP を使用して WEBアプリにバイナリデータを POST する

以下のように参照して下さい。


コンソールアプリケーションです。
Imports MSXML2
Imports System.IO

Module Module1

	Sub Main()
		' ****************************
		' http 通信用のオブジェクトを作成
		' ****************************
		Dim ServerXML As New ServerXMLHTTP60()

		' ****************************
		' 呼び出す URL を設定
		' ****************************
		Dim URL As String = "http://yourdomain/put/put.php"

		' ****************************
		' POST する為に開く
		' ****************************
		ServerXML.open("POST", URL, False)

		' ****************************
		' タイムアウトの設定
		' ****************************
		Dim lResolve As Integer = 60 * 1000
		Dim lConnect As Integer = 60 * 1000
		Dim lSend As Integer = 60 * 1000
		Dim lReceive As Integer = 60 * 1000
		ServerXML.setTimeouts(lResolve, lConnect, lSend, lReceive)

		' ****************************
		' ファイルを読み込む為のオブジェクト
		' ****************************
		Dim fs As New FileStream( _
		 "C:\user\web\web\put\winofsql.png", _
		 FileMode.Open, FileAccess.Read)

		' ****************************
		'ファイルを読み込むバイト型配列
		' ****************************
		Dim bs(fs.Length - 1) As Byte
		'ファイルの内容をすべて読み込む
		fs.Read(bs, 0, bs.Length)
		'閉じる
		fs.Close()

		' ****************************
		' 送信するデータの長さをヘッダにセット
		' ****************************
		ServerXML.setRequestHeader("Content-Length", bs.Length)
		' 送信
		ServerXML.send(bs)

		' ****************************
		' 結果の表示
		' ****************************
		Console.WriteLine(ServerXML.responseText)

		Console.ReadLine()
	End Sub

End Module

本来は、.vbs または .js を拡張子として持つスクリプトから実行するものです。

VBscript(または JScript) で簡単にバイナリファイルをアップロードする

参照した Imports MSXML2 によって、Framework からの処理が可能になっています。PHP 側は、スクリプトで利用した PHP と同じもので、バイト配列を直接 POST して PHP では以下のようにして受け取ります
<?
session_start();
$id = session_id();


$fp = fopen( "php://input", "r" );
$wfp = fopen( "image/$id.png", "w" );

while( $ret = fread( $fp, 4096 ) ) {

	fwrite( $wfp, $ret );

}

fclose($wfp);
fclose($fp);


print $id . ".png\n";
?>
で画像が保存されました


この PHP では http ヘッダを指定していませんので、php ソースのキャラクタセットは UTF-8N にする必要があります。他のキャラクタセットで php のソースコードを記述する必要がある場合は、http ヘッダで Content-Type の Charset を明示して下さい。

関連する記事

VB.net : COMの Msxml2.ServerXMLHTTP を使用して http 通信を行う



タグ:VB.NET com
posted by lightbox at 2014-07-24 21:07 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

2014年07月18日


Ruby(Mechanize) : ココログギャラリー名の変更

Ruby 2.0.0-p481 を Windows にインストールしてコマンドプロンプトから処理しています。

昔同様の処理を行っていましたが、NIFTY のログインの仕様が変わっていました。また、agent.follow_meta_refresh を使って Mechanize がページを取得するようになっています。結局は、とても短い簡潔なコードで更新できました
# ココログのギャラリー名の変更

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://sso.nifty.com/pub/login.cgi?service=cocologin&back=https%3a%2f%2fwww.cocolog-nifty.com%2fdispatch%2f&am=1.2.0")

# FORM に name 属性が設定されていたので、それで選択
form = page.form_with(:name => 'login')
form["username"] = "ユーザ"
form["password"] = "パスワード"
page = form.submit

# ギャラリー名の変更ページ
# set_id に番号をセット
page = agent.get("http://app.cocolog-nifty.com/t/app/gallery/configure?set_id=508074")

# FORM がひとつしか無かったので .first
form = page.forms.first
form["name"] = "ギャラリーA"
page = form.submit

print "update OK!"

以下は、昔さくらインターネットで動作していたコードです。

1) ENV の中は 環境変数( HTTP_* 等 )
2) sub は 1回 gsub は 全て
3) 式の改行は前の行に継続として演算子を残す
#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"

require "cgi"
cgi = CGI.new

ENV['GEM_HOME']="/home/lightbox/gems"
$LOAD_PATH.push('/home/lightbox/lib')

require 'rubygems'
require 'mechanize'

agent = WWW::Mechanize.new
#@nifty にログイン
page = agent.get("https://login.nifty.com/service/login")
form = page.forms.first
form["username"] = "ユーザID"
form["password"] = "パスワード"
page = form.submit

fp = open("./log_01.txt", "w")
fp.puts(page.body)
# 環境変数等を読みやすい形で出力
str = ENV.inspect
str = str.gsub(/,/,"\n")
fp.puts(str)
fp.close

# ************************************
# return : 
# <html><meta http-equiv="Refresh" content="0;URL=http://www.nifty.com/"></html>
# ************************************
print "login<br>"


# 対象ギャラリーの設定ページ
page = agent.get('http://app.cocolog-nifty.com/t/app/gallery/configure?set_id='+
	cgi['no'][0])
fp = open("./log_02.txt", "w")
fp.puts(page.body)
fp.close

# ************************************
# return : 
# <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
# <head>
# <meta http-equiv="Content-Type" content="text/html;charset=utf-8"></meta>
# <META
# 	HTTP-EQUIV="Refresh"
# 	CONTENT="0;URL=http://app.cocolog-nifty.com/t/app/gallery/configure?set_id=ギャラリー番号&amp;nwsThough=1"
# ></META>
# </head>
# <body>
# <!--result=ターゲット URL(CONTENTと同じ)-->
# </body>
# </html>
# ************************************
print "request target page<br>"

# 設定ページ
page = agent.get('http://app.cocolog-nifty.com/t/app/gallery/configure?set_id='+
	cgi['no'][0]+
	'&nwsThough=1')
fp = open("./log_03.txt", "w")
fp.puts(page.body)
fp.close

print "response real page<br>"

# 更新処理
form = page.forms.first
form["name"] = "_"+cgi['gn'][0]
form.submit
関連する記事


タグ:ruby Mechanize
posted by lightbox at 2014-07-18 10:59 | Ruby | このブログの読者になる | 更新情報をチェックする

2014年07月17日


Ruby : Seesaa の設定ページの「最新の情報に更新」ボタンを Ruby の mechanize で押す

コマンドプロンプトからのバッチ処理でテストしています。
( 32ビット Windows へのインストールは簡単に行えました )

概要

Seesaa では、一つのアカウントで複数のブログを作成できますが、ブログの設定を複数行う場合は結構面倒です。一度設定してしまえば、変更する機会はあまり多くはありませんが、それでも「設定」ページの最新の情報に更新はしばしば実行が必要になります

初期導入時で言えば、「設定」ページ以外にもいろいろ設定する場所も多く、一度に全て設定できるとしたら、Ruby の mechanize でしょう。

テストしてみるといとも簡単にできましたので、トップページ表示件数の更新部分も含めたサンプルです。
#Seesaa 設定ページの『最新の情報に更新』

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('https://blog.seesaa.jp/cms/home/switch?blog_id=ブログ番号')

# 設定ページ
page = agent.get('https://blog.seesaa.jp/pages/my/blog/settings/basics/edit/input')

form = page.form_with(:name => 'myform')

page = form.click_button(form.buttons[0])

# 以下は設定ページの「トップページ表示件数」の更新
#form["blog__index_page_cnt"] = "2"
#page = form.click_button(form.buttons[1])

print "seesaa : update : ok"

関連する記事


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

PowerShell2.0 : here-string と呼ばれるヒアドキュメント( here-string )の構文

get-help about_Quoting_Rules で表示されます。
( または、IE 上で 『mk:@MSITStore:C:\Windows\help\mui\0411\WindowsPowerShellHelp.chm::/html/cec5ab07-223d-4269-9362-d30c54a95193.htm』)

" の内部で $で始まる変数を書くと内容に置き換えられます。( PowerShell では here-string と表記されていますが、一般的なヒアドキュメントと同じです。 )

' の内部ではそのままの表記で再現されます

<Enter> は改行を意味するマニュアル用の表記方法です

要するに、@ 〜 @ の間を改行も含めて文字列として扱いましょうというものです。
形式 1:

  @"<Enter>
    <string> [string] ...<Enter>
  "@


形式 2:

  @'<Enter>
    <string> [string] ...<Enter>
  '@


どちらの形式でも、終わりの引用符を行の最初の文字にする必要があります。

(使用例)

$message = @"
Out-Host はコマンドの規定値なので、
文字列のみを記述するとそののまま表示されます。
"@

$message

一般的に、ヒアドキュメント内では、言語上のエスケープ等を気にせずに文字列を扱えるという特性があります


タグ:PowerShell
posted by lightbox at 2014-07-17 14:38 | PowerShell | このブログの読者になる | 更新情報をチェックする

PowerShell2.0 : 初めての PowerShell / ファイルのダウンロード (.NET Framework の利用)

Windows7 では PowerShell はデフォルトで利用できます。ですが、基本的には .NET Framework を利用したりするので一般的ではありません。プログラマ向きの面倒なものです。

PowerShell2.0 : 最初の設定( set-executionpolicy remotesigned の実行 )

特に、言語マニュアルというものがあるのでは無く、ヘルプから 『Windows PowerShell の About ヘルプ トピック』という解りにくところから探して行きます(本文のサンプルコードを参考にしていきます)。

ヘルプは、Windows ベースのグラフィック ユーザー インターフェイスでコマンドの実行ができる『Windows PowerShell ISE』から呼び出します



以下は、about_Automatic_Variables と言って、状態情報を格納する変数について書かれています。True や  False や Null はここにありますが他にもいろいろな値が用意されています

about_Automatic_Variables
(日本語テキストが必要な場合は、get-help about_Automatic_Variables > about_Automatic_Variables.txt を実行します)

(例)

$NULL
	NULL または空の値を格納します。文字列 "NULL" の代わりにこの変数
	を使用して、コマンドおよびスクリプトで NULL を表すことができます。
	空でない文字列またはゼロ以外の整数に変換されると、この文字列は
	TRUE として解釈されます。


また、以下は get-help Add-Type -full に書かれているサンプルを元にテストした、ファイルをダウンロードする為の二種類の簡単なコードです。後者は GUI のダウンロード進捗を示すダイアログが表示されます。

※ 前者はこちら
$obj = New-Object System.Net.WebClient
$obj.DownloadFile("http://winofsql.jp/image/winofsql.png", "C:\user\work\data\winofsql1.png")
$obj.Dispose()

▼ 6000 は、タイムアウト間隔 (ミリ秒単位)。 既定値は 100 秒です。
add-type -AssemblyName Microsoft.VisualBasic
$obj = New-Object Microsoft.VisualBasic.Devices.Network
$obj.DownloadFile(
	"http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.0.0-p481.exe?direct",
	"C:\user\work\data\rubyinstaller-2.0.0-p481.exe" ,
	"",
	"",
	$true,
	6000,
	$true 
)

タイムアウトは、指定した connectionTimeout 内にサーバーが応答しない場合に発生します
いずれも、出力ファイルのフォルダに対する権限を保有している必要があります。



タグ:PowerShell
posted by lightbox at 2014-07-17 01:30 | PowerShell | このブログの読者になる | 更新情報をチェックする

2014年07月15日


Seesaa の記事カテゴリをソートする IE 拡張



めったに使う事はありませんが、カテゴリが増えて来ると自分でさえ何があったか探してしまう事があります。また、それは多くなったからなので順序を変えるとなると結構面倒です。



このスクリプトをダウンロードして実行し、IE が実行中の場合はいったん終了して再度実行します。そうすると、右クリックで表示されるメニューに追加されます。※ 表示順のフィールドの中で右クリックして下さい

1) そのまま実行すると、カテゴリ名でソートされるのでアルファベットが最初になります。
2) SHIFT キーを押しながら実行すると、その逆になります。
3) CTRL キーを押しながら実行すると、記事数の多い順になります

※ 実行しても、「表示順の変更」ボタンを押すまで反映されません。

▼ アンインストールは以下のコマンドを実行して下さい。
reg delete "HKCU\Software\Microsoft\Internet Explorer\MenuExt\Seesaa 用カテゴリソート"




Seesaa独自タグ簡易リファレンス

posted by lightbox at 2014-07-15 17:04 | Seesaa プログ管理支援 | このブログの読者になる | 更新情報をチェックする
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 ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり