Pythonを使用してTelegramで最初のボットを構築する方法を学ぶ

これを想像してみてください。好きなときにランダムなかわいい犬の画像を送信するメッセージボットがあります。かっこいいですね。作ってみよう!

このチュートリアルでは、Python 3、python- telegram -bot、およびパブリックAPIRandomDogを使用します

このチュートリアルの最後に、ストレス解消ボットがあり、必要なときにかわいい犬の画像を送信します。

入門

プログラムの作成を開始する前に、ボットのトークンを生成する必要があります。Telegram APIにアクセスし、必要な依存関係をインストールするには、トークンが必要です。

1.BotFatherで新しいボットを作成します

Telegramでボットを作成する場合は、使用する前にまずボットを「登録」する必要があります。ボットを「登録」すると、TelegramAPIにアクセスするためのトークンを取得します。

BotFatherに移動し(デスクトップで開く場合は、Telegramアプリがあることを確認してください)、/newbotコマンドを送信して新しいボットを作成します。ボットのユーザー名とトークンを取得するまで、手順に従います。このURLにアクセスしてボットにアクセスでき//telegram.me/YOUR_BOT_USERNAME ます。トークンは次のようになります。

704418931:AAEtcZ*************

2.ライブラリをインストールします

このチュートリアルではライブラリを使用するため、このコマンドを使用してライブラリをインストールします。

pip3 install python-telegram-bot

ライブラリが正常にインストールされたら、準備は完了です。

プログラムを書く

最初のボットを作りましょう。このボットは、/bopコマンドを送信すると犬の画像を返すはずです。これを可能にするために、RandomDogのパブリックAPIを使用できますランダムな犬の画像を生成するのに役立ちます。

ボットのワークフローは次のように単純です。

APIにアクセス->画像のURLを取得->画像を送信

1.ライブラリをインポートします

まず、必要なすべてのライブラリをインポートします。

from telegram.ext import Updater, CommandHandler import requests import re

2. APIにアクセスし、画像のURLを取得します

URLを取得する関数を作成してみましょう。リクエストライブラリを使用して、APIにアクセスし、jsonデータを取得できます。

contents = requests.get('//random.dog/woof.json').json()

//random.dog/woof.jsonブラウザでそのURL:にアクセスすると、jsonデータを確認できます。画面に次のようなものが表示されます。

{“url":"//random.dog/*****.JPG"}

画像を送信できるようにするにはそのパラメータが必要なので、画像のURLを取得します。

image_url = contents['url']

このコードをget_url()。という関数にラップします。

def get_url(): contents = requests.get('//random.dog/woof.json').json() url = contents['url'] return url

3.画像を送信します

メッセージ/画像を送信するには、画像のURLと受信者のIDの2つのパラメータが必要です。これはグループIDまたはユーザーIDです。

get_url()関数を呼び出すことで画像のURLを取得できます。

url = get_url()

次のコードを使用して受信者のIDを取得します。

chat_id = update.message.chat_id

画像のURLと受信者のIDを取得したら、画像であるメッセージを送信します。

bot.send_photo(chat_id=chat_id, photo=url)

そのコードをと呼ばれる関数でラップしbop、コードが次のようになっていることを確認します。

def bop(bot, update): url = get_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url)

4.4。 Main program

最後に、mainプログラムを実行するために呼び出される別の関数を作成します。このチュートリアルの前半で生成したトークンで変更することYOUR_TOKEN忘れないでください。

def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('bop',bop)) updater.start_polling() updater.idle() if __name__ == '__main__': main()

最後に、コードは次のようになります。

from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get('//random.dog/woof.json').json() url = contents['url'] return url def bop(bot, update): url = get_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url) def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('bop',bop)) updater.start_polling() updater.idle() if __name__ == '__main__': main()

5.プログラムを実行します

驚くばかり!あなたは最初のプログラムを終了しました。それが機能するかどうかを確認しましょう。ファイルを保存して名前を付けmain.py、このコマンドを使用して実行します。

python3 main.py

次のURLにアクセスして、電報ボットにアクセスします//telegram.me/YOUR_BOT_USERNAME/bopコマンドを送信します。すべてが完全に実行されると、ボットはランダムな犬の画像で応答します。かわいいですよね?

エラーの処理

すごい!これで、いつでもかわいい犬の画像を送信するボットができました。

もっとある!RandomDogAPIは、画像だけでなく、ビデオやGIFも生成します。APIにアクセスしてビデオまたはGIFを取得した場合、エラーが発生し、ボットはそれを送信しません。

ボットが画像が添付されたメッセージのみを送信するように、これを修正しましょう。ビデオまたはGIFを取得した場合、画像を取得するまでAPIを再度呼び出します。

1.正規表現を使用してファイル拡張子を一致させます

この問題を解決するために正規表現を使用します。

画像をビデオやGIFと区別するために、ファイル拡張子を確認できます。URLの最後の部分だけが必要です。

//random.dog/*****.JPG

まず、プログラムで許可されるファイル拡張子を定義する必要があります。

allowed_extension = ['jpg','jpeg','png']

次に、正規表現を使用して、URLからファイル拡張子を抽出します。

file_extension = re.search("([^.]*)$",url).group(1).lower()

そのコードを使用して、必要なget_image_url()ファイル拡張子(jpg、jpeg、png)が得られるまでURLを反復する関数を作成します。

def get_image_url(): allowed_extension = ['jpg','jpeg','png'] file_extension = '' while file_extension not in allowed_extension: url = get_url() file_extension = re.search("([^.]*)$",url).group(1).lower() return url

2.コードを変更します

Great! Now for the last part, replace the url = get_url() line in the bop() function with url = get_image_url() , and your code should look like this:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler import requests import re def get_url(): contents = requests.get('//random.dog/woof.json').json() url = contents['url'] return url def get_image_url(): allowed_extension = ['jpg','jpeg','png'] file_extension = '' while file_extension not in allowed_extension: url = get_url() file_extension = re.search("([^.]*)$",url).group(1).lower() return url def bop(bot, update): url = get_image_url() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, photo=url) def main(): updater = Updater('YOUR_TOKEN') dp = updater.dispatcher dp.add_handler(CommandHandler('bop',bop)) updater.start_polling() updater.idle() if __name__ == '__main__': main()

Nice! Everything should run perfectly. You can also check out my GitHub account to get the code.

Finally, congratulations for finishing this tutorial, plus you have a cool Telegram bot now.

Please leave a comment if you think there are any errors in my code or writing, because I’m still learning and I want to get better.

Thank you and good luck practicing! :)