2013年01月19日


Seesaa に VBScript でログインする

HTTP でアクセスするオブジェクトは、サーバー用クライアント用と二つありますが、現時点ではサーバー用が優れているように思われます。この場合(記事下のサンプルコード)は、おそらくクライアント用では動かないと思いますが、少なくともタイムアウトの設定が可能なのは、サーバー用です。

経験上、クッキーの処理はオブジェクトが自動的に引き継いでいるようなので、このサンプルではクッキーの処理はありません。しかし、WEB サービスのシステムとして突然 URL にアクセスしても拒否されるので( Seesaa では、POST する場合は事前に表示されたページのキーが必要です )正規表現での処理が必要になります。

これが理由で、ページの HTML 構成が変更されると、この手のアプリケーションは動かなくなるので注意が必要です。( 今回を含めて過去に2回変更しています )

実際のブラウザで処理してネットワークの情報を読み、どのような情報が必要かは各ブラウザの開発者用ツールを使って確認しますが、IE のそれは役に立たないので注意して下さい。Google Chrome か Firefox を使うと良いです。

POST する場合は、HTTP ヘッダに "application/x-www-form-urlencoded" を送るのは HTTP の仕様なので必ず必要ですが、POST も通常の POST 以外に "multipart/form-data; boundary=xxxxxxx" というバイナリデータを送る事が可能な仕様もあります。そのあたりの仕様はなかなか解りづらいですが、ここでは説明していません。

Seesaa のシステムも人間の作ったアプリケーションなので、完璧では無いので、この手のアプリで対応しようとする場合、首をかしげるような時もありますが、だいたいにおいて『結果オーライ』で深く考えないほうがいいと思います。あと、システム的な不明点もあり、どうしてもこのサンプルで返ってくるページが utf-8 ではなく SHIFT_JIS でかえって来ます。しかし、次の処理には関係無いので『ログイン』としてはこれで OK であると思います。

テキストファイルへの書き込みは、取得したページを確認できるようにする為で処理とは直接関係はありません。
' ***********************************************************
' サーバーオブジェクトの準備
' ***********************************************************
Set objHTTP = Wscript.CreateObject("Msxml2.ServerXMLHTTP")
lResolve = 60 * 1000
lConnect = 60 * 1000
lSend = 60 * 1000
lReceive = 60 * 1000

' ***********************************************************
' 正規表現用
' ***********************************************************
Set regEx = New RegExp
' ***********************************************************
' ページ書き込み用
' ***********************************************************
Set Fs = CreateObject( "Scripting.FileSystemObject" )

' ログインページの取得
Call objHTTP.Open("GET","https://ssl.seesaa.jp/auth",False)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send()

' ページ全体
strPage = objHTTP.responseText

' 書き込み専用(2)で、存在しない場合は作成(True)
Set OutObj = Fs.OpenTextFile( "page_login.html", 2, True )
OutObj.Write objHTTP.responseText
OutObj.Close

' 投稿用のキーを取得
regEx.IgnoreCase = True
regEx.Global = True
regEx.Pattern = "authpost""><input value=""([^""]+)"""
Set Matches = regEx.Execute( strPage )
For Each Match in Matches
	strPostKey = Match.SubMatches(0)
	Exit For
Next

Wscript.Echo strPostKey

' ***********************************************************
' ログイン用の情報
' ***********************************************************
' Seesaa のログインユーザ( メールアドレス )
emailData = ""
' Seesaa のログインパスワード
passData = ""
' 対象となるブログの ID
blogData = ""

' ***********************************************************
' ログイン ( POST )
' ***********************************************************
' ログイン URL
Call objHTTP.Open("POST","https://ssl.seesaa.jp/auth",False)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
strData = ""
strData = strData & "aXt=" & strPostKey
strData = strData & "&email=" & emailData
strData = strData & "&password=" & passData
strData = strData & "&return_to=http%3A%2F%2Fblog.seesaa.jp%2F"
Call objHTTP.SetRequestHeader("Content-Length",Len(strData))
Call objHTTP.Send(strData)

Set OutObj = Fs.OpenTextFile( "page_login_after.html", 2, True )
OutObj.Write objHTTP.responseText
OutObj.Close

関連する記事

Seesaa ブログのエクスポートを呼び出して全てをバックアップするスクリプト

VBScript で Seesaaブログへ禁止ワード一括登録( アップロード )




タグ:VBScript HTTP
posted by at 2013-01-19 23:15 | Comment(0) | Seesaa | このブログの読者になる | 更新情報をチェックする
SQLの窓全体の検索
Loading
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。