将棋ウォーズで3rd Pary検討アプリによる棋譜取り込みが出来なくなったとされる件について
非技術者向け
- 検討アプリで棋譜の取り込みが出来なくなったのは将棋ウォーズのアップデートに起因するが、検討アプリ側の修正で対処可能なはずなので寝て待つべし。
- なお、そもそも将棋ウォーズからの棋譜の取り込みは、各検討アプリの独自解析により実現されていたものであり (グレーゾーン) 、それに対して将棋ウォーズが配慮する責務はないので、今回の件で将棋ウォーズを責めるのはお門違いである1。
技術者向け
既存の取り込み機能を開発できるような人には、殊更な説明は不要と思われるが、一応簡単に。
- 棋譜シェアページの刷新を行った様子。
- Reactを使うようになっている。
- ページへのアクセス制限は特に変わってなさそう。 (セッション不要でcurlでも取れる。)
- それに伴い、従来の (おそらくテンプレートエンジンでレンダリングされていた) 棋譜文字列をJavaScriptに渡す部分のコードが無くなり、とある
div
のdata-react-props
属性にJSONで渡すようになっている。 - 雑な
curl | grep
はできなくなった一方、データについては構造化されて扱いやすくなった。
JSON部の取得サンプル:
import argparse import urllib.request import json from html.parser import HTMLParser args_parser = argparse.ArgumentParser() args_parser.add_argument('url') args = args_parser.parse_args() req = urllib.request.Request(args.url) with urllib.request.urlopen(req) as res: doc = str(res.read(), encoding='utf-8') class RecordParser(HTMLParser): data = None def handle_starttag(self, tag, attrs): for attr in attrs: if attr[0] == 'data-react-props': self.data = attr[1] record_parser = RecordParser() record_parser.feed(doc) if record_parser.data is None: exit(1) print(record_parser.data)