SQLの窓

2011年09月18日


VB.net : COMの Msxml2.ServerXMLHTTP を使用して Google のURL短縮サービスを使用する( JSON )



パッケージにはすぐ実行できる server_xmlhttp.exe が入っていますが、
同じディレクトリに MSXML2.dll が必要です

★ MSXML2.dll( Msxml2.ServerXMLHTTP参照用 : 同梱しています )
★ server_xmlhttp.exe APIキー URL で実行


以下のページは、Google の API の内容を記述したページです
Google URL Shortener API

アカウントでログインして、APIs Console にアクセスしてAPI キーを取得できます




※ ここの API で戻されるのは、JSONです
※ POST でデータを取得します
※ この API で、URL エンコードは必要ありません

簡単な JSON なので、文字列処理で結果を取得しています( Split、Replace )

Imports myCom

Module Module1

	Sub Main()

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

		' タイムアウトの設定
		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)

		' 呼び出す URL を設定
		Dim URL As String = "https://www.googleapis.com/urlshortener/v1/url"

		' 変換元の文字列を引数から取得する
		' 空白を指定したい場合は、"文字列 文字列" のように指定する
		Dim arguments As String() = Environment.GetCommandLineArgs()
		' 引数は2つ許可
		if arguments.Length <> 3 then
			Console.WriteLine("引数を指定して下さい")
			Return
		end if

		' 第一引数は APIキー
		URL += "?key=" + arguments(1)

		' 第ニ引数は URL
		Dim TargetURL As String = arguments(2)

		' 結果
		Console.WriteLine( URL )

		' 送信データ
		Dim SendData As String = "{""longUrl"": """ + TargetURL + """}"

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

		' HTTP ヘッダをセット( Google の仕様での要求内容 )
		ServerXML.SetRequestHeader("Content-Type","application/json") 

		' 送信
		ServerXML.send(SendData)

		' テキストとして表示
		Console.WriteLine(ServerXML.responseText)

		' JSON を String として分解
		Dim value As String = ServerXML.responseText

		' 区切り文字列でテキストデータ全体を分割
		Dim stringSeparators As String() = {","}
		Dim myParamArray1 As String() = value.Split(stringSeparators, StringSplitOptions.None)

		value = myParamArray1(1)
		stringSeparators(0) = ": "
		myParamArray1 = value.Split(stringSeparators, StringSplitOptions.None)

		value = myParamArray1(1)
		value = value.Replace("""", "")

		' 結果
		Console.WriteLine( value )

		Console.ReadLine()

	End Sub

End Module

関連する記事

ServerXMLHTTP60(Msxml2.ServerXMLHTTP) 用の dll は同梱していますが、SDK より自分で
作成する場合は、以下のリンク先のページ中の「.NET から COM を使う」のリンク先を参照して
下さい

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


VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[p.tl] を使用する
VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[bit.ly] を使用する( XML と TEXT )
PHP : Google のURL短縮APIを呼び出す関数


posted by lightbox at 2011-09-18 14:52 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[bit.ly] を使用する( XML と TEXT )



パッケージにはすぐ実行できる server_xmlhttp.exe が入っていますが、
同じディレクトリに MSXML2.dll が必要です

★ MSXML2.dll( Msxml2.ServerXMLHTTP参照用 : 同梱しています )
★ server_xmlhttp.exe ユーザ名 APIキー URL で実行


以下のページは、bit.ly の API の内容を記述したページです
bitly REST API method documentation

アカウントでログインして、http://bitly.com/a/your_api_key にアクセスしてAPI キーを取得できます
※ ここの API で戻されるのは、JSON と XML と TEXTです

ここでは、XML と TEXT の処理を記述しています
Imports System.Web
Imports myCom

