简单电影使用PHP电报机器人
#初学者 #编程 #php #telegram

我已经使用了将近4年以上的电报,并在此期间制造了30多个机器人。我在PHP中制作了第一个,其余的则是在Python和JavaScript中构建的。所以今天我想为什么不在PHP中制作一个简单的电报机器人。这就是为什么我们要在PHP中制作电影的机器人。让我们从不浪费时间开始。

收集要求

在我们开始制作机器人之前,我们需要两件事。不需要太多时间,只有几分钟。我们需要的东西是:

  • 电报机器人令牌

  • tmdb api键

tmdb是我们从中获取电影信息的网站。它是免费的,您只需要注册并填写一些API键的表格即可。因此,让我们开始收集它们。

获取电报机器人令牌

从电报中获取令牌实际上很简单。但是首先您需要一个电报帐户。我认为你有一个。搜索一个名为botfather的机器人或使用此link。它的名称应具有验证的表情符号。

image.png

单击机器人,然后按启动,或者如果看不到该选项,请键入/start。我应该给您打招呼。您可以阅读,如果您愿意,它列出了有关机器人可以做什么的所有详细信息。接下来是键入/newbot,然后按发送。它会要求机器人的名称。之后,它将要求提供bot用户名,它必须是唯一的,应该像我的机器人一样结束。

4HOD9NPmBo.png

现在,您将收到具有HTTP API令牌的消息。这是我们要寻找的令牌,将其保存在某个地方,因为我们以后需要它。

从TMDB获取API键

前往TMDB并立即查找注册或加入。然后创建一个帐户。然后找到设置,在左侧,您将看到一个名为API的选项,按下或使用此link。您需要填写有关使用API​​的表格,请自己填充。之后,您将获得一个API密钥(V3 Auth),将其保存在我们需要的地方。
ELYBOncHjY.png

现在我们有了想要的东西,让我们从编程方面开始。

设置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>

image.png

编码部分

为此,我假设您知道基本的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.");
}

image.png

它似乎在起作用。现在,让我们添加电影信息获取部分来完成它。我想使机器人搜索我们发送的所有发送的所有文本,除了/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>。现在让我们通过发送电影名称来尝试机器人。

image.png
完美工作,您可以为其添加更多功能,但是现在我在这里停止它。

总结

我们学会了使用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");
}
?>

感谢您的阅读。