MHF Twitter連携
設定
mhftweet.wsfをメモ帳などのテキストエディタで開き、以下の設定を入力する。
// MHFのチャットログフォルダ
var mhfLogDir = "C:\\Program Files\\CAPCOM\\Monster Hunter Frontier Online\\チャットログ";
// MHFのID
var mhfId = "個人ステータスのIDの値を入れる";
// Twitterの設定
var consumerKey = "Twitter連携アプリのconsumerKey";
var consumerSecret = "Twitter連携アプリのconsumerSecret";
var atoken = "自分のAccessToken";
var atokenSecret = "自分のAccessTokenSecret";
Twitter連携アプリの登録
使用者が自分で用意してくだしあ。
アプリケーションの種類:クライアントアプリケーション
Default Access type:Read & Write
AccessToken参考:http://q.hatena.ne.jp/1282647928
起動方法
起動方法はmhftweet.batをダブルクリック、終了方法は起動時に開いたコマンドプロンプトを閉じるだけ。mhftweet.wsfを直接起動すると裏で動くので注意。
mhftweet.bat
cscript mhftweet.wsf //nologo
mhftweet.wsf
<job> <script language="JScript"> // MHFのチャットログフォルダ var mhfLogDir = ""; // MHFのID var mhfId = ""; // Twitterの設定 var consumerKey = ""; var consumerSecret = ""; var atoken = ""; var atokenSecret = ""; </script> <script language="JScript"> var html = new ActiveXObject("htmlfile"); var window = html.parentWindow; var navigator = window.navigator; var document = window.document; var location = document.location; window.ActiveXObject = {}; </script> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" /> <script src="http://oauth.googlecode.com/svn/code/javascript/oauth.js" /> <script src="http://oauth.googlecode.com/svn/code/javascript/sha1.js" /> <script language="JScript"> function tweet(text) { var accessor = { consumerSecret: consumerSecret, tokenSecret: atokenSecret }; var message = { method: "POST", action: "http://api.twitter.com/1/statuses/update.json", parameters: { oauth_signature_method: "HMAC-SHA1", oauth_consumer_key: consumerKey, oauth_token: atoken } }; //for ( var key in content ) { // message.parameters[key] = content[key]; //} message.parameters["status"] = text; OAuth.setTimestampAndNonce(message); OAuth.SignatureMethod.sign(message, accessor); var target = OAuth.addToURL(message.action, message.parameters); var options = { type: message.method, url: target, async: false, dataType: 'json', success: function(d, dt) {} }; var $ = window.$; $.ajax(options); } </script> <script language="JScript"> var shell = WScript.CreateObject("WScript.Shell"); var fso = WScript.CreateObject("Scripting.FileSystemObject"); var folder = fso.GetFolder(mhfLogDir); var file = getLatestFile(folder); WScript.Echo(file.Name); var stream = file.OpenAsTextStream(1); var Log = function(){ this.id = ""; this.type = ""; this.message = ""; this.parse = function( line ){ var value = line.match(/^\[\d{4}\/\d{2}\/\d{2} \d{2}:\d{2}:\d{2} \(UTC\+09:00\) ID:(\w{6}) > ([^ ]+).*\].*> (.*)/); if( value != null ){ var ret = value[1]==mhfId && value[3].indexOf("@tw")==0 this.id = value[1]; this.type = value[2]; this.message = value[3].substr(3); return ret; } return false; } this.clear = function(){ this.id = ""; this.type = ""; this.message = ""; } } stream.ReadAll(); var log = new Log(); while( true ){ if( stream.AtEndOfStream ){ WScript.Sleep(100); continue; } var line = stream.ReadLine(); if( line.replace(" ","").length != 0 ){ log.clear(); if( log.parse(line) ){ WScript.Echo(log.type + ":" + log.message); tweet(log.message); } } } function getLatestFile( folder ){ var files = new Enumerator(folder.Files); var file = null; var time = 0; for( ; !files.atEnd() ; files.moveNext() ){ var tmpFile = files.item(); var tmpTime = tmpFile.DateLastModified; if( time < tmpTime ){ time = tmpTime; file = tmpFile; } } return file; } </script> </job>
wsf形式はhttp://d.hatena.ne.jp/hirataka522/20080806/1218031483、Twitter投稿部分はhttp://blog.tomatomax.net/archives/2696をほぼそのまま使用させていただきました。ありがとうございます。jqueryの最新バージョンは1.4.2みたいだけど、それにすると動かない。1.2.6なら動いたので、そのままにしてあります。
認証とか面倒なので、今回は投稿だけ。MHFのチャット上にタイムラインとか表示できると面白そうだけど、まず私では無理な領域だし。認証は初回投稿時に認証処理入れてやればいけるけれど面倒くさい。ギウラスは俺のものだ・・・俺だけのものだ!