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 | このブログの読者になる | 更新情報をチェックする

2012年11月19日


HTML(ローカル) を使用して Facebook へ画像をアップロードする

『App ID/API Key』が必要です。以下の client_id のフィールドに API Key をセットして送信すると、Facebook にログインしていない場合は、ログイン画面が表示されるのでそこでログインすると、URL に access_token=アクセストークン の形でセットされているのでそれを取得します。

※ ログイン済の場合は Success と表示されるのでアドレスバーを見ます。

get_login.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<body>
<form action="https://www.facebook.com/dialog/oauth/">
<pre>
<input type="text" name="redirect_uri" value="http://www.facebook.com/connect/login_success.html">
<input type="text" name="response_type" value="token">
<input type="text" name="client_id">
<input type="text" name="scope" value="user_about_me,user_photos,read_stream,publish_stream">
<input type="submit" name="send" value="get login">
</pre>
</form>
</body>
</html>

『アクセストークン』を以下の該当部分( FORM の action の中 )にセットしてブラウザで実行してファイルをアップロードできます(メッセージも同時に投稿できます)

▼ UTF-8N で保存します
file_upload.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Facebook に画像アップロード</title>
</head>
<body>
<form method="post" action="https://graph.facebook.com/me/photos?access_token=アクセストークン" enctype="multipart/form-data">
<pre>
<input type="file" name="source">
<textarea name="message"></textarea>
<input type="submit" name="send" value="file upload">
</pre>
</form>
</body>
</html>





タグ:Facebook API
posted by at 2012-11-19 23:29 | Comment(0) | WEBサービス | このブログの読者になる | 更新情報をチェックする

2012年06月19日


既存の Google Chrome 拡張のカスタマイズ( ブラウザのクイックリンク )



この拡張は便利ですし、中身は難しい事を一切やっていないので、ちょっと知識があれば自分でカスタマイズできます。画像の下3つは追加したもので、上の部分も順序を入れ替えています。必要無いエントリは、コードの一番下の div 一列を削除するだけです。

1) Google Chrome の拡張フォルダへ移動
( このスクリプトで開くフォルダの中にある Extentions フォルダが拡張フォルダです )
2) plpjogfhobhpdcmcblieglnoooccfcmm フォルダに入る
3) 1.5_0\popup.html をエディタで開く
4) 以下のコードですべて置き換える
<style> 
body {
  overflow: hidden;
  margin: 0px;
  padding: 0px;
  background: white;
}
 
div:first-child {
  xmargin-top: 0px;
}
 
div {
  cursor: pointer;
  text-align: left;
  padding: 0px;
  
  width: 212px;
  height:38px;
  margin-top: 0px;
  background: #ffffff;
  background-image:url(Blank.png);
  background-position:center center;
  background-repeat:no-repeat;
}
div:hover {
  background-image:url(Hover.png);
}
table 
{
    border-collapse:collapse;
    padding:0;
    margin-left:2px;
    vertical-align:middle;
    font-family: verdana, Arial, Helvetica;
    font-size: 12px;
    font-weight:500;

}
</style> 


