「Town Starで在庫を確認するのが面倒・・・」
「Town Starをもっと効率的にプレイしたい」
このような場合には、この記事の内容が役に立ちます。
この記事では、Town Starの在庫をLINEで通知する方法を解説しています。
つまり、Town Star在庫通知システムのレシピです。
本記事の内容
- Town Star在庫通知システムとは?
- クライアント(JavaScript)のコード
- サーバー(PHP)のコード
それでは、上記に沿って解説していきます。
Town Star在庫通知システムとは?
Town Starにおける在庫を通知するシステムを作ります。
在庫通知システムとは、少し大げさかもしれませんけどね。
Town Starにおける在庫とは、次の各アイテムの数値のことです。
この在庫状況の場合、次のような通知が行われます。
LINEにこのようなメッセージが届きます。
Town Star在庫通知システムのイメージができたでしょうか?
では、どうやってこのシステムが動くのかを説明します。
まずは、処理の流れから確認です。
以下の流れで在庫通知を行います。
- Town Star在庫情報の取得(クライアント)
- 在庫情報のPOST送信(クライアントからサーバーへ)
- 在庫情報のLINE送信(サーバー)
Ajaxを使った仕組みです。
この点では、ごくごくどこにでもあるシステムと言えます。
クライアント | JavaScript |
サーバー | PHP |
ただし、クライアントでJavaScriptを動かすことに工夫が必要です。
工夫と言っても、Town Starプレーヤーならお馴染みでしょう。
Tampermonkeyを利用するのです。
Tampermonkeyについては、次の記事で説明しています。
おそらく、自動売買のスクリプトでお世話になっているはずです。
同じようにTown Star在庫通知用のスクリプトを動かします。
そのスクリプト内で次の2つまで行います。
- Town Star在庫情報の取得(クライアント)
- 在庫情報のPOST送信(クライアントからサーバーへ)
そして、サーバー側でPOST送信された情報を受信します。
その情報をもとにLINEに送るメッセージを作成することになります。
LINEへの通知は、LINE NotifyのAPIを利用します。
詳細は、後述します。
以上が、Town Star在庫通知システムの仕様となります。
あとは、クライアントとサーバーそれぞれのコードを公開します。
クライアント(JavaScript)のコード
このコードを「zaiko_alert」として、Tampermonkeyに登録します。
// ==UserScript== // @name zaiko_alert // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author You // @match https://townstar.sandbox-games.com/launch/ // @icon https://www.google.com/s2/favicons?domain=gala.games // @grant none // @require http://code.jquery.com/jquery-latest.js // ==/UserScript== var $ = window.jQuery; (function() { 'use strict'; var server_url = "http://localhost/ts/zaiko_alert.php"; var interval_time = 30000;//30秒 // Your code here... var fn = function() { var zaiko_list = get_crafts_zaiko(); post_zaiko_info(zaiko_list); } var id = setInterval(fn,interval_time); function post_zaiko_info(obj) { $.ajax({ url: server_url, type:'POST', dataType: 'json', timeout:3000, data : {"post_data" : JSON.stringify(obj)}, }).done(function(data) { console.log(data) }).fail(function(XMLHttpRequest, textStatus, errorThrown) { console.log(textStatus); }) } function get_labor_cost(){ var cost = ts_get_count("hud-labor-costs"); return cost; } function ts_get_count(class_str) { var target_elem = $("." + class_str); var count = target_elem.text(); count = $.trim(count); count = count.replace(",", ""); return parseInt(count); } function ts_get_crafts_list() { var list = new Array(); $("#hud-craft-target .crafts").each(function(i, elem) { var class_str = $(elem).attr("class"); var classes = class_str.split(" "); if (classes.length==2) { var val = classes[1]; list.push(val); } }); return list; } function get_crafts_zaiko() { var obj = new Object(); var list = ts_get_crafts_list(); $.each(list, function(index, value) { var key = $.trim(value).replace("hud-craft-display-", ""); var cost = ts_get_count(value); obj[key] = cost; }) return obj; } })();
コードに関しては、よく確認してください。
jQueryが理解できれば、単純なコードと言えます。
私が悪意のあるコードを含まない可能性は、ゼロではありません。
それが意図するしないに関わらずです。
各自で変更する場所は、以下の部分です。
var server_url = "http://localhost/ts/zaiko_alert.php"; var interval_time = 30000;//30秒
「server_url」は、サーバー側プログラムのURLです。
基本的には、localhostや閉じた環境で動かす方が良いでしょう。
「interval_time」は、通知プログラムが動く間隔です。
デフォルトでは、30秒を指定しています。
30秒だと、こんな感じで届きます。
これがウザい場合は、間隔を伸ばしましょう。
サーバー(PHP)のコード
「server_url」で設定したURLのファイルです。
zaiko_alert.php
<?php header('Access-Control-Allow-Origin: *'); require 'vendor/autoload.php'; $token = "LINE Notifyで発行したアクセストークン"; $post = $_POST["post_data"]; $zaiko_list = json_decode($post, true); $str = ""; foreach($zaiko_list as $key => $value){ $str = $str . "\n"; $str = $str . "【" . $key . "】" . $value; } if(strcmp($str, "")!=0){ // リクエストヘッダ作成 $message = $str; $query = http_build_query(['message' => $message]); $header = ['Authorization: Bearer ' . $token]; $ch = curl_init('https://notify-api.line.me/api/notify'); $options = [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => $header, CURLOPT_POSTFIELDS => $query ]; curl_setopt_array($ch, $options); $response = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); }else{ $ary = array(); $response = json_encode($ary); } echo $response; ?>
コードの内容を理解するには、次の記事を確認してください。
LINE Notifyの利用方法から、すべて説明しています。
以上、Town Star在庫通知システムの作り方を説明しました。