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 WeatherCommands
|
||||
extend Discordrb::Commands::CommandContainer
|
||||
JPN_WEATHER_FORECAST = 'http://www.drk7.jp/weather/json/'
|
||||
|
||||
command(:weather) do |event|
|
||||
nil
|
||||
command(:weather, usage: 'weather <都道府県名> <地名>', description: '天気情報を表示', min_args: 1) do |event, pref_name, area_name|
|
||||
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
|
||||
|
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