闇堕ちのブログ

日本語のみ。

いらっしゃい、ゆっくりしていってね。

いろんなとこのBOTでtenki.jpさんとこをスクレイピングしている人たちへ(コマンドとして経由にtenki.jpを使っている人たちへ)(tenki.jpはスクレイピング禁止です)

(1479文字)

この記事は約7分59秒で読めます。


違法なスクレイピングを減らすためこの記事を書かせてもらいます。
この記事は「スクレイピングできる=やっていい」ではないことを伝えるための注意喚起です。安心して天気データを利用するには、WeatherAPIや気象庁オープンデータといった正規のサービスを活用してください。
※追記:Discordだけではないので勘違いしないでください。

未だに『tenki.jp スクレイピング』で出てくる違法スクレイピングたち。
利用規約:https://tenki.jp/docs/rule/
ここを見てスクレイピングのこと書いてねーじゃんって思っただろ?
そこからここ見てくれ。
ヘルプ:https://tenki.jp/docs/help/

※利用規約にもあります通り、tenki.jpのサービスはブラウザ・RSSリーダー以外のものを用いて取得し利用する行為は禁止となっております。スクレイピングなどによるデータ取得はご遠慮ください。

つまりBOTとかのコマンドに使うなってことだよ。
恐らくRSSリーダー系でもBOTコマンドはアウトだろうと推測できるが。
ここまで言っても気が付かないんだろうな。と。
確かにこれ関係で調べるとスクレイピングの記事がちらほらある。
これら通報するのも骨である。
なので天気さん(tenki.jp)に報告し、こちらもやっていた過去を鑑みて、もうやらないことなどを宣言してきます。
追記あればこの記事で書きます。では。

要約すると、以下の通りです。

・スクレイピング記事は見ても真似しない
・規約違反はリスクが大きい
・正しい方法(公式API)を選ぶこと

https://www.weatherapi.com
や気象庁のAPIなどがあるのでそちらを使いましょう。
書き方に関しては、以下のを参考に。

WEATHER_API_KEY = "ここにキーを書く"
@bot.tree.command(name="天気",description="天気を見るコマンドだ。")
async def tenkiyohou(ctx, region: str):
    """
    指定した地域の今日と明日の天気予報を取得して埋め込みで表示。
    """
    await ctx.response.defer(thinking=True)
    url = f"http://api.weatherapi.com/v1/forecast.json?key={WEATHER_API_KEY}&q={region}&lang=ja&days=2"
    try:
        response = requests.get(url)
        data = response.json()

        # データが取得できなかった場合のエラーハンドリング
        if "error" in data:
            await ctx.send(f"エラー: 地域 '{region}' の天気情報を取得できませんでした。")
            return

        # 今日と明日の天気情報を取得
        today = data['forecast']['forecastday'][0]
        tomorrow = data['forecast']['forecastday'][1]

        # 埋め込みメッセージの作成
        embed = discord.Embed(title=f"{region} の天気予報", color=0x1E90FF)
        embed.add_field(name="今日の天気", value=today['day']['condition']['text'], inline=False)
        embed.add_field(name="明日の天気", value=tomorrow['day']['condition']['text'], inline=False)

        embed.add_field(name="今日の気温", value=f"最高: {today['day']['maxtemp_c']}℃ 最低: {today['day']['mintemp_c']}℃", inline=False)
        embed.add_field(name="明日の気温", value=f"最高: {tomorrow['day']['maxtemp_c']}℃ 最低: {tomorrow['day']['mintemp_c']}℃", inline=False)

        embed.add_field(name="今日の最大風速", value=f"{today['day']['maxwind_kph']} km/h", inline=False)
        embed.add_field(name="明日の最大風速", value=f"{tomorrow['day']['maxwind_kph']} km/h", inline=False)

        embed.add_field(name="今日の降水量", value=f"{today['day']['totalprecip_mm']} mm", inline=False)
        embed.add_field(name="明日の降水量", value=f"{tomorrow['day']['totalprecip_mm']} mm", inline=False)

        embed.add_field(name="今日の湿度", value=f"{today['day']['avghumidity']}%", inline=False)
        embed.add_field(name="明日の湿度", value=f"{tomorrow['day']['avghumidity']}%", inline=False)

        # 埋め込みを送信
        await ctx.followup.send(embed=embed)

    except Exception as e:
        await ctx.followup.send(f"エラーが発生しました: {e}")

1:
RSSリーダー使ってBOTコマンドも禁止だと思われる。
それでもやる場合は開発やめたほうが良いです。
tenki.jpさんが迷惑かかります。

2:
若干文体修正。

3:
因みにすでに通報済みの記事は2つくらいある。
それ以外にも自己責任言ってたが、それ黒だから……。

4:
要約するとこれ。

この記事は「スクレイピングできる=やっていい」ではないことを伝えるための注意喚起です。安心して天気データを利用するには、WeatherAPIや気象庁オープンデータといった正規のサービスを活用してください。

未だに『tenki.jp スクレイピング』で出てくる違法スクレイピングたちだが、実はスクレイピングは禁止である。
え?ってなるかもだがちゃんと規約、ヘルプに書かれている。

利用規約:https://tenki.jp/docs/rule/
ヘルプ:https://tenki.jp/docs/help/

この2つを見てすぐに削除しよう。
tenki.jpさんからのお怒りを受ける前に。

じゃあ天気予報どうやって見るんだよ!?って人向けに。
気象庁のapi、Free Weather API – WeatherAPI.com、など。
調べればちゃんとしたAPIが存在する。

確かにtenki.jpさんとこはシンプルでわかりやすい。
しかしそれでもスクレイピングや違法に取得するのはやめておこう。

でも書き方わかんねーよ、ってのなら書くのをやめよう。
そういうものである。
違法に手を突っ込んでまで書くのもダメだろう。

じゃー、結局tenki.jpさんに怒られるような事はするなってことだけど。
すでにいくつか通報済みである。

『tenki.jp スクレイピング』で出た2つ+Yahoo知恵袋で出てきた1つを通報済み。
自己責任ではなく、黒なのでやめましょう。