mirror of
https://github.com/mii443/rbot.git
synced 2025-08-22 15:45:30 +00:00
Added "weather" command
This commit is contained in:
@ -2,9 +2,100 @@ module Bot
|
|||||||
module DiscordCommands
|
module DiscordCommands
|
||||||
module WeatherCommands
|
module WeatherCommands
|
||||||
extend Discordrb::Commands::CommandContainer
|
extend Discordrb::Commands::CommandContainer
|
||||||
|
JPN_WEATHER_FORECAST = 'http://www.drk7.jp/weather/json/'
|
||||||
|
|
||||||
command(:weather) do |event|
|
command(:weather, usage: 'weather <都道府県名> <地名>', description: '天気情報を表示', min_args: 1) do |event, pref_name, area_name|
|
||||||
nil
|
list = JSON.load(open('weather.json'))
|
||||||
|
|
||||||
|
# リストから検索してIDを抽出
|
||||||
|
pref = list.find {|pref| pref["name"] == pref_name}
|
||||||
|
id = pref["id"]
|
||||||
|
|
||||||
|
# jsonpを取得
|
||||||
|
uri = URI.parse(JPN_WEATHER_FORECAST + "#{id}.js")
|
||||||
|
jsonp = Net::HTTP.get(uri)
|
||||||
|
# JSONP -> JSONに変換
|
||||||
|
json = JSON.load(jsonp.match(/\.callback\((.*)\)/)[1])
|
||||||
|
|
||||||
|
weather = nil
|
||||||
|
|
||||||
|
unless area_name.nil?
|
||||||
|
# エリアが指定されている時
|
||||||
|
unless json["pref"]["area"]["#{area_name}"].nil?
|
||||||
|
weather = json["pref"]["area"]["#{area_name}"]["info"][0]
|
||||||
|
else
|
||||||
|
event.respond 'エリアが見つかりません'
|
||||||
|
end
|
||||||
|
else
|
||||||
|
# エリアが指定されていない時
|
||||||
|
# weather.json(area)の最初の項目を指定 or なし
|
||||||
|
unless pref["area"][0].nil?
|
||||||
|
area_name = pref["area"][0]
|
||||||
|
weather = json["pref"]["area"]["#{area_name}"]["info"][0]
|
||||||
|
else
|
||||||
|
weather = json["pref"]["area"]["info"][0]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# 値の抽出
|
||||||
|
pref = json["pref"]["id"]
|
||||||
|
telop = weather["weather"]
|
||||||
|
maxtemp = weather["temperature"]["range"][0]["content"]
|
||||||
|
mintemp = weather["temperature"]["range"][1]["content"]
|
||||||
|
img = weather["img"]
|
||||||
|
fallchance = Array.new
|
||||||
|
|
||||||
|
# 降水確率を配列に追加
|
||||||
|
weather["rainfallchance"]["period"].each do |chance|
|
||||||
|
fallchance << chance["content"]
|
||||||
|
end
|
||||||
|
|
||||||
|
event.channel.send_embed do |embed|
|
||||||
|
embed.title = "#{pref}の天気情報"
|
||||||
|
embed.description = telop
|
||||||
|
|
||||||
|
# 埋め込みカラー
|
||||||
|
embed.color = case telop
|
||||||
|
when /雪/
|
||||||
|
CONFIG[:weather][:snow]
|
||||||
|
when /雨/
|
||||||
|
CONFIG[:weather][:rain]
|
||||||
|
when /晴れ/
|
||||||
|
CONFIG[:weather][:sunny]
|
||||||
|
when /くもり/
|
||||||
|
CONFIG[:weather][:cloudy]
|
||||||
|
else
|
||||||
|
CONFIG[:weather][:cloudy]
|
||||||
|
end
|
||||||
|
|
||||||
|
embed.thumbnail = Discordrb::Webhooks::EmbedThumbnail.new(
|
||||||
|
url: img
|
||||||
|
)
|
||||||
|
|
||||||
|
embed.add_field(
|
||||||
|
name: '最高気温',
|
||||||
|
value: maxtemp + '℃',
|
||||||
|
inline: true
|
||||||
|
)
|
||||||
|
|
||||||
|
embed.add_field(
|
||||||
|
name: '最低気温',
|
||||||
|
value: mintemp + '℃',
|
||||||
|
inline: true
|
||||||
|
)
|
||||||
|
|
||||||
|
embed.add_field(
|
||||||
|
name: '午前の降水確率',
|
||||||
|
value: "0時~6時: #{fallchance[0]}%\n6時~12時: #{fallchance[1]}%",
|
||||||
|
inline: true
|
||||||
|
)
|
||||||
|
|
||||||
|
embed.add_field(
|
||||||
|
name: '午後の降水確率',
|
||||||
|
value: "12時~18時: #{fallchance[2]}%\n18時~24時: #{fallchance[3]}%",
|
||||||
|
inline: true
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
422
weather.json
Normal file
422
weather.json
Normal file
@ -0,0 +1,422 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "北海道",
|
||||||
|
"id": "01",
|
||||||
|
"area": [
|
||||||
|
"石狩地方",
|
||||||
|
"上川地方",
|
||||||
|
"北見地方",
|
||||||
|
"十勝地方",
|
||||||
|
"宗谷地方",
|
||||||
|
"後志地方",
|
||||||
|
"日高地方",
|
||||||
|
"根室地方",
|
||||||
|
"檜山地方",
|
||||||
|
"渡島地方",
|
||||||
|
"留萌地方",
|
||||||
|
"空知地方",
|
||||||
|
"紋別地方",
|
||||||
|
"網走地方",
|
||||||
|
"胆振地方",
|
||||||
|
"釧路地方"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "青森",
|
||||||
|
"id": "02",
|
||||||
|
"area": [
|
||||||
|
"津軽",
|
||||||
|
"三八上北",
|
||||||
|
"下北"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "岩手",
|
||||||
|
"id": "03",
|
||||||
|
"area": [
|
||||||
|
"内陸",
|
||||||
|
"沿岸北部",
|
||||||
|
"沿岸南部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "宮城",
|
||||||
|
"id": "04",
|
||||||
|
"area": [
|
||||||
|
"東部",
|
||||||
|
"西部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "秋田",
|
||||||
|
"id": "05",
|
||||||
|
"area": [
|
||||||
|
"内陸",
|
||||||
|
"沿岸"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "山形",
|
||||||
|
"id": "06",
|
||||||
|
"area": [
|
||||||
|
"村山",
|
||||||
|
"庄内",
|
||||||
|
"最上",
|
||||||
|
"置賜"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "福島",
|
||||||
|
"id": "07",
|
||||||
|
"area": [
|
||||||
|
"中通り",
|
||||||
|
"会津",
|
||||||
|
"浜通り"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "東京",
|
||||||
|
"id": "13",
|
||||||
|
"area": [
|
||||||
|
"東京地方",
|
||||||
|
"伊豆諸島北部",
|
||||||
|
"伊豆諸島南部",
|
||||||
|
"小笠原諸島"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "神奈川",
|
||||||
|
"id": "14",
|
||||||
|
"area": [
|
||||||
|
"東部",
|
||||||
|
"西部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "埼玉",
|
||||||
|
"id": "11",
|
||||||
|
"area": [
|
||||||
|
"南部",
|
||||||
|
"北部",
|
||||||
|
"秩父地方"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "千葉",
|
||||||
|
"id": "12",
|
||||||
|
"area": [
|
||||||
|
"北西部",
|
||||||
|
"北東部",
|
||||||
|
"南部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "茨城",
|
||||||
|
"id": "08",
|
||||||
|
"area": [
|
||||||
|
"北部",
|
||||||
|
"南部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "栃木",
|
||||||
|
"id": "09",
|
||||||
|
"area": [
|
||||||
|
"南部",
|
||||||
|
"北部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "群馬",
|
||||||
|
"id": "10",
|
||||||
|
"area": [
|
||||||
|
"南部",
|
||||||
|
"北部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "山梨",
|
||||||
|
"id": "19",
|
||||||
|
"area": [
|
||||||
|
"中・西部",
|
||||||
|
"東部・富士五湖"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "新潟",
|
||||||
|
"id": "15",
|
||||||
|
"area": [
|
||||||
|
"下越",
|
||||||
|
"上越",
|
||||||
|
"中越",
|
||||||
|
"佐渡"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "長野",
|
||||||
|
"id": "20",
|
||||||
|
"area": [
|
||||||
|
"北部",
|
||||||
|
"中部",
|
||||||
|
"南部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "富山",
|
||||||
|
"id": "16",
|
||||||
|
"area": [
|
||||||
|
"東部",
|
||||||
|
"西部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "石川",
|
||||||
|
"id": "17",
|
||||||
|
"area": [
|
||||||
|
"加賀",
|
||||||
|
"能登"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "福井",
|
||||||
|
"id": "18",
|
||||||
|
"area": [
|
||||||
|
"嶺北",
|
||||||
|
"嶺南"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "愛知",
|
||||||
|
"id": "23",
|
||||||
|
"area": [
|
||||||
|
"西部",
|
||||||
|
"東部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "岐阜",
|
||||||
|
"id": "21",
|
||||||
|
"area": [
|
||||||
|
"美濃地方",
|
||||||
|
"飛騨地方"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "静岡",
|
||||||
|
"id": "22",
|
||||||
|
"area": [
|
||||||
|
"中部",
|
||||||
|
"伊豆",
|
||||||
|
"東部",
|
||||||
|
"西部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "三重",
|
||||||
|
"id": "24",
|
||||||
|
"area": [
|
||||||
|
"北中部",
|
||||||
|
"南部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "大阪",
|
||||||
|
"id": "27",
|
||||||
|
"area": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "兵庫",
|
||||||
|
"id": "28",
|
||||||
|
"area": [
|
||||||
|
"南部",
|
||||||
|
"北部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "京都",
|
||||||
|
"id": "26",
|
||||||
|
"area": [
|
||||||
|
"南部",
|
||||||
|
"北部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "滋賀",
|
||||||
|
"id": "25",
|
||||||
|
"area": [
|
||||||
|
"南部",
|
||||||
|
"北部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "奈良",
|
||||||
|
"id": "29",
|
||||||
|
"area": [
|
||||||
|
"北部",
|
||||||
|
"南部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "和歌山",
|
||||||
|
"id": "30",
|
||||||
|
"area": [
|
||||||
|
"北部",
|
||||||
|
"南部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "鳥取",
|
||||||
|
"id": "31",
|
||||||
|
"area": [
|
||||||
|
"東部",
|
||||||
|
"中・西部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "島根",
|
||||||
|
"id": "32",
|
||||||
|
"area": [
|
||||||
|
"東部",
|
||||||
|
"西部",
|
||||||
|
"隠岐"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "岡山",
|
||||||
|
"id": "33",
|
||||||
|
"area": [
|
||||||
|
"南部",
|
||||||
|
"北部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "広島",
|
||||||
|
"id": "34",
|
||||||
|
"area": [
|
||||||
|
"南部",
|
||||||
|
"北部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "山口",
|
||||||
|
"id": "35",
|
||||||
|
"area": [
|
||||||
|
"中部",
|
||||||
|
"北部",
|
||||||
|
"東部",
|
||||||
|
"西部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "徳島",
|
||||||
|
"id": "36",
|
||||||
|
"area": [
|
||||||
|
"北部",
|
||||||
|
"南部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "香川",
|
||||||
|
"id": "37",
|
||||||
|
"area": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "愛媛",
|
||||||
|
"id": "38",
|
||||||
|
"area": [
|
||||||
|
"中予",
|
||||||
|
"南予",
|
||||||
|
"東予"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "高知",
|
||||||
|
"id": "39",
|
||||||
|
"area": [
|
||||||
|
"中部",
|
||||||
|
"東部",
|
||||||
|
"西部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "福岡",
|
||||||
|
"id": "40",
|
||||||
|
"area": [
|
||||||
|
"福岡地方",
|
||||||
|
"北九州地方",
|
||||||
|
"筑後地方",
|
||||||
|
"筑豊地方"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "佐賀",
|
||||||
|
"id": "41",
|
||||||
|
"area": [
|
||||||
|
"北部",
|
||||||
|
"南部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "長崎",
|
||||||
|
"id": "42",
|
||||||
|
"area": [
|
||||||
|
"南部",
|
||||||
|
"五島",
|
||||||
|
"北部",
|
||||||
|
"壱岐・対馬"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "熊本",
|
||||||
|
"id": "43",
|
||||||
|
"area": [
|
||||||
|
"熊本地方",
|
||||||
|
"天草・芦北地方",
|
||||||
|
"球磨地方",
|
||||||
|
"阿蘇地方"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "大分",
|
||||||
|
"id": "44",
|
||||||
|
"area": [
|
||||||
|
"中部",
|
||||||
|
"北部",
|
||||||
|
"南部",
|
||||||
|
"西部"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "宮崎",
|
||||||
|
"id": "45",
|
||||||
|
"area": [
|
||||||
|
"南部平野部",
|
||||||
|
"北部山沿い",
|
||||||
|
"北部平野部",
|
||||||
|
"南部山沿い"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "鹿児島",
|
||||||
|
"id": "46",
|
||||||
|
"area": [
|
||||||
|
"薩摩地方",
|
||||||
|
"大隅地方",
|
||||||
|
"奄美地方",
|
||||||
|
"種子島地方・屋久島地方"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "沖縄",
|
||||||
|
"id": "47",
|
||||||
|
"area": [
|
||||||
|
"本島中南部",
|
||||||
|
"本島北部",
|
||||||
|
"与那国島地方",
|
||||||
|
"久米島",
|
||||||
|
"大東島地方",
|
||||||
|
"宮古島地方",
|
||||||
|
"石垣島地方"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
Reference in New Issue
Block a user