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

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

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

JSONP(JSON with padding)は、JSONを使用した関数呼び出しのための仕組み。クロスドメインでのデータの受け渡しが可能です。JavaScriptからクロスドメインで容易にデータを扱うことができます。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

API

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

Q&A

解決済

3回答

662閲覧

railsでapiから返ってくるjsonpデータをjson形式にして扱いたい

tatu0

総合スコア19

JSONP

JSONP(JSON with padding)は、JSONを使用した関数呼び出しのための仕組み。クロスドメインでのデータの受け渡しが可能です。JavaScriptからクロスドメインで容易にデータを扱うことができます。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

API

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

0グッド

1クリップ

投稿2019/02/26 04:21

railsでapiをたたいて帰ってくるjsonp形式のデータをjson形式に加工したいです。
方法としてはjsonpデータの余分な文字列を空文字に置換しようと考えております。
例えばコントローラーのshowアクション内でその処理をしようとすると、変数jsonpをgsub!メソッドでjsonpデータの先頭の「if(typeof(xml)=='undefined') xml = {};xml.data」を空文字に置換しようとしても消えません。
文字を置換するために何か良い方法はございますでしょうか。
もしくは別の方法があったりするのでしょうか。
よろしくお願いします。

※railsのshowコントローラー

def show require 'net/http' require 'uri' require 'json' uri = URI.parse('http://www.ekidata.jp/api/l/11302.json') jsonp = Net::HTTP.get(uri) #NET::HTTPを利用してAPIを叩く jsonp.gsub!(/^if(typeof(xml)=='undefined')xml={};xml.data=/, '') end

※apiをたたくと帰ってくるjsonpデータ

if(typeof(xml)=='undefined') xml = {}; xml.data = {"line_cd":11302,"line_name":"JR山手線","line_lon":139.73522275686264,"line_lat":35.69302730762992,"line_zoom":12,"station_l":[{"station_cd":1130201,"station_g_cd":1130201,"station_name":"大崎","lon":139.728439,"lat":35.619772}]} if(typeof(xml.onload)=='function') xml.onload(xml.data);

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

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

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

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

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

guest

回答3

0

ベストアンサー

{}が数量指定子と誤解釈されているようですね
無意味に正規表現を使う必要はないでしょう。

rb

1jsonp.gsub!("if(typeof(xml)=='undefined') xml = {};\nxml.data = ", '') 2jsonp.gsub!("if(typeof(xml.onload)=='function') xml.onload(xml.data);", '')

もしくは単に

rb

1json = jsonp.lines[2][10..-1]

xmlでも提供されているようなので
そちらを利用した方がよい気もしますね


考えなくてはいけないのは
APIの利用条件

■ 利用の制限

商用、非商用にかかわらず、どなたでもご利用いただくことができますが、1日に10万アクセスを超えるご利用の場合は、あらかじめ弊社にご連絡ください。
また、短時間に大量のアクセスを行わないようにしてください。

です。

コントローラーから読み込みをしてしまってはF5連打などで短時間に大量のアクセスが発生する可能性があります。

明確な基準がありませんが、10万[回/日] = 1.15[回/秒]なので、そのへんが1つの目安かなぁと思いますね
(とはいえ、Librahackという前例があるので勝手に判断していいかは微妙)

  • データベースかどこかに放り込む
  • ファイルとしてダウンロードしてリポジトリに放り込む

などでアクセス回数を減らす努力が必要に思います
(めったに更新しないものな気がしますし手動更新で問題ないかもしれませんね)

投稿2019/02/26 05:05

asm

総合スコア15147

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

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

0

固定文字列をgsubで消すのなら、正規表現じゃなくて、文字列で書くと楽です。

Ruby

1require "json" 2 3jsonp = <<EOS 4if(typeof(xml)=='undefined') xml = {}; 5xml.data = {"line_cd":11302,"line_name":"JR山手線","line_lon":139.73522275686264,"line_lat":35.69302730762992,"line_zoom":12,"station_l":[{"station_cd":1130201,"station_g_cd":1130201,"station_name":"大崎","lon":139.728439,"lat":35.619772}]} 6if(typeof(xml.onload)=='function') xml.onload(xml.data); 7EOS 8 9jsonp.sub!("if(typeof(xml)=='undefined') xml = {};\nxml.data =","") 10jsonp.sub!("if(typeof(xml.onload)=='function') xml.onload(xml.data);","") 11 12p JSON.parse(jsonp)

投稿2019/02/26 04:35

otn

総合スコア84423

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

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

0

このAPIにはXML形式も存在しますので(公式)、中途半端なJSONPデータをパースするのに悪戦苦闘するなら、XML版を活用したほうがいいのではないかと思います。

投稿2019/02/26 04:30

maisumakun

総合スコア145123

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問