ビットコインの価格をチェックするプログラム

システム部のNです。

いつも仕事と全然関係ないことをブログに書いていたのですが、このサイトは求人サイトですのでどういう仕事してるのか?ということが見てくださってる方々に分からないと駄目だろうというわけで、このブログにシステムに関係あることを書くようにシステム部のメンバーに言って最近みんなが書いてくれたので自分も何か書こうと思い考えました。

未経験者も募集しておりますので、自分が未経験者だったときにプログラムを覚えようと思った動機はなんだったか?

考えたところ、ギャンブルでした。

競馬の過去のデータを大量に集めれば傾向が分かり一定の基準で予想できるのではないか?

などと考えておりました。

結果は残念ながら成功には至りませんでした。

お金を稼ぐというような具体的な目的がないとなかなかプログラムを勉強して覚えようという気にならないです・・・。

そこで今なら何が良いか?

考えたところ仮想通貨とかどうでしょうか?・・・

残念ながら、仮想通貨の発掘(マイニング)で稼ぐのはもう手遅れですよね・・・。

すごい寒いところで発電して発掘しないと電気代が稼げないようです。

しかし、仮想通貨は市場が開かれており、無料で使えるAPIがあるのでプログラムを使って自動売買することで稼ぎが出せるかもしれません・・・。

ただ初心者がいきなり自動売買までプログラムを作るのは大変危険かもしれません。

とりあえずは、値段の動きを見て今後値段が上がっていくか?下がっていくか?そのタイミングが来たか?などをメールで自分の携帯に送信するプログラムが安全かもしれません。

仮想通貨は胡散臭いと思うのでしたら、MT4というソフトをWindowsにインストールして口座を作れば(デモ口座でもよし)外国為替FXなどの価格の取得や自動売買プログラムの作成も可能です。

(言語はMQ4というC++に近い文法の言語です)

MQ4はうちの会社の仕事とは全く関係ないので触れませんが、環境構築やテクニカル分析が組み込まれているのでいろんな手法を研究するのが容易です。

※ただ、MT4が使用可能な口座はスプレッドが広いため、やる気は起きないかもしれません。

外国為替FXでもOANDAという会社で30万円以上入金して口座を作れば、REST APIが使用可能とのことです。

※REST APIはhttpでデータを取得することが可能なAPIのことで、WEBサーバ上のphpなどから利用することが出来ます。

WEB APIとも呼びます。

(http通信が可能であれば何言語でも利用可能です)

今回のブログでは、WEB系プログラマに身近なphpと少しJavaScriptを組み合わせてビットコインの価格を取得して分析するために、まずはどういう環境を作ればいいかを記載したいと思います。

1.javascriptだけで開発する → 不可能

残念ながら出来ません。

ブラウザに実装されているJavaScriptにはajax(XMLHttpRequest)というhttp通信を行うオブジェクトは用意されているのですが、残念ながらセキュリティの問題により自分が管理していないサーバに対してajaxのリクエストを行うことが出来ません。

※初心者にはめちゃくちゃ難しくおすすめしませんが、Node.jsとかいうサーバサイドjsなら可能です・・・。

phpでやったほうが良いと思います。

2.php + javascriptでやる場合

個人がやるのはこっちの方法が安定稼動させやすいのではないかと思いますが、安定して稼動を目指すなら、自分専用で1台丸ごと使用可能な専用レンタルサーバで運用するのが良いです。

しかし、利用料が高くなります。

kagoyaサーバが専用プランのレンタルサーバだと安いと思います。

初心者で値段のチェックとメールを送信するだけくらいで利用する場合はレンタルサーバの共用プランでphpが利用可能な安いレンタルサーバがお金を無駄にせず無難と思います。

この用途で共用プランでおすすめのレンタルサーバはさくらサーバです。

・さくらサーバ(メールを送ってプログラムを起動する仕組みを組み込むことができる)

・コアサーバ(cronが利用可能です。しかし残念ながら、1時間に一回しか起動できないです・・・)

1時間に一回チェックするだけならば、コアサーバでcronからphpを起動するので良いですが、1時間に一回の値段チェックでは実用レベルにはならないと思います。

年間5万円くらい払っても惜しくないほどに、お金が稼げそうな自信がついたらkagoyaサーバの専用プランがおすすめです。

cronが1分に1回起動可能です。cronで1分に一回値段をチェックできます。

あと、専用プランなら、自分専用のIPアドレスを取得できます。

共用プランの場合、同じIPアドレスを複数の人が使っているため同じことをしている人が居た場合、相手側のサーバの(REST API提供側)アクセスが激しすぎる場合などにアクセスを拒否することがありえます。

