ruby-on-rails - 使用 HTTParty gem 时如何设置我的 `base_uri`?
问题描述
我正在创建一个使用外部地理位置 API 的小型 Rails。它应该接受一个字符串(地址)并返回坐标。我不确定如何使用 HTTParty gem 设置基本 URI。API 的文档说可以将请求发送到端点
GET https://eu1.locationiq.com/v1/search.php?key=YOUR_PRIVATE_TOKEN&q=SEARCH_STRING&format=json
如何在我的类方法中设置令牌和搜索字符串?这是我到目前为止的代码。
locationiq_api.rb
include HTTParty
base_uri "https://eu1.locationiq.com/v1/search.php?key=pk.29313e52bff0240b650bb0573332121e&q=SEARCH_STRING&format=json"
attr_accessor :street
def find_coordinates(street)
self.class.get("/locations", query: { q: street })
end
def handle_error
if find_coordinates.code.to_i = 200
find_coordinates.parsed_response
else
raise "Couldn't connect to LocationIQ Api"
end
end
end```
locations controller:
```class LocationsController < ApplicationController
before_action :find_location, only: [:show, :destroy, :edit, :update]
def new
@search = []
# returns an array of hashes
@search = locationiq_api.new.find_coordinates(params[:q])['results'] unless params[:q].nil?
end
def create
@location = Location.new(location_params)
if @location.save
redirect_to root_path
else
render 'new'
end
end
private
def location_params
params.require(:location).permit(:place_name, :coordinate)
end
def find_location
@location = Location.find(params[:id])
end
end```
解决方案
这样的事情可能会有所帮助:
class LocationIqApi
include HTTParty
base_uri "https://eu1.locationiq.com/v1/search.php"
def initialize(api_key, format = "json")
@options = { key: api_key, format: format }
end
def find_coordinates(street)
self.class.get("/locations", query: @options.merge({ q: street }))
end
def handle_error
if find_coordinates.code.to_i = 200
find_coordinates.parsed_response
else
raise "Couldn't connect to LocationIQ Api"
end
end
end
然后,当您想使用它时,您需要使用您的密钥创建一个新实例:
@search = LocationIqApi.new(YOUR_API_KEY_HERE).find_coordinates(params[:q])
推荐阅读
- php - DOM Pdf 在 codeigniter 框架中不起作用
- r - 在 R 中大小不等的多个 data.frame 对象中查找最新日期
- android - Android OS 语言查找:让 OS 知道应用的默认语言是什么
- mysql - MYSQL - 如何从具有 2 列的子查询更新表
- sql - “通过”VBA 附近的语法不正确
- java - 计算适合 docx 行的字符数
- python - 将字符串列表搜索到熊猫数据框中并返回包含该字符串的整行以构建新的 csv 文件
- git - 使用 git subtree 在项目中正确添加子目录
- python - Python Insightconnet 工作流程中的模式匹配
- python - 计算python中CARTHE漂移器集的相对离散度