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

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

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

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

Bitcoin

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

API

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

Q&A

解決済

1回答

349閲覧

QUOINEのAPIからレート取得を一定時間すると出力されるパースエラーを解消したい。

no9asia

総合スコア11

Ruby

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

Bitcoin

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

API

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

0グッド

2クリップ

投稿2018/03/23 03:13

QUOINEで頻発するエラーを解消したい。

現在、QUOINEのAPIの勉強中です。

プログラムはRubyを使用しています。
レート取得及び、残高などを呼び出す場合に、
一定時間が経つと同様のエラーがでてしまいます。

エラーメッセージは

`parse': 784: unexpected token at '<!DOCTYPE html> (JSON::ParserError)

が出力されてしまいます。

response_hash = JSON.parse(response.body)

に問題があるとも出力されています。

一定の時間というのは、最初の5分くらいはレート、

残高とも返ってくるのですが、一定の時間が経過すると

上記エラーが出力されてしまいます。

プログラムは、残高取得のものを添付いたします。

根本的な解決策をお持ちの方、ご教授頂けると
大変助かります。

よろしくお願い致します。

発生している問題・エラーメッセージ

`parse': 784: unexpected token at '<!DOCTYPE html> (JSON::ParserError) #この場所のプログラムがおかしいと出力されます。 response_hash = JSON.parse(response.body)

該当のソースコード

Ruby

1 2def QN_get_balance() 3 4 key = KEY 5 secret = SECRET 6 7 uri = URI.parse("https://api.quoine.com") 8 http = Net::HTTP.new(uri.host, uri.port) 9 http.use_ssl = true 10 11 path = '/accounts/balance' 12 13 auth_payload = { 14 path: path, 15 nonce: DateTime.now.strftime('%Q'), 16 token_id: key 17 } 18 19 signature = JWT.encode(auth_payload, secret, 'HS256') 20 21 request = Net::HTTP::Get.new(path) 22 request.add_field('X-Quoine-API-Version', '2') 23 request.add_field('X-Quoine-Auth', signature) 24 request.add_field('Content-Type', 'application/json') 25 26 response = http.request(request) 27 response_hash = JSON.parse(response.body) 28 29end 30 31#呼び出し側 32loop do 33  p qn_jpy = QN_get_balance()[0]["balance"] 34 sleep(5) 35 p qn_btc = QN_get_balance()[7]["balance"] 36 sleep(5) 37end

試したこと

QUOINEのAPIには5分で300回が上限だという記事を見つけ

最初はAPIへのアクセス回数が多すぎるのかと思い、

間にsleepなどを挟んで、APIを叩きすぎないように

したりもしたのですが、やはりエラーがでてしまいます。

補足情報(FW/ツールのバージョンなど)

開発環境はCloud9上のRubyで開発を行っています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

問題発生時の変数 response の中身がJSON形式ではないと考えられます。
具体的にはエラーが示すようにHTML形式のコンテンツのようです。

ruby

1response = http.request(request) 2p response 3response_hash = JSON.parse(response.body)

として、どのようなコンテンツが返ってきているか確認しましょう。
HTMLの中身にJSONが返ってきていない理由が含まれているかもしれません。
(5分ほどしてエラーとなるときのresponseの中身をみてデバッグしましょう。)

投稿2018/03/23 07:54

easymachine

総合スコア48

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

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

no9asia

2018/03/23 10:24

早速の回答ありがとうございます。 responseの中を確認してみました。 <title>api.quoine.com | 525: SSL handshake failed</title> おっしゃるとおり、html形式で返されていたため エラーがでていました。 https://support.cloudflare.com/hc/en-us/articles/200278659-Error-525-SSL-handshake-failed CloudfareとQuoine間で何かエラーがおきているんですかね? responseの中身を確認し、エラーがでていれば回避するようなプログラムに 書き換えたいと思います。 回答ありがとうございました。
easymachine

2018/03/23 11:23

一定時間までは取得できているということなので、おそらくQUOINE側が高負荷か何かでレスポンスできていないのではないかと思います。 APIを叩いても必ず目的のデータが得られるとは限らないので、エラー制御を入れる対策で根本的に正しいと考えます。
no9asia

2018/03/26 02:19

エラー回避にrescueで対策したところ、順調に止まることなく取得できはじめました。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問