Module Module1

	Sub Main()

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

		' タイムアウトの設定
		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)

		' 呼び出す URL を設定
		Dim URL As String = "http://api.bitly.com/v3/shorten"

		' 変換元の文字列を引数から取得する
		' 空白を指定したい場合は、"文字列 文字列" のように指定する
		Dim arguments As String() = Environment.GetCommandLineArgs()
		' 引数は3つ許可
		if arguments.Length <> 4 then
			Console.WriteLine("引数を指定して下さい")
			Return
		end if

		' 第一引数は ユーザ名
		URL += "?login=" + arguments(1)

		' 第一引数は APIキー
		URL += "&apiKey=" + arguments(2)

		' 第二引数は URL
		Dim TargetURL As String = arguments(3)

		' 送る為に文字列を URL エンコードする
		' System.Web.HttpUtility.UrlEncode
		TargetURL = HttpUtility.UrlEncode(TargetURL)

		' 直接 URL のみを取得用を同時に作成( 最後に実行 )
		Dim TextGet As String = URL + "&longUrl=" + TargetURL + "&format=txt"

		' 元の URL と フォーマットを追加
		URL += "&longUrl=" + TargetURL + "&format=xml"

		' 結果
		Console.WriteLine( URL )

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

		' 送信
		ServerXML.send()

		' XML をテキストとして表示
		Console.WriteLine(ServerXML.responseText)

		' XML を DOMDocument として取得
		Dim myDom As myCom.DOMDocument60 = ServerXML.responseXML

		' 対象のノードリストを取得
		Dim nodeList As IXMLDOMNodeList = myDom.getElementsByTagName("url")

		' 対象のノードを取得
		Dim node As IXMLDOMNode = nodeList.item(0)

		' テキストノードを取得
		Dim node2 As IXMLDOMNode = node.firstChild()

		' テキストノードの値( 目的の内容 ) を取得
		Dim value As Object = node2.nodeValue()

		' 結果
		Console.WriteLine( value.ToString() )

		' --------------------------------------------------

		'TEXT で取得
		ServerXML.open("GET", TextGet, False)

		' 送信
		ServerXML.send()

		' テキストとして表示
		Console.WriteLine("テキストフォーマットで取得 : " + ServerXML.responseText)

		Console.ReadLine()

	End Sub

End Module

関連する記事

ServerXMLHTTP60(Msxml2.ServerXMLHTTP) 用の dll は同梱していますが、SDK より自分で
作成する場合は、以下のリンク先のページ中の「.NET から COM を使う」のリンク先を参照して
下さい

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


VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[p.tl] を使用する
VB.net : COMの Msxml2.ServerXMLHTTP を使用して Google のURL短縮サービスを使用する( JSON )


posted by lightbox at 2011-09-18 13:46 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[p.tl] を使用する( JSON )


( Json.NET 4.0 Release 2 のドキュメントと readme とバイナリを同梱 )
オンラインドキュメント

パッケージにはすぐ実行できる server_xmlhttp.exe が入っていますが、
同じディレクトリに Newtonsoft.Json.Net35.dll と MSXML2.dll が必要です

★ Newtonsoft.Json.Net35.dll ( Json.NET用 : 同梱しています )
★ MSXML2.dll( Msxml2.ServerXMLHTTP参照用 : 同梱しています )
★ server_xmlhttp.exe APIキー URL で実行


以下のページは、p.tl の API の内容を記述したページです
WebAPI │ URL短縮サービス[p.tl]

メールアドレスより、API キーを取得できます
※ ここの API で戻されるのは、JSON フォーマットのみです

関係する記事

Json.NET を使用して JSON 文字列を VB.net で使用する( 逆シリアライズ )

※ JSON の処理は外部ライブラリ(Json.NET)を使っています

Imports System.Web
Imports myCom
Imports Newtonsoft.Json 
Imports Newtonsoft.Json.Linq

Module Module1

	Sub Main()

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

		' タイムアウトの設定
		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)

		' 呼び出す URL を設定
		Dim URL As String = "http://p.tl/api/api_simple.php"

		' 変換元の文字列を引数から取得する
		' 空白を指定したい場合は、"文字列 文字列" のように指定する
		Dim arguments As String() = Environment.GetCommandLineArgs()
		' 引数は二つ許可
		if arguments.Length <> 3 then
			Console.WriteLine("引数を指定して下さい")
			Return
		end if

		' 第一引数は APIキー
		URL += "?key=" + arguments(1)

		' 第二引数は URL
		Dim TargetURL As String = arguments(2)

		' 送る為に文字列を URL エンコードする
		' System.Web.HttpUtility.UrlEncode
		TargetURL = HttpUtility.UrlEncode(TargetURL)

		URL += "&url=" + TargetURL

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

		' 送信
		ServerXML.send()

		Console.WriteLine(ServerXML.responseText)

		' 逆シリアライズ
		' http://json.codeplex.com/ よりダウンロードした Newtonsoft.Json.Net35.dll を使う
		Dim JsonObject As Object = JsonConvert.DeserializeObject( ServerXML.responseText )

		' 対象が解っている場合の読み取り
		Console.WriteLine( JsonObject("short_url") )

		' プロパティで一覧参照
		' Imports Newtonsoft.Json.Linq
		Dim jp As JProperty

		For Each jp In JsonObject
			' jp.Value は JToken
			Console.WriteLine( jp.Name + " : " + jp.Value.ToString() )
		Next

		Console.ReadLine()

	End Sub

