スプラトゥーンのステージ情報を取得できるAPIを作ったけど公開停止した。

イカリングのステージ情報をスクレーピング→MongoDBに保存→Web APIでステージ情報を取得できるようにしました。
スプラトゥーンのステージ情報がとれるやつ(非公式)
もともとは自分用に勝敗記録アプリを作ろうとしてて、ステージ情報も必要になるので、ステージ情報用の機能を別APIとして独立させようと思った次第です。Microserviceというやつですね(流行ってるから言ってみたかっただけ。)
ただし検索機能まで休日中に実装間に合いませんでした。平日がクソ忙しいので一体いつになったら実装できるのやらです。スプラトゥーンやる時間削って実装しました(本末転倒)。過去の情報にどのくらい価値が有るのかはわかりませんが、眺めてみたら面白いんじゃないかなーって思います。
今のところDBの内容を全部返却するようになっています。これ検索できないと意味無くなりそうなので早めに実装したいですね。
もう同様のサービス絶対ありそうだけど自分で作ることに意義があると思ってるので…(ふるえ
検索機能まで作り終わったらソースをgithubに公開します。
→(2015/10/12)公開しました。retrorocket/splapi
デスノートが始まっちゃうので今日はこのへんで。

2017/01/30

サービスの公開を停止しました。DNSのAレコードごとAPIを削除しました。
ご利用ありがとうございました。金輪際子供向けゲームのツールは公開したくありません。良いこと一つもなかったです。
代替APIとしてstat.inkの作者さまがAPIを公開してくださっているので、そちらのご利用をご検討いただければと思います。
splapi.fetus.jp
(2017/02/07) 諸事情によりサービス公開停止理由を記載した記事を削除しました。何かございましたらメールかコメント欄にお願いいたします。

2016/09/26

2015-12-24T15:00:00のレギュラーマッチのステージ情報が誤っていたため修正しました。(シオノメ→アロワナ)
メールでのご指摘ありがとうございました。

2016/09/12

httpsで接続できるようにしました。http/2に対応させています。証明書はLet’s Encryptで取得しています。
Let's Encrypt – Free SSL/TLS Certificates

2016/09/05

想定外のパスでAPIが実行できてしまう不具合を修正しました。(/regular/now.html等、任意の拡張子付きの形式で呼び出せる)
mojoliciousのformatsがデフォルトでONになってるの知りませんでした。

2016/04/19

/now, /next/, /next_all, /prev, /prev_all エンドポイントに全自分待望のstat.inkモードを追加しました。
stat_inkパラメータでonを指定すると、ステージ名とルール名がstat.inkのAPIに対応したもので返ってきます。
(origin_nameに日本語名、stat_ink_nameにstat.ink用の値が格納されます)
いちいちハッシュで変換かますのめんどくさかったので作ってよかったです。ちなみに実装のほうがメチャクソハードコーディングでブサイクなのですが、もうステージとルール追加ないだろうしいいやと思いました。
実行結果は例えばこんなかんじ。
ちなみにスクリプトにバグがあって、stat_inkフラグがずっとonになり続けてる状態が5分くらいありました。すみません。

2016/02/23

イカリングの情報を英語版で拾ってしまう問題と、DBの内容を日本語に修正しました。あと利用ルール守ってない人多すぎるのでほんと勘弁して下さい。

2016/01/27

利用者数も増えてきたようですので、API利用ルールを記載しました。問題が起こるとUAやIPで使用不可にしたりAPIキーを導入せざるを得なくなってしまうので、お手数ですが目を通していただけるとありがたいです。よっぽどのことがない限りはサーバ側でどうにかすべきだと思っているので、アクセスさばけないとかになりそうでもサーバ側でどうにかする予定です。
ちなみに今のところ210.172.144.35(ロリポップのどこか)からのアクセスはイエローカード気味です(UAもないしリファラもないしリンクされてる気配もないのでこっちでリンク元を調べられない&アクセス頻度的に個人利用じゃなさそうなので)

2016/01/06

2015/12/31-2016/01/01にかけて、日付に誤りのあるデータ(2015/12/31開始→2015/01/01終了等)が登録されていたためDB上の情報を修正しました。
スクリプトの修正自体は固定回線復旧後実施します。たぶん正月のnowとnext_allバグってたんじゃないかと思います。すみません。
#バグ報告ありがとうございました。助かりました。
#DBの修正とブログ記事の追記はテザリングでどうにかしました。月初めでよかったです。

2015/12/31

ブキがスクレイピングで取れるのをさっき知ったのでAPIで取得できるようにしました。
(更新用スクリプトが正常に動けば)新ブキ追加後の5分後にリストが更新されます。
たとえばこんなかんじ。
http://splapi.retrorocket.biz/weapons

2015/12/30

自分が必要になったので現在ゲーム上に存在するガチマッチのルールと、全マップのリストを返却するエンドポイントを作成しました。
(更新用スクリプトが正常に動けば)新ルール・マップ追加後の5分後にリストが更新されます。
たとえばこんなかんじ。
http://splapi.retrorocket.biz/maps
http://splapi.retrorocket.biz/gachi/rules

2015/11/18

(イカリングのデータ内容に誤りがあったことによる)11/13のデータの誤りを修正しました。

2015/10/15

map, ruleでOR検索ができるようにしました。カンマ(,)でパラメータを区切ってください。空白とかはいれないでください。
例えばこんな感じ。
splapi.retrorocket.biz/gachi?map=Bバスパーク,ヒラメが丘団地&rule=ガチヤグラ,ガチホコ

2015/09/13

cronのスクレーピングの実施時間見直しました。

2015/09/12

フェスのステージ情報を取得できるようにしました。ドキュメントにはまだ書いてません。
/next, /now, /next_allと組み合わせて使用できます。
?teamでチーム情報を絞り込めます。
たとえばこんなかんじ。
http://splapi.retrorocket.biz/fes?team=ボケ
検索に引っかからなかった場合、空の配列を返却します。
あと、書いてなかったけど、regularとgachiで、toパラメータで検索範囲を絞り込めます。

2015/09/03

特定時間を起点にするステージ情報を取得できるようにしました。
/next, /now, /next_allと組み合わせて使用できます。
たとえばこんなかんじ。
splapi.retrorocket.biz/regular/now?date=2015-09-01T14:00
splapi.retrorocket.biz/regular/next_all?date=2015-09-01T14:00
検索に引っかからなかった場合、空の配列を返却します。

2015/09/01

特定のマップ検索とガチマッチのルール検索ができるようにしました。
/, /next, /now, /next_allと組み合わせて使用できます。
たとえばこんなかんじ。
splapi.retrorocket.biz/regular?map=ネギトロ炭鉱
splapi.retrorocket.biz/gachi/next_all?rule=ガチヤグラ
検索に引っかからなかった場合、空の配列を返却します。

2015/08/31

とりあえず開催中のステージ情報と、次の1件と、次に開催されるすべてのステージ情報が取れるようにしました。
たとえば開催中はこんな感じ。
splapi.retrorocket.biz/regular/now

Chromeのinfo.selectionTextは改行がスペースに変換される。

Chromeのinfo.selectionTextは改行がスペースに変換されることに今日気づきました。
なんで今まで自分の作ってた拡張が動いてたのかがマジで謎いです。

選択したテキストの改行まで欲しい場合は、残念ながらchrome.tabs.sendMessageでタブにメッセージを送って、content script上でsendResponse({stext: window.getSelection().toString()});するしかないようですね。
メッセージパッシング、非同期処理になっちゃうのと、権限が更に必要になっちゃうのであんまりやりたくないんですが、仕方なくコールバックメソッドの中にレスポンスを受け取った後の処理を全部書きました。

以下、処理の抜粋です。

background.js

var res = function (response) {
    var stext = response.stext; //改行も含めたテキスト
(中略);
// content scriptにメッセージを送る
chrome.tabs.sendMessage(tab.id, {
    message: "hello"
}, res);

content.js

chrome.runtime.onMessage.addListener(
    function (request, sender, sendResponse) {
        sendResponse({stext: window.getSelection().toString()});
    }
);

Right Click to Calendarで場所を入力できるようにした。

レビューで「場所も入力できれば完璧。」て言われたので追加しておきました。v3.6.0で入力可能です。デフォルトで正規表現による入力がオンになってないので、正規表現で場所を入力したい人はオプションで有効にしてください。
デフォルトの正規表現で入力可能にしました。

自分の環境でWindows 10アップグレード後に発生した不具合一覧。

2chとか見てもあまり派手にアップグレードに失敗した人を見ないので、Windows 8.1→10に自分のアカウント・アプリケーションを残してアップグレード(上書きアップグレード)した後に、私の環境で発生した不具合を時系列順に一覧にしておきます。

  • アップグレード後の初回ログインに成功したあと、PCを再起動→ログイン後、再度セットアップ処理(「さあ始めましょう、のアレ」)が走る。その処理が1時間経過しても終わらない。セットアップ後ログインした場合、ログイン画面で「ハンドルが無効です」のエラーが発生し、ログイン出来ない。
  • 再起動後ログインすると、ログインに異常に時間が掛かる(5分以上)、ログインすると「重大なエラー:Cortanaが起動しません」のダイアログが表示され、デスクトップが表示されない。ただし何回か再起動すると起動できるようになる。
  • C:\Users\自分のアカウント配下のディレクトリの権限がめちゃくちゃで、読み込み/書き込みができない。所有者が自分なのに自分に権限がないディレクトリが存在する。通常はUsers\自分のアカウント名から権限を継承するディレクトリ(Pictures等)が、権限を継承していない。
  • 設定>パーソナル設定>スタート>スタート画面に表示するフォルダーを選ぶ、ですべての項目がグレーアウトされ、変更できない。
  • ローカルアカウントを一般ユーザとして新規作成→そのユーザでログイン→ログアウト後、管理者ユーザでそのユーザの権限を管理ユーザに昇格。再度そのユーザでログインすると「C:\Windows\system32\config\systemprofile\Desktop は利用できない場所を参照しています。」エラーが発生し、デスクトップが表示されない。まさか2015年にもなってこのエラーを見ると思わなかった。
  • タスクマネージャを起動すると、3回に1回程度の割合で「スタブは不正なデータ受信しました」エラーが発生する。
  • Chromeの拡張機能が使用できない。
  • スタートメニューが開かない。
  • setもsetxコマンドも効かなくなる。システム構成で環境変数を変えても同様。
  • 再起動後、さっきまで使っていたアカウントにログインすると「C:\Windows\system32\config\systemprofile\Desktop は利用できない場所を参照しています。」エラーが発生し、デスクトップが表示されない。新しいアカウントも作成できなくなる。

どうもアップグレードした時に権限周りを更新するのに失敗したように見えるんですが、原因もわからないので真相は闇です。
諦めて別マシンでWindows 10のisoを作成→DVDに焼いたあとDVDドライブから起動させて、クリーンインストールすることで解消されました。プロダクトキー確認しててよかったです。要らないそうです。
そのかわりCドライブの中身全部飛んだので、作りかけのChrome拡張とかgitでcommitしてたけどpushはしてないアプリとかは死にました。残念です。
ちなみに以下のURLからでインストール用のメディアを作れるので、アップグレードの際は直接アップグレードする前にインストール用のメディアを作っておくことをおすすめします。
Windows 10
Windows TIPS:インストール済みのWindows OSのプロダクト・キーを調べる – @IT

あと、自分の環境で出ている不具合として、メールアプリで強制同期すると0x80070032エラーがでて同期できなくなります。同じ症状でてる人がいるっぽいのでそのうちどうにかなることを期待しています。
Error code 0x80070032, Windows Mail – Microsoft Community
Some Windows 10 Users Getting Error 0x80070032 in Mail App – Softpedia
Microsoft Community内の「Glad to know I’m not alone!」って発言、私もこの不具合でてるの自分だけかと思ってたのでme tooってなりました。

追記

クリーンインストール時ってプロダクトキーいらないんですね。勉強になりました。
Windows 10をクリーンインストールする | Jashi's ROOM – 楽天ブログ

retrorocket.bizのSSL証明書をラピッドSSLに移行しました。

ラピッドSSL提供開始記念キャンペーン! | さくらインターネット
ジオトラスト | SSL(サーバ証明書)はさくらインターネット
とってもお安かったのでretrorocket.bizのSSL証明書をStartSSLからラピッドSSLに移行しました。ドメインを2018年くらいまで契約してたと思ってたので、証明書も3年契約にしたのですが、今調べたらドメインの方は普通に2017年まででした。
SANsの登録対応してるのでサブドメインを何か指定しようと思ったのですが、StartSSLあるしいいやと思いました。