MHF Twitter連携

mhftweet.bat
mhftweet.wsf

概要

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を直接起動すると裏で動くので注意。

使用方法

つぶやき方法は、MHFのチャット入力時に先頭に「@tw」を入力するだけ。「@tw誰特スクリプト」と入力すると、Twitterには「誰得スクリプト」と投稿される。

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/1218031483Twitter投稿部分はhttp://blog.tomatomax.net/archives/2696をほぼそのまま使用させていただきました。ありがとうございます。jqueryの最新バージョンは1.4.2みたいだけど、それにすると動かない。1.2.6なら動いたので、そのままにしてあります。
認証とか面倒なので、今回は投稿だけ。MHFのチャット上にタイムラインとか表示できると面白そうだけど、まず私では無理な領域だし。認証は初回投稿時に認証処理入れてやればいけるけれど面倒くさい。ギウラスは俺のものだ・・・俺だけのものだ!