Python 3で基本的なTelegramボットを構築する方法

Telegramユーザーであれば、チャットボットと「会話」したことがあるはずです。Telegramのボットは驚くほどカスタマイズ性が高く、タスクの自動化やチャットグループでのゲームなど、さまざまな利点があります。

ボットの開発は大変な作業だと感じるかもしれませんが、実際はそうではありません。適切に計画すれば、1時間もかからずにTelegramボットを起動して実行できます。インターネット上の猫のかわいい写真を表示するシンプルなTelegramボットを作成する方法をご紹介します。

はじめに

このチュートリアルでは、Python 3、python-telegram-botとrequestsライブラリ、TheCatAPIを使用します。

Telegramのすべてのボットには、アプリのメッセージングインターフェイスを使用するためにBot APIと通信するのに役立つ一意のトークンがあります。開発者の間で最も人気のあるTelegramの機能の1つであるBot APIを使用すると、メッセージをインターフェイスとして使用できます。

トークンを取得するには、@BotFatherとの会話を開始します。これは名前が示すように、独自のボットを作成してカスタマイズできる公式ボットです。与えられたリンクを使用してボットにアクセスするか、またはTelegramで「@botfather」を検索します。

チャットに入ったら、/newbotコマンドを入力してボットを作成します。ボットの名前とユーザー名を設定し続けます(私たちは@pawsomebotという名前を付けることにしました)。その後、ボットに固有のトークンが発行されます。

これで必要なものがすべて揃ったので、いよいよエキサイティングな部分に取り掛かりましょう。

ライブラリのインストール

Windowsを使用している場合は、コマンドプロンプトを開いて次のコマンドを入力します。

pip install python-telegram-bot
pip install requests

macOSまたはLinuxを使用している場合は、代わりにターミナルで次のコマンドを使用します。さらに、Linuxではsudo権限を持つユーザーとしてログインしていることを確認してください。

pip3 install python-telegram-bot
pip3 install requests

プログラムの記述

コンピュータに新しいフォルダーを作成し、お気に入りのエディターで開きます。新しいファイルを作成し、main.pyという名前を付けます。このファイルには、ボットのソースコードが含まれます。

次に、前にインストールしたライブラリと、それらの組み込み関数のいくつかをインポートしましょう。

from telegram.ext import Updater, CommandHandlerimport requestsimport re

ここからのプログラムの流れは、TheCatAPIにアクセスし、ランダムな画像のURLを取得し、その画像をユーザーのチャットに送信することです。

requestsモジュールを使用して画像URLを取得する関数から始めましょう。この関数では、TheCatAPIによって提供されるランダムなファイルのJSONデータをロードし、後で使用するURLを抽出します。JSONオブジェクトの形式を確認するには、ブラウザでhttps://api.thecatapi.com/v1/images/searchにアクセスします。次のようなものが見つかります。

[{"breeds":[],"id":"a8c","url":"url.jpg","width":800,"height":533}]

JSONオブジェクトは辞書を保持する配列であることに注意してください。この辞書には、キー「url」を持つURLが含まれています。URLを抽出するには、配列の最初の要素を参照してから、関連するキーを参照する必要があります。

def getUrl(): #obtain a json object with image details #extract image url from the json object contents = requests.get('https://api.thecatapi.com/v1/images/search') url = contents[0]['url'] return url

次に、この画像をユーザーのチャットに送信する必要があります。これには、画像のURLとユーザーのチャットの一意のIDが必要です。これを行うためのラッパー関数を作成しましょう。まず、getUrl()を呼び出します。関数は、ランダムな画像のURLを取得します。このURLは、プログラムが関数を反復するたびに変化します。

次に、受信者ユーザーのチャットIDを取得します。これは、メッセージのボットのターゲットの場所を定義し、Bot APIの組み込みsend_photo()関数を通じてURLを解析します。

def sendImage(bot, update): url = getUrl() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, image=url)

Bot APIのさまざまな組み込み関数とそれらの機能の詳細については、このチュートリアルの後にTelegramの公式ドキュメントを確認してください。

最後に、ボットの全体的な動作を制御する関数を作成しましょう。この関数は、従来main()と呼ばれます。ここで、チュートリアルの最初に取得したトークンを使用してBot APIにHTTPリクエストを送信し、ボットのユーザーインタラクションがどのようなものになるかを定義します。私たちのような単純なケースでは、これは基本的にボットを開始し、ユーザーがプロンプトを表示したときにsendImage()関数を呼び出すことを意味します。

def main(): updater = Updater("1190888035:AAGeJ9316R95NqJLFefV5vQA-UL4np11V2c") #call sendImage() when the user types a command in the telegram chat updater.dispatcher.add_handler(CommandHandler('meow',sendImage)) #start the bot updater.start_polling() updater.idle()if __name__ == '__main__': main()

最終的なプログラムは次のようになります。

独自のTelegramボット

おめでとうございます!プロンプトが表示されると、キュートなインターネット猫のオープンソース画像を送信する、ストレス解消のボットを構築しました。プログラムを実行して/meowと入力してみてください。ボットのチャットでアクティベートします。

これは機能が限られたシンプルなボットですが、Telegramのボット開発エコシステムがいかに強力であるかを示しています。ボットの機能を強化するために、さまざまな複雑なサブプログラムや機能を追加できます。限界はありません。寄稿者が長年にわたって作成した素晴らしいTelegramボットの詳細については、便利なTelegramボットのリストをご覧ください。

GitHubなどのプラットフォームで、Telegramボット用のさまざまなオープンソースライセンスプログラムを見つけることもできます。ほとんどのオープンソースライセンスでは、プログラムのソースコードを使用、調査、ダウンロード、または変更できます。

Telegramボットをオンラインでホストする

ボットを起動して実行したら、PCでmain.pyを閉じてTelegramメッセンジャーアプリでボットを使用してみてください。/meowコマンドにまだ応答しますか?いいえ、応答しません。

初心者の方は、インターネット上で実行されているボットをすでに作成しているのに、なぜPCでmain.pyを起動して実行する必要があるのか疑問に思うかもしれません。その理由は、プログラムがPCをローカルサーバーとして使用して、このプログラムで使用されるAPIにHTTPリクエストを送信するためです。

そのため、アプリを使用するたびにプログラムを実行する必要があるのは、実行可能でも便利でもありません。この問題を解決するには、ボットのデバイスへの依存を削除する必要があります。

その方法の1つは、Raspberry Piなどの安価なプリント基板(PCB)を使用して独自のWebサーバーをセットアップし、それを使用してプログラムを実行することです。これは、PCBはエネルギーフットプリントが大幅に低くなる傾向があるため、PCでプログラムを実行するのと同じ利点があり、昼夜を問わずに実行し続けるコストがかかりません。

あるいは、プログラムをクラウドにデプロイすることもできます。Heroku、AWS、Google Cloud、またはMicrosoft AzureなどのWebアプリホスティングプラットフォームにアクセスして、ニーズに最適なサブスクリプションを選択します。無料トライアルまたはサブスクリプションを選択して、プログラムの規模または範囲を拡大するにつれてアップグレードすることをお勧めします。