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

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

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

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

JSON

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

API

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

Q&A

解決済

1回答

2116閲覧

Google Place APIでレーダー検索と詳細検索を組み合わせたい

Manamin

総合スコア14

Ruby

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

JSON

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

API

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

0グッド

0クリップ

投稿2017/09/07 04:06

編集2017/09/07 04:09

Google Place APIでレーダー検索のリクエストを使うと周辺情報が200件取得できるのですが、レーダー検索リクエストの場合詳細情報が取得できないため、詳細検索リクエストを組み合わせてレーダー検索で得たplace_idを元に詳細検索し、緯度と経度と施設名を表示させたいです。(最終的には出力結果をjsonファイルに格納したいです)

しかし25行目で

in `[]‘: no implicit conversion of String into Integer (TypeError) from googleplaceapi.rb:25:in `<main>‘

とエラーが出ます。

配列の扱い方の問題だと思うのですがどのように書き換えればいいか教えていただきたいです。

なおこちらを参考にしています。
https://developers.google.com/places/web-service/search?hl=ja

ruby

1require 'net/https' 2require 'uri' 3require 'json' 4 5API_KEY = 'Your API KEY' 6lat = '-33.8670522' 7lng = '151.1957362' 8rad = '5000' 9 10#types = 'restaurant' 11# types = 'university' 12types = 'hospital' 13#types = 'school' 14 15language = 'en' 16 17uri = URI.parse "https://maps.googleapis.com/maps/api/place/radarsearch/json?location=#{lat},#{lng}&radius=#{rad}&types=#{types}&language=en&key=#{API_KEY}" 18 19request = Net::HTTP::Get.new(uri.request_uri) 20response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http| 21 http.request(request) 22end 23 24body = JSON.parse response.body 25results = body['results'] 26 27results.each_with_index do |result| 28 place_id = result['place_id'] 29 30 uri2 = URI.parse "https://maps.googleapis.com/maps/api/place/details/json?placeid=#{place_id}&language=en&key=#{API_KEY}" 31 32 request = Net::HTTP::Get.new(uri2.request_uri) 33 response = Net::HTTP.start(uri2.host, uri2.port, use_ssl: uri2.scheme == 'https') do |http| 34 http.request(request) 35 end 36 37 detail = JSON.parse response.body 38 place_details = detail['results'] 39 40 place_details.each_with_index do |place_detail| 41 location = place_datail['geometry']['location'] 42 lat, lng = location['lat'], location['lng'] 43 44 p "#{location['lat']}, #{location['lng']}, #{place_datail['name']}" 45 end 46end

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

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

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

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

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

guest

回答1

0

ベストアンサー

とりあえず上記のエラー内容は

in `[]‘: no implicit conversion of String into Integer (TypeError) from googleplaceapi.rb:25:in `<main>‘

googleplaceapi.rbの25行目に問題があります。
内容は[]の中にInt形(0とか1とか)が入らなくちゃいけないのに文字が入ってますっていうことです。

つまり['hoge', 'fuga', 'hehe']というArray形で来ているのに['result']などの文字列で取ろうとしていることが問題です。

ちなみに、僕もGoogle Place API取得して試してみたのですが、25行目でエラーは起こりませんでしたが、数カ所おかしいところがありました。

  1. 38行目のplace_details = detail['results']ですが、resultsというkeyを持ったものはいませんでした。resultはいました!

  2. place_detailではなくplace_datailというタイピングミスが見られました。

一つ一つ出力して追っていくと解決すると思われますので頑張ってください!

投稿2017/09/07 05:56

MasakazuFukami

総合スコア1869

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

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

Manamin

2017/09/08 08:19

上記よりタイプミスを修正したのち、resultとplace_detailが一対一の関係だったので、resultsのループの中でplace_detailsをeachで回していたのを消したら解決しました!ありがとうございました!
MasakazuFukami

2017/09/08 08:34

おぉ!良かったです!!! また何かあれば!!(๑•̀ㅂ•́)و✧
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問