Here API를 사치스럽게 사용해 보았다. w
인연이 있고, 도쿄이지만, fukuoka.ex에서 Elixir 패턴 매치! 라고 외치다 사조 얼굴. 눈 입니다.
최근에는 일본 게이미 피케이션 협회 을 시작하거나 프로그래밍 교육을 즐겁게 하는 장치 만들기를 하고 있습니다. 동료 모집중이므로, 부디, 지금의 일본에 일석을 던지고 싶은 분은 DM 주세요.
또한 fukuoka.ex의 piacere 씨가 쓴 Elixir 튜토리얼 Excel에서 함수형 언어 마스터 1회째:데이터행의 “정렬”과 “좁히기”은 매우 들어가기 쉬운 교재이므로 추천입니다. 제7회까지 있으므로, 아직 하고 있지 않은 분은 꼭 트라이 해 봐 주세요.
ASIA OPEN DATA Hack a Thon!
Here API를 만져 보았다! 하고 싶은 것만을 위한 고통의 책
그런데, 이번은 ASIA OPEN DATA Hack a Thon!에서 멘토로서 참가했습니다.
그 때 스폰서인 Here의 API를 이용하면 상금 $1500을 노릴 수 있다! 라고 하는 일도 있어, 조속히 사용하고 싶다!
라는 참가자의 목소리에 대답하여 API를 보면, 굉장한 많은 API가 갖추어져 있기 때문에, 기대대!
그렇다고 해서 만져 보았지만, 무려! 일본의 지도는 아직 미대응!
하지만 일본 시장을 중시한 것 같기 때문에 그 근처는 향후에 기대하는 것으로, 간단하게 사용할 수 있는 것으로 무언가 만들어 보는 것으로 했습니다.
만든 것
Destination Weather API
를 이용하여 지도에 날씨 아이콘을 표시합니다.
비망록
모처럼이므로, 비망록으로서 잡코드를 실어 둡니다.
프로젝트는 mix phx.new here로 만들었습니다.
api를 호출하기 위해 smallex 모듈 추가
이 근처는 생략합니다.
우선 환경 변수에 here id와 here code를 넣는다.
export HERE_API_id="xxxxxxx"
export HERE_API_code="xxxxxxx"
grep하고 확인
export -p | grep HERE
config.ex에 환경 변수에서 얻는 코드 작성
config.ex
# Import API
config :here, HereWeb.Endpoint,
hereid: System.get_env("HERE_API_id"),
herecode: System.get_env("HERE_API_code")
here.ex에 환경 변수로부터 취득한 id와 code를 연결해, Json.get(domain, path)에 이용하기 위한 path를
생성하다
lib/here.exdefp get_id do
Application.get_env(:here,HereWeb.Endpoint)[:hereid]
end
defp get_code do
Application.get_env(:here,HereWeb.Endpoint)[:herecode]
end
def get_here(location) do
Enum.join(["/weather/1.0/report.json?product=observation&name=",location,"&app_id=", get_id(),"&app_code=",get_code()])
end
index.html.eex에서 leaflet.js에서 일본지도를 표시하여 here API에서 얻은 날씨 정보를 표시했습니다.
index.html.eex
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" />
<script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>
<%
domain = "https://weather.cit.api.here.com"
weather = Json.get(domain,Here.get_here("Tokyo"))
local = Map.get(weather,"observations")
[head | tail] = Map.get(local,"location")
city = Map.get(head, "city")
lat = Map.get(head, "latitude")
lng = Map.get(head, "longitude")
[ obs ] = Map.get(head,"observation")
url = Map.get(obs,"iconLink")
%>
<div id="map"></div>
<style>
div#map{
width: 100%;
height: 500px;
}
</style>
<script>
var t_std = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
});
var map = L.map('map',{
center: [<%= lat %>, <%= lng %>],
zoom: 13,
layers: [t_std]
});
var weatherIcon = L.icon({
iconUrl: '<%= url %>',
iconRetinaUrl: '<%= url %>',
iconSize: [100, 100],
iconAnchor: [25, 50],
popupAnchor: [0, -50],
});
var mapMarker = L.marker([<%= lat %>, <%= lng %>], { icon: weatherIcon }).addTo(map);
var comment = '<%= city %>';
mapMarker.bindPopup(comment).openPopup();
</script>
감상
here API의 수가 많기 때문에, 여러가지 사용해 보고 싶다
빨리 일본지도 대응해주지 않을까 w
Reference
이 문제에 관하여(Here API를 사치스럽게 사용해 보았다. w), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Yoosuke/items/2eda651f5a1979e03bcb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
export HERE_API_id="xxxxxxx"
export HERE_API_code="xxxxxxx"
export -p | grep HERE
# Import API
config :here, HereWeb.Endpoint,
hereid: System.get_env("HERE_API_id"),
herecode: System.get_env("HERE_API_code")
defp get_id do
Application.get_env(:here,HereWeb.Endpoint)[:hereid]
end
defp get_code do
Application.get_env(:here,HereWeb.Endpoint)[:herecode]
end
def get_here(location) do
Enum.join(["/weather/1.0/report.json?product=observation&name=",location,"&app_id=", get_id(),"&app_code=",get_code()])
end
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" />
<script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script>
<%
domain = "https://weather.cit.api.here.com"
weather = Json.get(domain,Here.get_here("Tokyo"))
local = Map.get(weather,"observations")
[head | tail] = Map.get(local,"location")
city = Map.get(head, "city")
lat = Map.get(head, "latitude")
lng = Map.get(head, "longitude")
[ obs ] = Map.get(head,"observation")
url = Map.get(obs,"iconLink")
%>
<div id="map"></div>
<style>
div#map{
width: 100%;
height: 500px;
}
</style>
<script>
var t_std = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
});
var map = L.map('map',{
center: [<%= lat %>, <%= lng %>],
zoom: 13,
layers: [t_std]
});
var weatherIcon = L.icon({
iconUrl: '<%= url %>',
iconRetinaUrl: '<%= url %>',
iconSize: [100, 100],
iconAnchor: [25, 50],
popupAnchor: [0, -50],
});
var mapMarker = L.marker([<%= lat %>, <%= lng %>], { icon: weatherIcon }).addTo(map);
var comment = '<%= city %>';
mapMarker.bindPopup(comment).openPopup();
</script>
Reference
이 문제에 관하여(Here API를 사치스럽게 사용해 보았다. w), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Yoosuke/items/2eda651f5a1979e03bcb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)