[解決済み] discord.py v1.4.1を使ったお天気コマンドの作り方
質問
を作りたい場合
weather
コマンドを使用し、あなたのボットにクールな追加をすることができます。
weather
コマンドを作成します。
解決方法は?
このようなコマンドを作成する予定です。
まず始めに オープンウィアーマップ APIは、APIキーが必要です。 ウェブサイト .
APIキーが取得できれば、それでOKです。
第二段階として、コーディングを開始します。
requests
. 単純にインポートすればいいのです。
import requests
インポートした後、次のようなものを定義しておくと使いやすくなります。
api_key = "your_api_key"
base_url = "http://api.openweathermap.org/data/2.5/weather?"
次のステップでは、このコマンドに
city
を引数として与えます。
@client.command()
async def weather(ctx, *, city: str):
その後、Webサイトのレスポンス取得に
requests
を使って、レスポンスを読み取ります。
json
. また、WEはコマンドが使用されるチャンネルを定義します。
city_name = city
complete_url = base_url + "appid=" + api_key + "&q=" + city_name
response = requests.get(complete_url)
x = response.json()
channel = ctx.message.channel
ここで
city_name
が有効な都市であることを示すために、単純な
if
ステートメントを使用します。また
async with channel.typing()
これは、ボットがウェブサイトからコンテンツを取得するまでの間、タイピングしていることを示すものです。
if x["cod"] != "404":
async with channel.typing():
今度は天気に関する情報を取得します。
y = x["main"]
current_temperature = y["temp"]
current_temperature_celsiuis = str(round(current_temperature - 273.15))
current_pressure = y["pressure"]
current_humidity = y["humidity"]
z = x["weather"]
weather_description = z[0]["description"]
さて、情報を入手したら、その情報を
discord.Embed
というように
weather_description = z[0]["description"]
embed = discord.Embed(title=f"Weather in {city_name}",
color=ctx.guild.me.top_role.color,
timestamp=ctx.message.created_at,)
embed.add_field(name="Descripition", value=f"**{weather_description}**", inline=False)
embed.add_field(name="Temperature(C)", value=f"**{current_temperature_celsiuis}°C**", inline=False)
embed.add_field(name="Humidity(%)", value=f"**{current_humidity}%**", inline=False)
embed.add_field(name="Atmospheric Pressure(hPa)", value=f"**{current_pressure}hPa**", inline=False)
embed.set_thumbnail(url="https://i.ibb.co/CMrsxdX/weather.png")
embed.set_footer(text=f"Requested by {ctx.author.name}")
embedを構築した後、送信します。
await channel.send(embed=embed)
else:
await channel.send("City not found.")
また
else
文は、API が言及された都市の天気をフェッチできない場合、都市が見つからないことを送信します。
で、これで無事に
weather
コマンドを実行します。
もし、エラーに遭遇したり、疑問があれば、必ず以下にコメントしてください。できる限りお手伝いさせていただきます。
ありがとうございます。
関連
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
[解決済み】NameError: 名前 'self' が定義されていません。
-
[解決済み】Pythonのvirtualenvを離脱/終了/無効化する方法
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
PythonはWordの読み書きの変更操作を実装している
-
Pythonによるjieba分割ライブラリ
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
任意波形を生成してtxtで保存するためのPython実装
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】NameError: 名前 'self' が定義されていません。