End Module

関連する記事

ServerXMLHTTP60(Msxml2.ServerXMLHTTP) 用の dll は同梱していますが、SDK より自分で
作成する場合は、以下のリンク先のページ中の「.NET から COM を使う」のリンク先を参照して
下さい

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


VB.net : COMの Msxml2.ServerXMLHTTP を使用して URL短縮サービス[bit.ly] を使用する( XML と TEXT )
VB.net : COMの Msxml2.ServerXMLHTTP を使用して Google のURL短縮サービスを使用する( JSON )


posted by lightbox at 2011-09-18 12:40 | VB.NET : 通信 | このブログの読者になる | 更新情報をチェックする

2011年09月11日


VB.net : 「ファイルを開くダイアログ」のパラメータを単純なテキストファイルより取得する

テキストファイルは、メモ帳で以下のようにして作成します
C:\
HTML|*.html;*.htm|CSS|*.css|JavaScript|*.js|全てのファイル|*.*
4
★ ファイルを選択してください ★
True
True
True
True は、Boolean.Parse によって変換します。True と False 以外はエラーと なるので注意して下さい。 文字列配列による Split は第二引数にオプションが必要です。ここでは通常の StringSplitOptions.None を指定しています
Imports System.IO
Imports System.Text
Imports System.Windows.Forms

Module Module1

	Sub Main()

		' 文字列と Boolean 変換テスト
		Console.WriteLine(Boolean.TrueString)
		Console.WriteLine(Boolean.Parse("true"))

		Console.ReadLine()

		' パラメータファイルを一括読み込み
		Dim SJIS_Enc As Encoding = Encoding.GetEncoding(932)
		Dim sr As StreamReader = New StreamReader("param.txt", SJIS_Enc)
		Dim text As String = sr.ReadToEnd()
		Console.WriteLine(text)
		sr.Close()

		' CRLF を区切り文字列としてテキストデータ全体を分割
		Dim stringSeparators As String() = {Microsoft.VisualBasic.Constants.vbCrLf}
		Dim myParamArray As String() = text.Split(stringSeparators, StringSplitOptions.None)

		For Each strMember As String In myParamArray
			Console.WriteLine(strMember)
		Next

		Console.ReadLine()

		' 取得した文字列の配列を使って「ファイルを開くダイアログ」を表示
		Dim ofd As New OpenFileDialog()

		ofd.InitialDirectory = myParamArray(0)
		ofd.Filter = myParamArray(1)
		ofd.FilterIndex = myParamArray(2)
		ofd.Title = myParamArray(3)
		ofd.RestoreDirectory = Boolean.Parse(myParamArray(4))
		ofd.CheckFileExists = Boolean.Parse(myParamArray(5))
		ofd.CheckPathExists = Boolean.Parse(myParamArray(6))

		'ダイアログを表示する
		If ofd.ShowDialog() = DialogResult.OK Then
			Console.WriteLine(ofd.FileName)
		End If

		Console.ReadLine()

	End Sub

	'C:\
	'HTML|*.html;*.htm|CSS|*.css|JavaScript|*.js|全てのファイル|*.*
	'4
	'★ ファイルを選択してください ★
	'True
	'True
	'True

End Module

関連する記事

VB.net での テキストファイルの読み書きを、
出力時のみキャラクタセット毎に条件コンパイル指定する


posted by lightbox at 2011-09-11 15:36 | VB.NET : ベーシック | このブログの読者になる | 更新情報をチェックする

VB.net : CSVによるインポート用ファイルの作成( つまりエクスポート )



