投稿者「mynote」のアーカイブ

.htaccessで特定ボットのアクセスを拒否する書き方

最近、「SemrushBot」「Linespider」「BLEXBot」あたりのボットが活発に活動しているようで、Webサーバーに大量のログが残っていました。検索エンジン関係であればボットのアクセスも必要経費と見なせますが、SEO系ボットによるアクセスはサーバーの負荷になるだけなので、余り嬉しくありません。

ということで、特定のボットによるアクセスを拒否したい場合は.htaccessに以下の内容を追加してみると良いと思います。注)

SetEnvIf User-agent "SemrushBot" BadBot
SetEnvIf User-agent "Linespider" BadBot
SetEnvIf User-agent "BLEXBot" BadBot
Deny from env=BadBot

robots.txt

User-agent: SemrushBot
Disallow: /

User-agent: Linespider
Disallow: /

User-agent: BLEXBot
Disallow: /

のようにする方法もありますが、robots.txtを見ないボットもあり一々調べるのも面倒ですから、.htaccessが使えるサーバーであれあば.htaccessで拒否する方が望ましいと思います。


注) SemrushBot、Linespiderなどの文字列はアクセスログからユーザーエージェントを調べてください。(ユーザーエージェントの一部に該当文字列が含まれていれば拒否する設定になっています。)

UnityのWebGLゲームを外部からJavaScriptで操作する方法

UnityでビルドしたWebGLのゲームを外部からJavaScriptで操作したい場合、unityInstanceSendMessageを使うと実装できるみたいです。注)

実装の仕方

WebGLでビルドするとindex.htmlというファイルが作られると思いますので、<body>から</body>の間のどこかに

<input type="button" value="ボタン" onclick="…">

のような感じでコードを追加します。

このonclickの部分でunityInstance.SendMessageを実行すればWebGLのゲームにメッセージを送ることができるみたいです。

ExampleオブジェクトのFunctionメソッドを呼び出したい場合

unityInstance.SendMessage('Example', 'Function');

ExampleオブジェクトのFunctionメソッドにvalueを引数として渡して呼び出したい場合

unityInstance.SendMessage('Example', 'Function', value);

※メッセージを送るトリガーとしてボタンを使う必要はありませんので、その辺りは適当に読み替えてください。

リンク

Unity – Manual: WebGL: Interacting with browser scripting
https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html


注) 古いドキュメントではgameInstanceとなっている場合もありますが、Unity 2019.1以降はunityInstanceに変更されたそうです。

Enum.Parseの使い方

C#ではint.Parsefloat.Parseを使って文字列型から数値型への変換ができます。これと同じような感じで文字列型からenum型に変換する方法がないかなと思って調べてみました。

ということで、SystemにあるEnum.ParseEnum.TryParseを使うと良いみたいです。

使い方は次のような感じです。

enum Example { Apple, Orange, Grape }

Enum.Parse

try {
  var value = (Example)Enum.Parse(typeof(Example), "Apple");
  // 実行したい処理
}
catch (ArgumentException) {
  // エラー処理
}

Enum.TryParse

Example value;

if (Enum.TryParse("Apple", out value)) {
  // 実行したい処理
}

大文字・小文字を無視して変換したい場合はignoreCase=falseとしてみてください。

リンク

Enum.Parse Method (System) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/api/system.enum.parse?view=netframework-4.8

Enum.TryParse Method (System) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/api/system.enum.tryparse?view=netframework-4.8