記事がすごく長くなりそうなのでphpでREST APIを呼び出して、ローソク足のデータを取得する方法だけ記載します。

それができれば、あとは自宅のパソコンを付けっぱなしにしておいてphpとJavascriptで作成した画面にJavascriptのタイマーの処理を書いて1分ごとに自分が作ったPHPを呼び出すなどで良いかと思います。

ビットコインの値段を無料で取得できるAPIは調べれば色々ありますし、取引口座を作れば口座を作った会社が提供するAPIもあります。

ここでは口座を作らず、アカウント情報なども作らずにいきなり使える Cryptowatch API を紹介します。

https://cryptowat.ch/docs/api#market-ohlc

ドキュメントは残念ながら英語です。

下記のphpのプログラムをWEBサーバにおいて実行すればビットフライヤーのビットコインを円で買う場合の1分足のデータが10本取得できます。

Cryptowatch API の ohlcというAPIを呼び出しています。

ohlcとはOHLC とは 指定した時間帯の Open価格、High価格、Low価格、Close価格のことです。

このブログ書いてみて思いましたが、ちょっと初心者には難しすぎたかもしれません・・・。

あと、相場の知識もないとちょっと難しいですね・・・。

cryptowatchApi.php

<?php
// Cryptowatch APIを使うクラス
class cryptowatchApi
{

  public $url          = 'https://api.cryptowat.ch';
  public $ohlc_returns = 10;// 何本のローソク足データを取得するか?
  public $timeout      = 5; // httpで最長5秒待つ


  // REST API用の共通関数
  // php curlという関数が使えれば、WEBサーバから、
  // よそのサーバにhttp通信を行うことが出来ます
  // curlが絶対にphpに組み込まれている保証はありませんが、
  // さくらサーバ、コアサーバ、カゴヤサーバならつかえます
  public function req($method, $path, $aQuery=NULL)
  {
    $this->isRequest = TRUE;
    $timestamp = time();
    if($aQuery&&count($aQuery)) {
      $path .= '?';
      $i = 0;
      foreach($aQuery as $k=>$v) {
        if($i) {
          $path .= '&';
        }
        $path .= $k.'='.$v;
        $i++;
      }
      $body = json_encode($aQuery);
    }

    $url = $this->url.$path;
    //echo $url; // dbg
    $curl = curl_init($url);
    $aOptions = array(
        CURLOPT_RETURNTRANSFER=>TRUE // curl_execのリターンがhtmlになる
      , CURLOPT_TIMEOUT=>$this->timeout
      , CURLOPT_HEADER=>TRUE // httpヘッダ付きのレスポンスになる
    );
    if($method == 'POST') {
      $aOptions[CURLOPT_HTTPHEADER][] = 'Content-Type: application/json';
      $aOptions[CURLOPT_POST] = TRUE;
      $aOptions[CURLOPT_SSL_VERIFYPEER] = FALSE; // オレオレ証明書対策
      $aOptions[CURLOPT_SSL_VERIFYHOST] = FALSE;
      $aOptions[CURLOPT_POSTFIELDS] = $body;
    } else {
      $aOptions[CURLOPT_HTTPGET] = TRUE;
    }

    curl_setopt_array($curl, $aOptions);
    $http_res = curl_exec($curl);
    $this->http_res_hdr = curl_getinfo($curl); // 'http_code'
    curl_close($curl);
    return $http_res;
  }

  // httpヘッダのログつきのファイルから
  // httpのbody部分(htmlのbodyではない!)を取得
  public function getJsonBody($http_response)
  {
    $http_response = str_replace("\r", '', $http_response);
    list($http_header, $html) = explode("\n\n", $http_response);
    return $html;
  }

