tag:crieit.net,2005:https://crieit.net/tags/%E6%B0%97%E8%B1%A1/feed
「気象」の記事 - Crieit
Crieitでタグ「気象」に投稿された最近の記事
2022-05-04T13:28:56+09:00
https://crieit.net/tags/%E6%B0%97%E8%B1%A1/feed
tag:crieit.net,2005:PublicArticle/18175
2022-04-26T17:01:11+09:00
2022-05-04T13:28:56+09:00
https://crieit.net/posts/493a752726fa6c47c162fcb7379c2c6d
気象庁の公開データを node.js と chrome ブラウザ (browserify) で表示する。
<p><a target="_blank" rel="nofollow noopener" href="https://rentry.co/nc73d">https://rentry.co/nc73d</a></p>
<p>雨なので気象庁の公開データを Javascript を使って見てみる。</p>
<h2 id="pathCode (json) を表示してみる"><a href="#pathCode+%28json%29+%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">pathCode (json) を表示してみる</a></h2>
<p>気象データを問い合わせるのに、定数になっている日本全国の場所のコード( pathCode )を見てみる。<br />
なぜなら、それをしらないとエリアごとの気象データを問い合わせできない。</p>
<h3 id="javascript"><a href="#javascript">javascript</a></h3>
<p><a target="_blank" rel="nofollow noopener" href="https://ipfs.infura.io/ipfs/QmPrjHjXe6pSwh39Qjh326uLQWsoWtBJqNvdtPnMxsRDHq"><code>tenki_area.js</code></a></p>
<pre><code class="javascript">const axios = require("axios");
const url = "https://www.jma.go.jp/bosai/common/const/area.json";
(get_area = async () => {
try {
const response = await axios.get(url);
console.log(response.data);
} catch (error) {
console.error(error);
}
})();
</code></pre>
<p>terminal:</p>
<pre><code class="bash">> node tenki-area.js > tenki-area.json
</code></pre>
<p>Rf:<br />
<a target="_blank" rel="nofollow noopener" href="https://mindtech.jp/?p=1754">https://mindtech.jp/?p=1754</a></p>
<h3 id="Ruby"><a href="#Ruby">Ruby</a></h3>
<pre><code class="ruby">require "json"
require "net/http"
area_code_url = "https://www.jma.go.jp/bosai/common/const/area.json"
response = Net::HTTP.get_response(URI.parse(area_code_url))
h_area = JSON.parse(response.body)
pp h_area["offices"]
</code></pre>
<p><a target="_blank" rel="nofollow noopener" href="https://ipfs.infura.io/ipfs/QmT3YkWhro7xMQ3uNwF4QNXUnt6aAjoGuaupzKg5ZtdqNs">tenki_area.rb</a></p>
<pre><code class="ruby">require "json"
require "net/http"
area_code_url = "https://www.jma.go.jp/bosai/common/const/area.json";
response1 = Net::HTTP.get_response(URI.parse(area_code_url))
h_area_code = JSON.parse(response1.body)
uri = "https://www.jma.go.jp/bosai/forecast/data/forecast/"
#area = "260000" #Kyoto
h_area_code["offices"].each {|v|
area = v[0]
begin
response2 = Net::HTTP.get_response(URI.parse("#{uri}#{area}.json"))
h_area_data = JSON.parse(response2.body)
h_area_data.each {|vv|
pp vv["publishingOffice"]
pp vv["reportDatetime"]
vv["timeSeries"].each {|x|
x["areas"].each {|xx| pp xx['area']}
}
puts
puts "--------------------------------------------------"
puts
}
rescue
puts
end
}
</code></pre>
<h3 id="Python"><a href="#Python">Python</a></h3>
<p><a target="_blank" rel="nofollow noopener" href="https://ipfs.infura.io/ipfs/Qmat48qKAeh6LovrqfzdisYBhbAtmKb5dpPHXZvxrisM7P">tenki_area.py</a></p>
<pre><code class="python">import requests
import json
area_code_url = "https://www.jma.go.jp/bosai/common/const/area.json";
headers = {"content-type": "application/json; charset=utf-8"}
response = requests.get(area_code_url, headers=headers)
data = response.json()
print(json.dumps(data['offices'],ensure_ascii=False,indent = 4))
</code></pre>
<h3 id="Nim"><a href="#Nim">Nim</a></h3>
<pre><code class="nim">#nim -d:ssl
import httpclient,strutils,uri
import json
const area_code_url = "https://www.jma.go.jp/bosai/common/const/area.json"
let client0 = newHttpClient()
let response = client0.get(area_code_url)
let jsObj = parseJson(response.body)
client0.close()
echo jsObj["offices"].pretty()
</code></pre>
<h2 id="get weather data"><a href="#get+weather+data">get weather data</a></h2>
<p>Rf:<br />
<a target="_blank" rel="nofollow noopener" href="https://qiita.com/youtoy/items/932bc48b03ced5a45c71">https://qiita.com/youtoy/items/932bc48b03ced5a45c71</a></p>
<h3 id="Ruby"><a href="#Ruby">Ruby</a></h3>
<p><a target="_blank" rel="nofollow noopener" href="https://ipfs.infura.io/ipfs/QmPsnpodrqshrnwJAd3AjQdgmzxHcoWvTa6F1UZVYPjjxq">tenki.rb</a></p>
<p>例えば京都という場所の天気を問い合わせる。</p>
<h3 id="javascript"><a href="#javascript">javascript</a></h3>
<p><a target="_blank" rel="nofollow noopener" href="https://ipfs.infura.io/ipfs/QmZBPSgQwSspdQeaFpCCo9fPfrrbKfZi1A3j6aW8cY8W6Y"><code>tenki.js</code></a></p>
<pre><code class="javascript">const axios = require("axios");
const url = "https://www.jma.go.jp/bosai/forecast/data/forecast/";
const area = "260000"; // Kyoto
(getWeatherForecast = async () => {
try {
const response = await axios.get(`${url}${area}.json`);
console.log(response.data);
console.log(response.data[0].publishingOffice);
console.log(response.data[0].timeSeries[0].areas);
for(const area of response.data[0].timeSeries[0].areas){
console.log(`----${area.area.name}----`);
for(const weather of area.weathers){
console.log(weather);
}
}
} catch (error) {
console.error(error);
}
})();
</code></pre>
<p>terminal:</p>
<pre><code class="bash">> node tenki.js
</code></pre>
<pre><code>> node tenki.js
[
{
publishingOffice: '京都地方気象台',
reportDatetime: '2022-04-26T17:00:00+09:00',
timeSeries: [ [Object], [Object], [Object] ]
},
{
publishingOffice: '京都地方気象台',
reportDatetime: '2022-04-26T17:00:00+09:00',
timeSeries: [ [Object], [Object] ],
tempAverage: { areas: [Array] },
precipAverage: { areas: [Array] }
}
]
京都地方気象台
[
{
area: { name: '南部', code: '260010' },
weatherCodes: [ '300', '311', '100' ],
weathers: [
'雨 所により 夜遅く 雷を伴い 激しく 降る',
'雨 昼前 から くもり 後 晴れ 所により 明け方 まで 雷を伴い 激しく 降る',
'晴れ'
],
winds: [ '南の風 後 南西の風', '南西の風 後 北西の風', '北の風' ]
},
{
area: { name: '北部', code: '260020' },
weatherCodes: [ '300', '311', '100' ],
weathers: [
'雨 所により 夜遅く 雷を伴い 激しく 降る',
'雨 昼前 から くもり 後 晴れ 所により 明け方 まで 雷を伴い 激しく 降る',
'晴れ'
],
winds: [ '南の風 やや強く 海上 では 南の風 強く', '南西の風 後 北東の風 海上 では 南西の風 やや強く', '北の風' ],
waves: [ '1.5メートル 後 2メートル', '2メートル 後 1.5メートル', '1 .5メートル' ]
}
]
----南部----
雨 所により 夜遅く 雷を伴い 激しく 降る
雨 昼前 から くもり 後 晴れ 所により 明け方 まで 雷を伴い 激しく 降る
晴れ
----北部----
雨 所により 夜遅く 雷を伴い 激しく 降る
雨 昼前 から くもり 後 晴れ 所により 明け方 まで 雷を伴い 激しく 降る
晴
</code></pre>
<p>これをサンプルにして Javascript を学習する。</p>
<h2 id="browserify"><a href="#browserify">browserify</a></h2>
<p>node.js で動いたプログラムを browserify によってブラウザで動作するようにする。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://browserify.org/">https://browserify.org/</a></p>
<blockquote>
<p>Browsers don't have the require method defined, but Node.js does. With Browserify you can write code that uses require in the same way that you would use it in Node.</p>
</blockquote>
<p>インストール<br />
terminal:</p>
<pre><code>> npm install -g browserify
</code></pre>
<p><a target="_blank" rel="nofollow noopener" href="https://ipfs.infura.io/ipfs/QmW7gBLMnDdpEy4rp9NVp5jWnmsFwoxYyvSKA1y5fXtVzd"><code>tenki_2.js</code></a></p>
<p>他の言語である println のように使っているコンソール.ログがブラウザでどうなるのかわからないので、require しておいてみる。</p>
<pre><code class="javasript">const console = require("console");
const axios = require("axios");
const url = "https://www.jma.go.jp/bosai/forecast/data/forecast/";
const area = "260000"; // Kyoto
(getWeatherForecast = async () => {
try {
const response = await axios.get(`${url}${area}.json`);
// console.log(response.data);
// console.log(response.data[0].publishingOffice);
// console.log(response.data[0].timeSeries[0].areas);
for(const area of response.data[0].timeSeries[0].areas){
console.log(`----${area.area.name}----`);
for(const weather of area.weathers){
console.log(weather);
}
}
} catch (error) {
console.error(error);
}
})();
</code></pre>
<p><code>tenki_2.js</code> をブラウザ仕様の javascript ファイル <code>bundle.js</code> に変換する。</p>
<p>terminal:</p>
<pre><code class="bash">> browserify tenki_2.js -o bundle.js
</code></pre>
<p><a target="_blank" rel="nofollow noopener" href="https://ipfs.infura.io/ipfs/Qmd3cJNFTft8gbA444XgefmWXFGvY4QECVqYyicQ1dbs5C"><code>bundle.js</code></a><br />
<a target="_blank" rel="nofollow noopener" href="https://pastebin.com/szscGNsR">https://pastebin.com/szscGNsR</a></p>
<p>html ファイルを作って、 bundle.js を読み込むようにする。<br />
例えば tenki という名前でフォルダを作って、index.html, bundle.js を tenki フォルダに配置する。</p>
<p><a target="_blank" rel="nofollow noopener" href="https://ipfs.infura.io/ipfs/QmW5oGdEBSJJpazfds7LSqyMttxNYj8BVBphtfJYpP7wWv"><code>index.html</code></a></p>
<pre><code class="html"><!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>tenki_area browserify example</title>
<script src="bundle.js"></script>
</head>
<body>
</body>
</html>
</code></pre>
<p>chrome ブラウザーで tenki フォルダの中の html ファイルを開く。</p>
<p>chrome browser:</p>
<p><code>CTRL</code> + <code>shift</code> + <code>i</code></p>
<p>DevTools</p>
<p><code>index.html</code>:</p>
<p><a href="https://crieit.now.sh/upload_images/d6edfe05648ad36e61e2c39bcce18cb06267ee2adf460.JPG" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/d6edfe05648ad36e61e2c39bcce18cb06267ee2adf460.JPG?mw=700" alt="'chromebrowser developper tools'" /></a></p>
tomato