<body onload="Localise();">

    <script>
        function getLocal(sID, sDefault) {
            var sRes = chrome.i18n.getMessage(sID);
            if (sRes == "") sRes = sDefault;
            return(sRes);
        }

        function Localise() {
            document.getElementById("tB").innerHTML = getLocal("lbookmarks", "Bookmarks");
            document.getElementById("tH").innerHTML = getLocal("lhistory", "History");
            document.getElementById("tD").innerHTML = getLocal("ldownloads", "Downloads");
            document.getElementById("tE").innerHTML = getLocal("lextensions", "Extensions");
            document.getElementById("tP").innerHTML = getLocal("lplugins", "Plugins");
            document.getElementById("tM").innerHTML = getLocal("lmemory", "Memory");
            document.getElementById("tS").innerHTML = getLocal("lsettings", "Settings");
        }

    
        function xclick(ClickedItem) {
            var Clicked = ClickedItem.id.toString();
            var strURL = "";
            if (Clicked.charAt(0) == "c") {
                strURL = "chrome://";
                strURL += Clicked.substr(1);
                strURL += "/";
            }
            if (Clicked.charAt(0) == "a") {
                strURL = "about:";
                strURL += Clicked.substr(1);
                strURL += "/";
            }
            if (Clicked.charAt(0) == "w") {
                strURL = "http://goo.gl/";
                strURL += Clicked.substr(1);
            }
            chrome.tabs.create({ url: strURL, selected: true });
            window.close();
        }
    </script> 

    <div onclick="xclick(this);" id="csettings"><table><tr><td><img src="iSettings.png" /></td><td id=tS>Settings</td></tr></table></div>
    <div onclick="xclick(this);" id="cdownloads"><table><tr><td><img src="iDownloads.png" /></td><td id=tD>Downloads</td></tr></table></div>
    <div onclick="xclick(this);" id="cbookmarks"><table><tr><td><img src="iBookmarks.png" /></td><td id=tB>Bookmarks</td></tr></table></div>
    <div onclick="xclick(this);" id="chistory"><table><tr><td><img src="iHistory.png" /></td><td id=tH>History</td></tr></table></div>
    <div onclick="xclick(this);" id="cextensions"><table><tr><td><img src="iExtensions.png" /></td><td id=tE>Extensions</td></tr></table></div>
    <div onclick="xclick(this);" id="cplugins"><table><tr><td><img src="iPlugins.png" /></td><td id=tP>Plugins</td></tr></table></div>
    <div onclick="xclick(this);" id="amemory"><table><tr><td><img src="iMemory.png" /></td><td id=tM>Memory</td></tr></table></div> 

    <div onclick="xclick(this);" id="csettings/cookies"><table><tr><td><img src="iSettings.png" /></td><td>Cookies</td></tr></table></div>
    <div onclick="xclick(this);" id="w"><table><tr><td><img src="iBookmarks.png" /></td><td>URL短縮</td></tr></table></div> 
    <div onclick="xclick(this);" id="wg4lFF"><table><tr><td><img src="iBookmarks.png" /></td><td>Google+</td></tr></table></div> 

</body>

どういうわけか、SHIFT_JIS で直接日本語書き込んでいるのに正しく表示されました。
c と a は、chrome:// と about: が対象ですが、新たに http:// を追加しました。id の一文字目を w にして、http://goo.gl/ に続く文字列を w に続けて id にするようにしています。続ける内容は移動したい URLを Google URL 短縮で短縮して作成しています。


posted by at 2012-06-19 22:42 | Comment(0) | ツール | このブログの読者になる | 更新情報をチェックする

2012年05月17日


『Yahoo!24H番組』ボタン(2) / コンボボックス & localStorage 版

ブログに貼りつけるツールとしてコンボボックスを使って、一度選択した地域を localStorage に保存するようにしました。