接続処理等、その他のコードは上からダウンロードしてご確認下さい。
テキストファイルのエンコードに関しては、以下を参照して下さい

VB.net での テキストファイルの読み書きを、
出力時のみキャラクタセット毎に条件コンパイル指定する

INSERT 文でのエクスポートは以下を参照して下さい

VB.net : insert 構文によるインポート用ファイルの作成( つまりエクスポート )

データベースは MySQL を使っていますが、手法としてはどの RDBMS でも同じです
INSERT 文作成との違いは、Excel 等のインポートするアプリケーションの都合を
考える事です。

1) 一行目は列名リストで、ダブルクォートで囲う
2) NULL データは、数値型は 0 に変更し、それ以外は空文字列 "" とする
3) 文字列型と、日付型はデータをダブルクォートで囲う

※ ここでは、NULL データを NULL で戻す事を想定していませんが、考慮する場合は
※ インポートするアプリケーションの仕様に合わせて作り直す必要があります。
' ********************************************************
' CSV用データ取得
' ********************************************************
Function GetValue( myReader As OdbcDataReader, _
	strName As String) As String

	Dim ret As String = ""
	Dim fld As Integer = 0
	Dim TypeName As String

	' 指定された列名より、テーブル内での定義順序番号を取得
	fld = myReader.GetOrdinal(strName)
	' 定義順序番号より、NULL かどうかをチェック
	If myReader.IsDBNull(fld) Then
		' NULL の場合
		ret = ""
	Else
		ret = myReader.GetValue(fld).ToString()
	End If

	' データ型の取得
	TypeName = myReader.GetFieldType(fld).ToString()

	' 文字列と日付の場合は、ダブルクォートで囲う
	if TypeName = "System.String" or TypeName = "System.DateTime" then
		ret = """" + ret + """"
	else
		' 数値で空の場合は 0 に変更する
		if ret = "" then
			ret = 0
		end if
	end if

	' 列の値を返す
	Return ret

End Function

ソースコードの主要部分を全て読む

posted by lightbox at 2011-09-11 14:25 | VB.NET : データベース | このブログの読者になる | 更新情報をチェックする

VB.net : insert 構文によるインポート用ファイルの作成( つまりエクスポート )



接続処理等、その他のコードは上からダウンロードしてご確認下さい。テキストファイルのエンコードに関しては、以下を参照して下さい

VB.net での テキストファイルの読み書きを、出力時のみキャラクタセット毎に条件コンパイル指定する

データベースは MySQL を使っていますが、手法としてはどの RDBMS でも同じです。テーブル名を渡して自動的に作成する為に、OdbcDataReaderGetName というメソッドで列名を取り出しています。

また、データ型に応じて insert 構文のデータ部分を考慮している部分が以下のコードになります。NULL の扱いと、文字列と日付の場合は、シングルクォートで囲うという処理が重要な部分となります

データ型は、VB.net のネイティブな型ですが、この程度の処理であればこれで問題はありません。
( DB にとってのネイティブな型はもう少し面倒な処理をする必要があります )
' ********************************************************
' SQL文作成用列データ取得
'
' 列データを文字列として取得しますが、NULL の場合は
' "NULL" という文字列を返します
' ********************************************************
Function GetValue( myReader As OdbcDataReader, _
	strName As String) As String

	Dim ret As String = ""
	Dim fld As Integer = 0
	Dim TypeName As String

	' 指定された列名より、テーブル内での定義順序番号を取得
	fld = myReader.GetOrdinal(strName)
	' 定義順序番号より、NULL かどうかをチェック
	If myReader.IsDBNull(fld) Then
		' NULL の場合
		ret = "NULL"
	Else
		' NULL でなければ内容をオブジェクトとして取りだして文字列化する
		TypeName = myReader.GetFieldType(fld).ToString()

		' 文字列と日付の場合は、シングルクォートで囲う
		if TypeName = "System.String" or TypeName = "System.DateTime" then
			ret = "'" + myReader.GetValue(fld).ToString() + "'"
		else
			ret = myReader.GetValue(fld).ToString()
		end if
	End If

	' 列の値を返す
	Return ret

End Function




ソースコードの主要部分を全て読む

posted by lightbox at 2011-09-11 14:06 | VB.NET : データベース | このブログの読者になる | 更新情報をチェックする
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 終わり