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