*

【コインチェック】APIが存在しないはずのチャットの自動読み上げシステムを作る

以前、bitFlyerのチャットの自動読み上げシステムを作りましたが、個人的にはコインチェックのチャットの方がアルトコインの情報があるので、どうせ流し聞きするならコインチェックが良いと思っていました。

しかし、bitFlyerにはチャットのAPIがありますが、コインチェックにはありません。

bandicam 2017-12-17 12-46-27-036

というわけで、コインチェックがどういう仕組みでチャットを表示させているのか解析し、あわよくば自動読み上げをしようと思います。(結論から言うとできました。)

まずは、チャット画面に行って、ソースコードを確認します。
bandicam 2017-12-17 12-48-32-435

bandicam 2017-12-17 12-49-35-059

どうやらチャットそのものはJavascriptで表示させている訳ではなく、PHP等のサーバーサイド系の言語で処理し、それをAJAXか何かで非同期処理して表示させているようです。

この時点でPHPのスクレイピングを使えばテキストの抽出は可能です。(php dom perser を使えば特定の要素だけ抽出できます)

が、一つ問題があります。それは、ログイン状態でなければこのように表示させられないということです。つまり、セッションorクッキーが切れれば、チャット音声が途切れるため、再び手動でログインしてやる必要があります。

以前の記事でUWSCによる自動ログインを扱ったので、それをそのまま流用しても良いのですが、今回はちょっとこだわってみます。

話は飛びますが、
スマートフォンアプリではWEBアプリと通信する際にAPIを使う仕様になっています。コインチェックでも例外ではなく、アプリでチャットを表示できるということはAPIを通して通信を行っています。

そのAPIがPrivateメソッドであるとは考えにくく(経験的に)、「実はアクセスするだけで取得できるんじゃね?」というのが私の推測でした。

しかし、APIドキュメントにはその記述がないので、てきとうに探ってみます。もし、チャットAPIがあるのだとすれば、そのURLはおそらく
https://coincheck.com/api/chat
https://coincheck.com/api/chats
https://coincheck.com/api/exchange/chat
https://coincheck.com/api/exchange/chats
https://coincheck.com/api/chat_list
https://coincheck.com/chats

のような形式になっていると予想されます。そこでいろいろ試してみると、https://coincheck.com/chatsがヒットしました。

bandicam 2017-12-17 12-57-16-980

jsonを返すAPIではないので、正確にはヒットではありませんが、見慣れぬページです。このページは非ログイン状態でもリアルタイムでチャットが更新されています。

ついでにこいつのソースコードを見ると、
bandicam 2017-12-17 12-58-59-578

どうやらここがチャット部分の本体で<p class=”content”…の部分がコメントの中身だということがわかります。ただこちらは、ログイン後に表示されるチャットとは異なり、javascriptでリアルタイム表示させている記述です。

おそらく、javascriptでリアルタイム表記をして本ページに埋め込むつもりが、本ページにある他のリアルタイム表示とのバッティングしたか何かでボツになったんでしょうね。(エンジニアさんせっかく作ったのにかわいそう…)

そのため、このp要素のclass=”content”をスクレイピングしてもテキストを抽出することができません。なので、javascriptファイルが格納されている.jsファイルの中を見ます。(ドメインがcoincheck.comで.jsを呼び出しているlinkを検索して探します。)

bandicam 2017-12-17 13-01-55-647

すると、難読化処理がされたjavasciptファイルがでてきます。量からしてコインチェックのjavascript処理のほぼ全部がここに集約されているものだと思います。これをすべて読み解くのは困難ですが「chat」で検索すると、

bandicam 2017-12-17 13-03-41-666

ここら辺だけヒットするので、ここだけ読めばOKだとわかります。

ちなみにここまでは誰でもどこからでも閲覧できる情報です。しかし、コインチェックも何かしらの理由があってチャットAPIを公開していないのかもしれないので、ちょっとここの詳しい内容は控えます。

まぁ、なんやかんやあって、
チャットのjson形式の取り出しに成功しました。(もちろん、クラッキング等は一切していないですよ)
bandicam 2017-12-17 13-06-25-540

どうやらbitFlyerと違い、返すチャットの数は固定のようです。読み込みに時間がかからないので、良いですね。合理的です。逆に言うと古いチャットは取り出せないということですね。(そんな必要ありませんが)

あとはbitFlyerのときと同じようにコーディングするだけです。

どうやらチャットの数は50で固定のようなので、0からスタートする配列に合わせるために49までfor分を回します。あとは音声APIに投げればOKです。(音声APIについてはbitFlyerのときの記事を参照)

コインチェックのチャットはbitFlyerのチャットよりも一文が長い傾向にあるので、10コメントを1つの文字列にして音声APIに投げるとエラーになりやすいです。

そのため、5コメント毎に投げるようにしています。

http://fxantenna.com/chatvoice_coincheck.html

(ZAIFのチャット? 何それおいしいの?)

Message

メールアドレスが公開されることはありません。

このコメントはWEBに公開されるので、問い合わせ等はメールでお願いします。

関連記事

APIでコインチェック、ZAIF、bitFlyerのレートの比較&トレード 仮想通貨の自動売買開発⑧

公開:2017/7/11 今回は業者間アービトラージに向け、PUBLIC APIで取得したデー

記事を読む

BinanceとPoloniexの自動アービトラージシステムを作る1

ずっと国内の大手3社でアービトラージしているのですが、サーバーの脆さや約定力のなさが目立つことが良く

記事を読む

MT4から取引所のビットコインレートを取得して比較する

今までMQLしか触ったことがない人にとって、jSONだのHASHだのが出てくるAPIの処理は荷が重か

記事を読む

ビットコインの業者間アービトラージでわかったこと

ちゃんと約定する FXの場合、業者間アービトラージをやろうとしても、約定拒否だったり、スリップした

記事を読む

独自のビットコイン決済システムを作って手数料を0%にするやり方

オンラインショッピングなんかをやっているとビットコインで決済できた方が便利なことがあります。 pa

記事を読む

 
  • ブログ管理人の横瀬兼元(ペンネーム)です。

    各トピックに対するコメントは各記事のコメント欄にお願いします。それ以外のご質問、ご相談などは
    infoあっとfxantenna.com
    まで
    私の偽者がいるらしいのでご注意ください。
他通貨対応H4,D1用EA(ex4)

H4 EURUSD 2018/1/1~2018/12/31 H

Q&A iCustomのEAのエラーについて

Q. 第24回:iCustomでインジケータをEA化するというサイ

【MT4】SP500,日経225,FX用EA(無料配布)

SP500 2018/1/1~2018/12/31 D1 PF:1.

【MT4】H4, D1用EA(プレゼント企画)

EURUSD 2018/1/1~2018/12/31 D1

質問回答コラム

Q. 管理人さん自身はEAで運用しているのですか A.  して

→もっと見る

PAGE TOP ↑