質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Bitcoin

Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2293閲覧

ビットコインの自動売買

Aufheben-123

総合スコア7

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Bitcoin

Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2018/06/07 17:11

超初心者です、恐縮です。
bitflyerのapiを使用してRubyで自動売買を作ってますが、つまづいていますので質問します。
注文時、売買値設定のbodyはシングルクォートで囲まれていますが、ここに変数で指値をする場合どのように書けばいいのかが全く分かりません。
ご教示いただければ幸いです。

参考までに以下が使用しているbitflyer apiの注文です。
IFD注文用にしておりますが、body内parameterのpriceを別途指定した変数にしたいのですが、そもそも上記のようにbodyがシングルクォートで囲まれており変数展開できません。

require "net/http"
require "uri"
require "openssl"

key = "API KEY "
secret = " YOUR API SECRET "

timestamp = Time.now.to_i.to_s
method = "POST"
uri = URI.parse("https://api.bitflyer.jp")
uri.path = "/v1/me/sendparentorder"
body = '{
"order_method": "IFD",
"minute_to_expire": 10000,
"time_in_force": "GTC",
"parameters": [{
"product_code": "FX_BTC_JPY",
"condition_type": "LIMIT",
"side": "BUY",
"price": buy_order,
"size": 0.1
},
{
"product_code": "FX_BTC_JPY",
"condition_type": "LIMIT",
"side": "SELL",
"price": sell_order,
"size": 0.1
}]
}'

text = timestamp + method + uri.request_uri + body
sign = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), secret, text)

options = Net::HTTP::Post.new(uri.request_uri, initheader = {
"ACCESS-KEY" => key,
"ACCESS-TIMESTAMP" => timestamp,
"ACCESS-SIGN" => sign,
"Content-Type" => "application/json"
});
options.body = body

https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
response = https.request(options)

試したこと

定数を指定した場合問題なく発注できました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

bodyはシングルクォートで囲まれていますが、ここに変数で指値をする場合どのように書けばいいのか

以下の2点の変更が必要です。

  • body = ' ~ ' を " ~ " に置き換える
  • " ~ " の中に含まれる「"」を全て「"」に置き換える("をエスケープする、と言います)
  • 変数展開したい変数を #{~}で囲う

または、Rubyのヒアドキュメントという構文を使って以下のようにも書けます。
この場合、二番目の「"」のエスケープが不要になります。

Ruby

1body = <<-EOSTR 2{ 3中略 4"price": #{buy_order}, 5中略 6}, 7{ 8中略 9"price": #{sell_order}, 10中略 11}] 12} 13EOSTR

投稿2018/06/08 01:59

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Aufheben-123

2018/06/08 02:37

ありがとうございました。 1番目の方法で解決しましたが、ヒアドキュメントという構文は、この先の 拡張性を考えると身に付けたいと思います。 しばらく勉強を続けます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問