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

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

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

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

Q&A

解決済

1回答

1665閲覧

仮想通貨取引所のレート取得に際してのSyntaxError: Unexpected token: < エラーについて

NotJeanDoe

総合スコア8

API

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

0グッド

0クリップ

投稿2018/01/11 04:32

編集2018/01/11 06:31

現在、仮想通貨取引所のAPIを利用してレートを取得しようとしています。
ソースコードは以下です。

function doGet() {
var bb_btc = UrlFetchApp.fetch("https://public.bitbank.cc/btc_jpy/ticker");
var bb_jsbtc = JSON.parse(bb_btc.getContentText());

var ce_cyder = UrlFetchApp.fetch("https://www.coinexchange.io/api/v1/getmarketsummary?market_id=463");
var ce_jscyder = JSON.parse(ce_cyder);

var html = HtmlService.createTemplateFromFile('index.html');
html.msg = "1Cyder:" + ce_jscyder["result"]["LastPrice"] + "&1BTC:" + bb_jsbtc["data"]["sell"];
return html.evaluate();
}

このうち、var ce_jscyder = JSON.parse(ce_cyder); の箇所でエラーメッセージが表示され、SyntaxError: Unexpected token: < と出ます。
この個所を修正すれば、ほかは大丈夫だと思うのですが、
どうも解決法が分かりません。

初歩的なことで申し訳ありませんが、解決策をご教示いただければと思います。

追記:ほかの類似サイトを見ますと、違うサイトを代用しているようです。
ということで、現在coinmarketcapというサイトのAPIを使おうとしています。
コードは、

function doGet() {
var cyder = UrlFetchApp.fetch("https://api.coinmarketcap.com/v1/ticker/cyder/?convert=JPY");
var jscyder = JSON.parse(cyder.getContentText());

  var html = HtmlService.createTemplateFromFile('index.html');
html.msg = jscyder["name"]
return html.evaluate();
}

です。
ただ、これだとundefinedと出るので修正方法をご教示いただけたらと思います。

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

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

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

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

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

guest

回答1

0

ベストアンサー

bb_btcgetContentTextを呼んでいるのに、ce_cyderはそのままJSON.parseに渡しているからじゃないですかね。

追記

coinexchangeというサービスはIncapsulaというWAF(Web Application Firewall)を使っているようです。機械的なアクセス(スクレイピングやDDoS)をブロックする仕組みですね。あまり悪さするとブロックされるようです。以下に「UserAgent偽装すれば通るんじゃない?成功するかわからんけど」といった旨の回答があります。
https://stackoverflow.com/questions/36971604/getting-wrong-page-source-when-calling-url-from-python

投稿2018/01/11 05:25

編集2018/01/11 06:14
masaya_ohashi

総合スコア9206

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

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

NotJeanDoe

2018/01/11 05:34

ご回答ありがとうございます。 確かに、getContentTextが欠けていましたね。 ただ、それで修正したところでも、まだ同じエラーが出ます。 以下が、修正後のソースコードです。 function doGet() {   var bb_btc = UrlFetchApp.fetch("https://public.bitbank.cc/btc_jpy/ticker"); var bb_jsbtc = JSON.parse(bb_btc.getContentText()); var ce_cyder = UrlFetchApp.fetch("https://www.coinexchange.io/api/v1/getmarketsummary?market_id=463"); var ce_jscyder = JSON.parse(ce_cyder.getContentText());       var html = HtmlService.createTemplateFromFile('index.html'); html.msg = "1Cyder:" + ce_jscyder["result"]["BidPrice"] + "&1BTC:" + bb_jsbtc["data"]["sell"];   return html.evaluate(); } よろしくお願いします。
masaya_ohashi

2018/01/11 05:36

JSON.parse(ce_cyder.getContentText());でJSON.parseせずに、html.msgにそのまま入れてみて、正しくJSONが帰ってきているかを確認してください。
NotJeanDoe

2018/01/11 05:52

ありがとうございます。 function doGet() {   var bb_btc = UrlFetchApp.fetch("https://public.bitbank.cc/btc_jpy/ticker"); var bb_jsbtc = JSON.parse(bb_btc.getContentText()); var ce_cyder = UrlFetchApp.fetch("https://www.coinexchange.io/api/v1/getmarketsummary?market_id=463");       var html = HtmlService.createTemplateFromFile('index.html'); html.msg = ce_cyder   return html.evaluate(); } で実行したところ、以下のものが帰ってきました。 <html style="height:100%"><head><META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"><meta name="format-detection" content="telephone=no"><meta name="viewport" content="initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"></head><body style="margin:0px;height:100%"><iframe src="/_Incapsula_Resource?CWUDNSAI=26&xinfo=10-23776160-0%200NNN%20RT%281515649857644%2037%29%20q%280%20-1%20-1%20-1%29%20r%280%20-1%29%20B12%284%2c315%2c0%29%20U18&incident_id=104002350065161278-153983403726212794&edet=12&cinfo=04000000" frameborder=0 width="100%" height="100%" marginheight="0px" marginwidth="0px">Request unsuccessful. Incapsula incident ID: 104002350065161278-153983403726212794</iframe></body></html> これはどうなのでしょうか。
NotJeanDoe

2018/01/11 05:59

htmlが帰ってきているのが悪いようですね。 bb_jsbtc のほうも見てみましたが、全く異なるものが帰ってきていました。
masaya_ohashi

2018/01/11 06:05

そちらのレスポンスも貼ってもらえますか?調べてみた感じ、スクレイピング防止?かなにかのように感じます。
NotJeanDoe

2018/01/11 06:08

bb_btcのレスポンスは、以下の通りです。 {"success":1,"data":{"sell":"1731838","buy":"1729727","high":"1887664","low":"1725441","last":"1732002","vol":"394.8609","timestamp":1515650821156}}
NotJeanDoe

2018/01/11 06:09

また、bb_jsbtcの場合は、 [object Object] です。 よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問