ビットフライヤーはビットコインのビットコインをリアルタイムで受信するphpコード

2024.12.30

Logging

おはようございます.ビットフライヤーはビットコインのビットコインをリアルタイムで受信するphpコードを書きましたのでお裾分けです.以前書いていたものとは違う感じになります.ビットフライヤーさんのAPIを参照するとルビやJSの例コードはあるものの、何故かPHP言語のコードが無いので書いてみた形になります.ベースは生成AIに出力してもらったの物になります.それを自分の方がクラス化して使いやすくした形になります.

<?php
require 'vendor/autoload.php';

use WebSocket\Client;

class bitflyer
{
    public $client = null;
    public $channelName = "lightning_board_snapshot_BTC_JPY";
    public $wsUrl = 'wss://ws.lightstream.bitflyer.com/json-rpc';

    public function connecting()
    {
        try {
            // WebSocketクライアントを初期化
            echo "Connecting to WebSocket server...\n";
            $this->client = new Client($this->wsUrl);

            echo "Connection established. Subscribing to channel...\n";

            // サブスクライブメッセージを送信
            $subscribeMessage = json_encode([
                'method' => 'subscribe',
                'params' => ['channel' => $this->channelName],
                'id' => null,
            ]);
            $this->client->send($subscribeMessage);
        } catch (\WebSocket\ConnectionException $e) {
            echo "WebSocket connection error: " . $e->getMessage() . "\n";
            sleep(1); // 1秒待機して再接続
            $this->client = null;
            $this->connecting()->receive();
        } catch (Exception $e) {
            echo "General error: " . $e->getMessage() . "\n";
            $this->client = null;
            $this->connecting()->receive();
        }
        return $this;
    }

    public function receive()
    {
        try {
            // メッセージ受信処理
            while (true) {
                $message = $this->client->receive();

                // 受信データが空でないか確認
                if (!empty($message)) {
                    $data = json_decode($message, true);

                    // デコードが成功したか確認
                    if (json_last_error() === JSON_ERROR_NONE) {
                        if (isset($data['method']) && $data['method'] === 'channelMessage') {
                            print_r($data['params']);
                        }
                    } else {
                        echo "JSON デコード エラー: " . json_last_error_msg() . "\n";
                    }
                } else {
                    echo "返却値 空.\n";
                }
            }
        } catch (Exception $e) {
            echo $e->getMessage();
            $this->client = null;
            $this->connecting()->receive();
        }

        echo "Ctrl+C にて終了\n";
        return $this;
    }
}

(new bitflyer)->connecting()->receive();

尚、レンタルサーバーなんかでこのコードを動かすのは禁止されていますので、必ずローカルマシンで動かしてください.もし何かトラブルになっても保証出来ないので注意してください.因みに自分はDocker内で動かしています.

明日へ続く

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

```, エラー, お裾分け, クライアント, コード, サブスクライブメッセージ, デコード, ビットコイン, ビットフライヤー, ビットフライヤーさん, ベース, リアルタイム, ルビやの例コード, レンタルサーバー, ローカルマシン, , 接続, 秒待機, 言語, 返却値,

var_exportという関数がprint_rよりも使える?

2017.06.18

Logging


var_exportという関数がprint_rよりも使い物になるかも。
何が良いかは、下記の仕様を読んで下さい。
http://php.net/manual/ja/function.print-r.php
http://php.net/manual/ja/function.var-export.php
この頃、知ったことと言えばPHPにはarray_searchとかいう関数と
in_arrayとかいう関数があるのですけど、in_arrayの方を
使用することが安全だと知りました。
array_searchは配列の中から同じ変数を見つけてくるのですけど
最初に見つけた配列番号だったかな、それを返却値として
返してくれるのです、なので、そのままif文で判断していると痛い目に
合います。何故って配列番号0番目にあった場合、戻り値が
0番目なので、if文で偽の判断をしてしまうのです。
ここかなり痛い要素です。
if文の中で真偽の判断する場合はfalseで判断してあげると
良いでしょうということです。そういう事があるので
in_arrayの方が良いのかもしれないと思った次第です。
http://php.net/manual/ja/function.array-search.php
http://php.net/manual/ja/function.in-array.php

 
 

著者名  @taoka_toshiaki

※この記事は著者が30代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

array_search, B01HO61ZY2, false, if文, in_array, PHP 7+MySQL, print_r, var_export, かなり痛い要素, 使い物, 入門ノート, 変数, 戻り値, 真偽, 返却値, 配列番号, 配列番号0番目, 関数,

ビックデータと機械学習仲良しこよし・・・か!!

2016.12.13

Logging


機械学習の精度を上げるには大量のデータを瞬時に捌ける
サーバが必要になるという事を気付いた・・・。
そういやそうだ。学習すればするほど過去のデータも
見直さないといけなくなる。
Gさんは良い商売しているなと機械学習やビックデータを処理する
環境を無料で与えているけど、よくよく見ると制限があり
それ以降は有料になっている。
有料だけど月々の費用はかなり安いところが
ほんと、凄いところです。
でっ!!
ビッククエリーのPHPバージョンの使い方ですけど
Gさんのライブラリを読み込んでSQLを発行して返却値を
もらうだけ・・・凄く簡単。
詳しくはこちら
まずはライブラリ読み込みしてオブジェクトをインスタンスする。

次にSQLを発行する。

最後に発行した情報の返却値を抽出する。

じゃ機械学習はどうしたら良いのか・・・。
勉強中です、GさんがAPI系版出しているだけど、お高いです?。
https://cloud.google.com/prediction/docs?hl=ja
そちらは比較的に優しい、優しいと言っても難しいですけど・・・。
Gさんがオープンソースで提供されているサービスに比べたら優しいという事です。
https://www.tensorflow.org/
機械学習をちょちょいと使えるようになればカッコイイですけどね。
自分には程遠い感じがします、千里の道も一歩からというけれど・・・
今のところ、簡単な機械学習ならっていう感じでニュートラルな機械学習は
難しいですね_(:3」∠)_。
http://qiita.com/tags/TensorFlow

著者名  @taoka_toshiaki

※この記事は著者が30代前半に書いたものです.

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

OFUSEで応援を送る

タグ

API系版, Gさん, PHPバージョン, SQL, インスタンス, オブジェクト, サーバ, ビッククエリー, ビックデータ, ライブラリ, 使い方, 千里, 月々, 有料, 機械学習, 機械学習仲良しこよし, 瞬時, 程遠い感じ, 精度, 返却値,