<style>
#yahoo_bangumi input {
	color: #fff;
	font-weight: bold;
	border-radius: 6px;
	background: -moz-linear-gradient(top, #f00, #333);
	background: -webkit-linear-gradient(top, #f00, #333);
	background: -o-linear-gradient(top, #f00, #333);
	background: linear-gradient(to bottom, #f00, #333);
	-ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=#ff0000, endColorstr=#333333)";
}
</style>
<div id="yahoo_bangumi" style='margin-top:0px;'>
<select id="yahoo_area">
<option value="10">北海道(札幌)</option><option value="11">北海道(函館)</option><option value="12">北海道(旭川)</option><option value="13">北海道(帯広)</option><option value="14">北海道(釧路)</option><option value="15">北海道(北見)</option><option value="16">北海道(室蘭)</option><option value="22">青森</option><option value="20">岩手</option><option value="18">秋田</option><option value="19">山形</option><option value="17">宮城</option><option value="21">福島</option><option value="28">栃木</option><option value="25">群馬</option><option value="26">茨城</option><option value="23">東京</option><option value="24">神奈川</option><option value="29">埼玉</option><option value="27">千葉</option><option value="32">山梨</option><option value="31">新潟</option><option value="30">長野</option><option value="34">石川</option><option value="37">富山</option><option value="36">福井</option><option value="35">静岡</option><option value="33">愛知</option><option value="39">岐阜</option><option value="38">三重</option><option value="43">和歌山</option><option value="44">奈良</option><option value="45">滋賀</option><option value="41">京都</option><option value="40">大阪</option><option value="42">兵庫</option><option value="53">徳島</option><option value="51">愛媛</option><option value="54">高知</option><option value="52">香川</option><option value="47">岡山</option><option value="46">広島</option><option value="49">鳥取</option><option value="48">島根</option><option value="50">山口</option><option value="55">福岡</option><option value="61">佐賀</option><option value="56">熊本</option><option value="57">長崎</option><option value="60">大分</option><option value="59">宮崎</option><option value="58">鹿児島</option><option value="62">沖縄</option></select>
<br />
<script type="text/javascript">
(function() {
	var wk = localStorage['yahoo_area'] || '';
	if ( wk != '' ) {
		document.getElementById('yahoo_area').value = wk;
	}
})();
</script>
<input
	type="button"
	value="Yahoo! 24H番組"
	onclick="
(function(){
	localStorage['yahoo_area'] = document.getElementById('yahoo_area').value;
	var url = 'http://tv.yahoo.co.jp/listings/?&type=normal&a='+document.getElementById('yahoo_area').value+'&t=TV&s=1&vb=1&vc=0&vd=0&ve=1&va=24';
	var d = new Date();
	var yyyy = d.getFullYear();
	var mm = (d.getMonth()+1);
	var len1 = ('00'+mm).length;
	mm = ('00'+mm).substr(len1-2,2);
	var dd = d.getDate();
	var len2 = ('00'+dd).length;
	dd = ('00'+dd).substr(len2-2,2);
	var hh = d.getHours() - 2;
	if ( hh <= 1 ) {
		hh = hh + 24;
		dd = d.getDate()-1;
		len2 = ('00'+dd).length;
		dd = ('00'+dd).substr(len2-2,2);
	}
	url += '&d=' + yyyy+mm+dd;
	url += '&st=' + hh;
	window.open(url);
})();
	"
/>
</div>



posted by at 2012-05-17 23:55 | Comment(0) | ツール | このブログの読者になる | 更新情報をチェックする

2012年04月30日


『Yahoo!大阪24H番組』ボタン

2012/4/30 : 24〜3 の間がうまく行ってなかったのを修正しました


最近、WEB から番組をチェックするようになったので、専用のボタンを作成しました。
地域は、大阪が 40 ですが、他は以下のようになります
<input
	type="button"
	value="Yahoo!大阪24H番組"
	onclick="
(function(){
	var url = 'http://tv.yahoo.co.jp/listings/?&type=normal&a=40&t=TV&s=1&vb=1&vc=0&vd=0&ve=1&va=24';
	var d = new Date();
	var yyyy = d.getFullYear();
	var mm = (d.getMonth()+1);
	var len1 = ('00'+mm).length;
	mm = ('00'+mm).substr(len1-2,2);
	var dd = d.getDate();
	var len2 = ('00'+dd).length;
	dd = ('00'+dd).substr(len2-2,2);
	var hh = d.getHours() - 2;
	if ( hh <= 1 ) {
		hh = hh + 24;
		dd = d.getDate()-1;
		len2 = ('00'+dd).length;
		dd = ('00'+dd).substr(len2-2,2);
	}
	url += '&d=' + yyyy+mm+dd;
	url += '&st=' + hh;
	window.open(url);
})();
	"
/>
この下はさらに、ボタン画像を使ったものです。


<style type="text/css">
.bt {
	border: 0px;
	width: 180px;
	height: 30px;
	text-align: left;
	padding-left: 32px;
	font-size:13px; 
	font-weight: bold;
	cursor: pointer;
	background-color: #fff;
	margin: 4px 4px 4px 4px;
}
</style>
<input
	class="bt"
	type="button"
	value="Yahoo!東京24H番組"
 	style='background-image: url(https://lh6.googleusercontent.com/-dZnazzvnzCw/T5FN4nTSUrI/AAAAAAAAFnQ/JMTzwUr7CDk/s180/btn049_06.png);'
	onclick="
(function(){
	var url = 'http://tv.yahoo.co.jp/listings/?&type=normal&a=23&t=TV&s=1&vb=1&vc=0&vd=0&ve=1&va=24';
	var d = new Date();
	var yyyy = d.getFullYear();
	var mm = (d.getMonth()+1);
	var len1 = ('00'+mm).length;
	mm = ('00'+mm).substr(len1-2,2);
	var dd = d.getDate();
	var len2 = ('00'+dd).length;
	dd = ('00'+dd).substr(len2-2,2);
	var hh = d.getHours() - 2;
	if ( hh <= 1 ) {
		hh = hh + 24;
		dd = d.getDate()-1;
		len2 = ('00'+dd).length;
		dd = ('00'+dd).substr(len2-2,2);
	}
	url += '&d=' + yyyy+mm+dd;
	url += '&st=' + hh;
	window.open(url);
})();
	"
/>

▼ボタン画像
WEBデザイナーが作った超シンプル素材集
posted by at 2012-04-30 14:29 | Comment(0) | ツール | このブログの読者になる | 更新情報をチェックする