\r\n\r\n
Telegramユーザーであれば、どこかでチャットボットと「会話」したことがあるはずです。 Telegramのボットは驚くほどカスタマイズが可能で、タスクの自動化やゲームなど、さまざまな利点を備えています。チャットルーム
ボットの開発は大変だと思われる方もいらっしゃるかもしれませんが、そんなことはありません。適切なプランであれば、1時間以内にTelegramボットを稼働させることが可能ですインターネット上の猫に促され、かわいい写真を出力する簡単なTelegramボットの作り方を紹介します。
このチュートリアルでは、python3、Pythonのtelegraph botとrequest library、catapiを使用する予定です。
Telegramの各ボットは、アプリケーションのメッセージングインターフェースを使用するために、ボットAPIと通信するのに役立つユニークなトークンを持っています。
トークンを取得するには、@BotFatherと会話を始めます。BotFatherはその名の通り、自分自身のボットを作成・カスタマイズできる公式ボットです。所定のリンクからアクセスするか、テレグラムで「@botfather」と検索してください。
チャットルームで、/newbotコマンドを入力し、ボットを作成します。ボットの名前とユーザー名を設定します。この後、あなたのボットに固有のトークンが付与されます。
さて、前提条件が整ったところで、いよいよ本題です。
Windowsをお使いの場合、コマンドプロンプトを開き、以下のコマンドを入力します。
pip install python-telegram-botpip install requestsmacOSまたはLinuxをお使いの場合は、ターミナルで次のコマンドを使用します。また、Linuxの場合、sudo権限を持つユーザーでログインしていることを確認してください。
pip3 install python-telegram-botpip3 install requestsコンピュータに新しいフォルダを作成し、お気に入りのエディタで開いてください。新しいファイルを作成し、main.pyと名付けます。このファイルには、botのソースコードが含まれます。
では、先にインストールしたライブラリとその組み込み関数のいくつかをインポートしてみましょう。
from telegram.ext import Updater, CommandHandlerimport requestsimport reここからのプログラムの流れは、catapiにアクセスしてランダムな画像のURLを取得し、その画像をユーザーのチャットルームに送信するというものです。
まず、画像のURLを取得する関数から始めましょう。これは、requestsモジュールを使って行うことができます。この関数では、catapiが提供するランダムなファイルのJSONデータをロードし、後で使用するためにそのURLを抽出します。JSONオブジェクトの形式を確認するには、https://api.thecatapi.com/v1/images/search在浏览器上。こんなことに気がつくはずです。
[{"breeds":[],"id":"a8c","url":"url.jpg","width":800,"height":533}]なお、JSONオブジェクトは、辞書を含む配列である。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を取得し、ボットのメッセージ送信先を定義し、ボット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)botapiの様々な組み込み関数とその動作については、このチュートリアルの後にTelegramの公式ドキュメントを確認してください。
最後に、ボットの作業全般を制御する関数を作成しましょう。この関数(通常はmain()と呼ばれます)では、チュートリアルの最初に取得したトークンを使ってBot APIにHTTPリクエストを送信し、Botのユーザーインタラクションを定義しています。私たちのような単純なケースでは、ボットを起動し、ユーザーからプロンプトが表示されたら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()最終的にはこのようなコースになります。
from telegram.ext import Updater, CommandHandlerimport requestsimport redef 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 urldef sendImage(bot, update): url = getUrl() chat_id = update.message.chat_id bot.send_photo(chat_id=chat_id, image=url)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()おめでとうございます。あなたは、最もかわいいウェブキャットのオープンソースの写真を合図に送る、ストレス軽減のためのボットを自分で作りました。プログラムを実行し、ボットチャットで「/meow」と入力して起動してみてください。
これは限られた機能を持つ単純なボットかもしれませんが、Telegramのボット開発エコシステムがいかに強力であるかを示しています。複雑なサブルーチンや機能を追加して、ボットの機能性を高めることも可能です。長年にわたってコントリビューター**によって作成された素晴らしいTelegramボットについて詳しく知るには、便利なTelegramボットのリストをご覧ください。
また、電脳ボットのオープンソースライセンスプログラムは、GitHubなどのプラットフォームでさまざまなものを見つけることができます。ほとんどのオープンソースライセンスは、プログラムのソースコードを使用、研究、ダウンロード、または変更することを許可しています。
これでボットの起動が完了しました。ボット用のTelegraph Messengerアプリケーションを使って、コンピュータ上のmain.pyでボットを終了させてみてください。ニャーコマンドにはまだ反応しますか?いいえ、そんなことはありません。
初心者の方は、インターネット上で動作するボットを作成した際に、なぜPC上でmaster.pyを起動する必要があるのか分からないかもしれません。その理由は、プログラムがお客様のPCをローカルサーバーとして使用し、プログラムで使用するAPIにHTTPリクエストを送信しているからです。
そのため、使用するたびにアプリケーションを起動しなければならないのは、現実的ではなく、また便利でもありません。この問題を解決するためには、ボットのデバイスへの依存を取り除く必要があります
Raspberry-Piなどの安価なプリント基板(PCB)を使ってWebサーバーを自作し、それを使ってプログラムを実行するのも一つの方法です。プリント基板は消費電力が非常に少ないため、一日中電源を入れ続けるような経費をかけずに、パソコンでプログラムを実行するのと同じメリットがあります。
また、アプリケーションをクラウドに展開することも可能です。Heroku、AWS、Google Cloud、Microsoft AzureなどのWebアプリケーションホスティングプラットフォームにアクセスし、ニーズに最も適したサブスクリプションを選択します。プログラムの規模や範囲を拡大する際には、****バージョンまたはサブスクリプションを選択し、アップグレードすることをお勧めします。