我已经使用了将近4年以上的电报,并在此期间制造了30多个机器人。我在PHP中制作了第一个,其余的则是在Python和JavaScript中构建的。所以今天我想为什么不在PHP中制作一个简单的电报机器人。这就是为什么我们要在PHP中制作电影的机器人。让我们从不浪费时间开始。
收集要求
在我们开始制作机器人之前,我们需要两件事。不需要太多时间,只有几分钟。我们需要的东西是:
-
电报机器人令牌
-
tmdb api键
tmdb是我们从中获取电影信息的网站。它是免费的,您只需要注册并填写一些API键的表格即可。因此,让我们开始收集它们。
获取电报机器人令牌
从电报中获取令牌实际上很简单。但是首先您需要一个电报帐户。我认为你有一个。搜索一个名为botfather的机器人或使用此link。它的名称应具有验证的表情符号。
单击机器人,然后按启动,或者如果看不到该选项,请键入/start
。我应该给您打招呼。您可以阅读,如果您愿意,它列出了有关机器人可以做什么的所有详细信息。接下来是键入/newbot
,然后按发送。它会要求机器人的名称。之后,它将要求提供bot用户名,它必须是唯一的,应该像我的机器人一样结束。
现在,您将收到具有HTTP API令牌的消息。这是我们要寻找的令牌,将其保存在某个地方,因为我们以后需要它。
从TMDB获取API键
前往TMDB并立即查找注册或加入。然后创建一个帐户。然后找到设置,在左侧,您将看到一个名为API的选项,按下或使用此link。您需要填写有关使用API的表格,请自己填充。之后,您将获得一个API密钥(V3 Auth),将其保存在我们需要的地方。
现在我们有了想要的东西,让我们从编程方面开始。
设置Webhook
设置电报机器人可以通信的网络钩是创建过程中的下一步。为了避免每隔几分钟(或秒)查询API,以查看是否已收到新消息,API使用Webhooks通知您发生了某些事情。
Telegram仅使用一种形式的Webhook,该Webhook每次都会发生update
对象。 Webhook配置真的很简单。
您只需要意识到两件事:您的API令牌(您应该从第一步中拥有它),以及托管机器人的URL。
它的URL与https://yourdomain.com/yourbot.php
相似。
为了确保Telegram发送Webhook,请在URL的开头插入https
。
现在在标准的Web浏览器中转到https://api.telegram.org/<TELEGRAM_BOT_TOKEN>/setwebhook?url=https://yourdomain.com/yourbot.php
。请用您的电报机器人令牌替换<TELEGRAM_BOT_TOKEN>
。
编码部分
为此,我假设您知道基本的php语法,格式化等。然后,让我们开始,我们知道php脚本以<?php
开头,以?>
结尾,我们在中间写代码。
我们正在收到Webhook,因此让我们从帖子正文中获取输入:
$content = file_get_contents('php://input');
$update = json_decode ($content, true);
接收到的数据在JSON中,将其解码为基于PHP的数组,我们必须使用json_decode
函数。现在,让我们声明一些变量,这些变量将存储一些更新的数据,例如用户名,聊天ID等。
$chat_id = $update['message']['chat']['id'];
$message = $update['message']['text'];
$username = $update['message']['from']['username'];
我们必须发送许多消息,因此让我们直接将其定义为一个函数,以使重复使用更容易。
function send_message ($chat_id, $message) {
$apiToken = <TELEGRAM_BOT_TOKEN>;
$text = urlencode($message);
file_get_contents("https://api.telegram.org/bot$apiToken/sendMessage?chat_id=$chat_id&text=$text");
}
用您制作的电报机器人令牌替换<TELEGRAM_BOT_TOKEN>
。让我们用/start
消息测试机器人,为此,我们必须编写更多代码,只是以下if语句。
if ($message == '/start')
{
send_message ($chat_id, "Hey @$username \nsend me any query to search for the movie.");
}
它似乎在起作用。现在,让我们添加电影信息获取部分来完成它。我想使机器人搜索我们发送的所有发送的所有文本,除了/start
。因此,我们只是将其他添加到现有的If语句中。我希望您知道如何解析JSON。
else {
$req = file_get_contents("https://api.themoviedb.org/3/search/movie?api_key=<TMDB_API_KEY>&language=en-US&page=1&query=$message" );
$movie = json_decode ( $req, true )['results'];
if ($movie) {
$movie = $movie[0];
$title = $movie['title'];
$overview = $movie['overview'];
$popularity = $movie['popularity'];
$release_date = $movie['release_date'];
$vote_count = $movie['vote_count'];
send_message($chat_id, "
Title: $title
Description: $overview
Popularity : $popularity
Release Date : $release_date
Votes: $vote_count");
}
else {
send_message($chat_id, "Couldn't find any movie with that name!");
}
用我们收集的TMDB API键替换<TMDB_API_KEY>
。现在让我们通过发送电影名称来尝试机器人。
总结
我们学会了使用Webhooks创建一个小机器人。我将在Vercel上免费添加有关主机机器人的文章。机器人的整个代码可在下面可用。
<?php
$content = file_get_contents ('php://input');
$update = json_decode ($content, true);
$chat_id = $update['message']['chat']['id'];
$message = $update['message']['text'];
$username = $update['message']['from']['username'];
if ($message == '/start') {
send_message ($chat_id, "Hey @$username \nsend me any query to search for the movie.");
} else {
$req = file_get_contents("https://api.themoviedb.org/3/search/movie?api_key=<TMDB_API_KEY>&language=en-US&page=1&query=$message" );
$movie = json_decode ( $req, true )['results'];
if ($movie) {
$movie = $movie[0];
$title = $movie['title'];
$overview = $movie['overview'];
$popularity = $movie['popularity'];
$release_date = $movie['release_date'];
$vote_count = $movie['vote_count'];
send_message($chat_id, "
Title: $title
Description: $overview
Popularity : $popularity
Release Date : $release_date
Votes: $vote_count");
}
else {
send_message($chat_id, "Couldn't find any movie with that name!");
}
}
function send_message ($chat_id, $message) {
$apiToken = <TELEGRAM_BOT_TOKEN>;
$text = urlencode($message);
file_get_contents("https://api.telegram.org/bot$apiToken/sendMessage?chat_id=$chat_id&text=$text");
}
?>
感谢您的阅读。