  // OHLC とは  指定した時間帯の Open価格、High価格、Low価格、Close価格のこと
  // それを取得します
  public function ohlc($Year=NULL, $Month=NULL, $Day=NULL, $Hour=NULL, $Minute=NULL)
  {
    $aQuery = array(); // REST APIに渡すパラメータを格納する配列

    // どの時間足のデータを取得するか?
    $periods =     60; //     60 1分足
    //$periods =    300; //    300 5分足
    //$periods =    900; //    900 15分足
    //$periods =   1800; //   1800 30分足
    //$periods =   3600; //   3600 1時間足
    //$periods =   7200; //   7200 2時間足
    //$periods =  14400; //  14400 4時間足
    //$periods =  21600; //  21600 6時間足
    //$periods =  43200; //  43200 12時間足
    //$periods =  86400; //  86400 1日足
    //$periods = 259200; // 259200 3日足
    //$periods = 604800; // 604800 1週間足

    // どの時間足のデータを取得するか?
    $aQuery['periods'] = $periods;

    $Hour   = empty($Hour   ) ? date('G') : $Hour   ; // 省略すると現在時間を指定
    $Minute = empty($Minute ) ? date('i') : $Minute ; // 省略すると現在時間を指定
    $Month  = empty($Month  ) ? date('n') : $Month  ; // 省略すると現在時間を指定
    $Day    = empty($Day    ) ? date('j') : $Day    ; // 省略すると現在時間を指定
    $Year   = empty($Year   ) ? date('Y') : $Year   ; // 省略すると現在時間を指定

    $before = mktime($Hour, $Minute, 0, $Month, $Day, $Year);
    $returns = $this->ohlc_returns;
    // キリのいいところから始まるように整形
    $before = ceil($before/($returns*$periods)) * ($returns*$periods);
    $after = $before - $returns*$periods;

    // 期間を指定
    $aQuery['before']  = $before;
    $aQuery['after']   = $after;

    $exchange = 'bitflyer'; // ビットフライヤー取引所を指定
    $pair     = 'btcjpy';   // ビットコイン円の相場

    if( $http_response = $this->req('GET', '/markets/'.$exchange.'/'.$pair.'/ohlc', $aQuery) ) {
        if($this->http_res_hdr['http_code']=='200') {
          // このコメントを外して、保存すべきファイル名を指定すれば、取得したデータを保存できます
          // file_put_contents($http_log_path, $http_response, LOCK_EX);
        } else {
          $this->isReqError = TRUE;
          echo '通信エラーが発生しました http_code:'.$this->http_res_hdr['http_code'];
        }
    } else {
      echo '通信エラーが発生しました';
    }

    $json = $this->getJsonBody($http_response); // jsonという形式でデータが取得できる

    $aJson = json_decode($json, TRUE); // jsonをphpの配列に変換

    return $aJson;
  }

}

/////////////////////////////
// 上記クラスを使う実装部分
/////////////////////////////

$cryptowatchApi = new cryptowatchApi();

// jsonという形式でデータが取得できて、それをphpの配列に格納された状態で取得できます
$aJson = $cryptowatchApi->ohlc();

// jsonを配列変換したデータの中身がどうなっているのか見る
var_dump($aJson);

スタッフブログ最新記事

Youtube最新掲載動画

【「新人女性スタッフ」インタビュー (入社初日の研修終わりにイロイロ質問してきました!)

「新人女性スタッフ」にインタビューをしてきました。彼女の「研修の感想」「研修担当者の印象」「今後の夢・目標」とあわせて「会社の雰囲気」を感じ取ってもらえたら嬉しいです!いわゆる「風俗」のイメージとは、きっとだいぶ違うものをお感じになられると思います(^^)

【池袋の人気風俗店】女の子待機所&受付 ★NEW 78秒 お店紹介動画★

東京・池袋の「人気風俗店」の「女の子待機所」と「受付所」を撮影してきました。 2019/8にもこちらのお店を撮影した動画を公開していますが、床を張り替えてキレイになりましたので、またムービーを撮ってまいりました。 「女の子待機所」を目にする機会はなかなかありませんので、ぜひご覧ください。

横浜 日ノ出町の【人気コスプレ風俗店】の「受付」「女の子待機所」を100秒でご紹介!!

横浜日ノ出町駅の「風俗店」の「受付&女の子待機所」を公開しています! 「コスプレ店」もあるので受付にはお客様が直接「見て」「触って」選べるように「コスプレ衣装」「下着」「小物」が所狭しとディスプレイされています。 動画の後半では「女の子の待機所」も少しだけ公開しています。風俗でお仕事をしないと絶対に足を立ち入ることはない「秘密の花園」ですので、風俗にご興味がある方は、ぜひ最後までご覧ください。

五反田店「巨乳」「人妻」「風俗エステ」「オナクラ」の【裏側】を撮影してきました!!

風俗のメッカ「五反田」で人気のシンデレラFCグループのお店の「裏側」を撮影してまいりました! 映画やドラマに出てくるような「アウトロー」「アングラ」「暗い雰囲気」はなく、ごく普通の事務所です!どの風俗店で働こうかな?とお考えの際の参考材料としてぜひご覧ください。

タグ

スタッフブログ最新記事

月別 アーカイブ

2023年

2022年

2021年

2020年

2019年

2018年

2017年

2016年

2015年

2014年

2013年

2012年

2011年

2010年

2009年

2008年

2007年

教育官ブログ
\風俗業界時評/シン・コラム
英語スタッフブログ!