1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【第2回(全4回)】「超初心者のための LINE チャットボット講座」 無料APIで LINE Bot を賢くしよう!

Posted at

【第2回】無料APIで LINE Bot を賢くしよう!

〜 天気・Wikipedia などの情報を自動で返すボットを作る 〜

こんにちは!
この記事は 4回シリーズ「超初心者のための LINE チャットボット講座」第2回 です。

前回は、LINE Bot に「こんにちは」と送ると返事が返ってくる Hello Bot を作りました。

今回はさらに進んで、

📌 無料 API を使って、Bot が外の情報を答えられるようにします!

たとえば、

ユーザー:東京の天気は?
Bot:今日の東京は晴れ、最高気温は 23℃ です!
ユーザー:富士山とは?
Bot:富士山は日本の本州中央部にある火山で……(Wikipedia情報)

こんな感じの “ちょっと賢い Bot” を作ります。

もちろん今回もすべて 完全無料 です!


🎯 第2回のゴール

  • 無料 API の仕組みが理解できる
  • 外部情報(天気 / Wikipedia)を取得できる
  • LINE Bot に質問すると、その情報を返してくれる
  • 「自分だけの機能」を追加できるようになる

🧱 Step 1. 無料 API の仕組みを理解しよう

API はかんたんに言うと、

「外のサービスにデータを取りに行く窓口」

です。

例えば「天気API」は、
天気予報サイトのデータベースから情報を取ってきて
あなたのプログラムに返してくれます。

LINE Bot は API と組み合わせることで、
外の世界の情報を答えられる賢いボット になります。


🧱 Step 2. 今回使う無料API

今回は特に初心者が使いやすい API を2つ使います。

① OpenWeatherMap(天気API)

  • 完全無料プランあり
  • 世界中の天気が取得できる
  • 日本語対応も可能

② Wikipedia API

  • 登録不要
  • 完全無料
  • 簡単なキーワード検索で説明文が取れる

どちらも初心者向けで、実践で使える定番APIです。


🧱 Step 3. OpenWeatherMap の APIキーを取得しよう

① OpenWeatherMap を検索して公式サイトへ

(URLは直接記載しません、Qiita投稿規約のため検索してください)

② 無料アカウントを作成

③ メール認証を完了し、ログイン

④ API Keys にアクセスしてキーをコピー

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

これを後で Python のコードに貼り付けます。


🧱 Step 4. 天気情報を Python で取得してみよう

まず、Bot に組み込む前に、
Python で天気 API を叩く練習をしましょう。

weather_test.py

import requests

API_KEY = "YOUR_API_KEY"
city = "Tokyo"

url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}&lang=ja&units=metric"

response = requests.get(url)
data = response.json()

print(data)

実行して JSON データが返ってきたら成功!


🧱 Step 5. LINE Bot に天気情報を組み込む

ここからが本番です!

前回の app.py の中に以下の関数を追加します。

天気情報を取得する関数

import requests

def get_weather(city):
    API_KEY = "YOUR_API_KEY"
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}&lang=ja&units=metric"

    response = requests.get(url)
    data = response.json()

    if data.get("weather") is None:
        return "ごめんね、その地域の天気がわからなかったよ。"

    weather = data["weather"][0]["description"]
    temp = data["main"]["temp"]

    return f"{city} の天気は {weather}、気温は {temp}℃ だよ!"

🧱 Step 6. ユーザーの質問に応じて天気を返す

前回の handle_message を少し改造します。

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    user_msg = event.message.text

    # 「◯◯の天気」 と聞かれた場合
    if "天気" in user_msg:
        city = user_msg.replace("の天気", "").strip()
        reply = get_weather(city)

    else:
        reply = f"{user_msg}』って言ったね!"

    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=reply)
    )

これで、

東京の天気
大阪の天気
札幌の天気

全部答えてくれます!


🧱 Step 7. Wikipedia API で説明文を取得しよう

Wikipedia API は登録不要で使えるのが嬉しいポイント。

以下の関数を追加します。

def get_wiki_summary(keyword):
    url = f"https://ja.wikipedia.org/api/rest_v1/page/summary/{keyword}"

    response = requests.get(url)
    data = response.json()

    if "extract" in data:
        return data["extract"]
    else:
        return "ごめんね、その言葉の説明が見つからなかったよ。"

🧱 Step 8. Bot で Wikipedia を返す

handle_message に以下を追加します。

    # Wikipedia で説明する
    if user_msg.endswith("とは?") or user_msg.endswith("とは"):
        keyword = user_msg.replace("とは?", "").replace("とは", "").strip()
        reply = get_wiki_summary(keyword)

これで、

富士山とは?
AIとは?
Pythonとは?

全部説明してくれるようになります!


🎉 完成!今日の成果

これであなたの LINE Bot は

✔ 天気を教えてくれる
✔ Wikipedia の説明文も返す
✔ キーワードを認識して賢く返答

という 情報検索Bot に進化しました!

かなり実用的な Bot になっています。
おめでとうございます!🎉🎉🎉


📚 今日の宿題

以下の中から好きなものに挑戦してみてください。

① 天気予報の表示をもっと丁寧にする

例:最高気温 / 最低気温も出す
例:絵文字をつける(☀️ / ☔ など)

② Wikipedia の情報を 100 文字以内にまとめる

長すぎる時があるので工夫してみよう!

③ 天気 or Wikipedia 以外の無料 API を追加

おすすめ例:

  • 為替API(円⇄ドルを変換)
  • ニュースAPI
  • ランダムな名言API
    など
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?