ostiwe/vksaver

此包已弃用,不再维护。未建议替代包。

2.2.3 2020-05-01 08:48 UTC

This package is auto-updated.

Last update: 2021-04-29 01:41:50 UTC


README

Packagist Version GitHub release (latest by date)

描述

本包适用于拥有或编辑VKontakte社交网络社区的用户。通过本包,您可以轻松添加内容到您的社区,无需额外操作。

目前支持添加图片到待办事项列表。

如何使用?

如果您在VKontakte内部寻找内容

如果您喜欢新闻推送或群组的某张图片,只需将带有这张图片的帖子发送给您的机器人,或者直接发送这张图片。

如果帖子里有多张图片,您可以点赞您喜欢的图片,并希望添加到待办事项列表。或者,您可以发送包含图片的帖子给机器人,它会添加帖子里所有的图片。

如果您在互联网上寻找内容

如果您喜欢网上的图片,可以使用扩展(稍后介绍)将其发送到社区。

只需右键点击图片,然后在上下文菜单中选择您想发送图片的社区。

需要什么来运行?

要运行,需要额外安装VKontakte的官方库。

同样,您需要在浏览器中安装扩展,链接将在后面提供。

使用方法

首先,获取具有以下权限的用户令牌

  • 访问照片
  • 访问墙
  • 随时访问
  • 访问群组

现在,使用以下命令安装包

composer require ostiwe/vksaver

接下来,使用以下代码创建UserClient对象

$ostiwe = new \Ostiwe\Client\UserClient('User id', 'User access Token',[]');

第一个参数是用户的ID,该用户是社区的管理员/编辑。

第二个参数是具有所需权限的用户API令牌,如上所述。

最后一个参数是关联数组,其中描述了社区的设置。此数组可能看起来像这样

[
    162768498 => [ // В качестве ключа используется ID сообщества
        'post_interval' => 2, // Интервал между постами (в часах)
        'liked_only' => true, // Если в посте несколько картинок, брать те, что с лайком
        'confirmation_code' => '91sj188x', // Код подтверждения сервера
        'secret' => 'super_puper1secret0code', // Секретный ключ Callback сервера
        'access_token' => '31xz6bb054765b2c4d52472c5dc615ea7b2ds88e9', // API токен сообщества (подробнее ниже)
        'name' => 'Pubj' // Короткое имя для класса-обработчика
    ],
    //...
];

要运行,需要具有以下权限的社区API密钥

  • 社区消息
  • 照片

请确保您的社区启用了消息(即可以给社区发帖)。

接下来,调用$ostiwe对象的callbackHandler方法,并将Callback API发送给我们的解码JSON对象作为参数

$data = json_decode(file_get_contents('php://input'), true);
$ostiwe->callbackHandler($data);

为社区添加处理程序

创建一个目录,用于存放社区处理类。例如,命名为 Classes。

接下来,在调用 callbackHandler() 方法之前,调用 setHandlersPatch() 方法。在参数中传入文件夹路径,例如

$ostiwe->setHandlersPatch(__DIR__ . '/Classes');

在该文件夹中创建一个新的类,其名称应与您在描述社区参数数组时指定的名称相同。例如 'name' => 'Pubj' // 类处理器的简称

在该名称之后添加 Handler。应该是这样的: NameHandler.php

现在创建一个继承自 PubHandler 类的类

class NameHandler extends \Ostiwe\Handlers\PubHandler {}

或者

use Ostiwe\Handlers\PubHandler;
class NameHandler extends PubHandler {}

现在还需要指定将接收和处理所有事件的服务器地址。这可以在社区设置中完成。

浏览器扩展

除了这个包之外,还有一个扩展,其链接将在本节末尾提供。

要使用扩展,需要将以下元素添加到组数组中

 'plugin' => [
        'secret' => 'super_puper1secret0code',
    ]

super_puper1secret0code 替换为您自己想出的或生成的由随机数字和字母组成的密钥(英文)。

接下来查看扩展的仓库。

示例

对于 index.php

$requestData = json_decode(file_get_contents('php://input'), true);
$groups = [
    153626005 => [
        'post_interval' => 2, // hours
        'liked_only' => true,
        'confirmation_code' => 'confirmation code for server',
        'secret' => 'superSecret918s_ds',
        'access_token' => 'group access token',
        'name' => 'AnyName'
    ],
    'plugin' => [
        'secret' => 'superSecret918s_ds',
    ],
];
$ostiwe = new \Ostiwe\Client\UserClient('you vk id', 'you profile token', $groups);

$ostiwe->setHandlersPatch(__DIR__ . '/Classes');

try {
    $ostiwe->callbackHandler($requestData);
} catch (Exception $e) {
    // do something...
}

对于 /path/to/Classes/AnyNameHandler.php

use Ostiwe\Handlers\PubHandler;

class AnyNameHandler extends PubHandler
{
    public function __construct($userToken, $userId, $pubToken, $pubId)
    {
        parent::__construct($userToken, $userId, $pubToken, $pubId);
    }

    /**
     * @param array $attachmentsList
     * @param array $pubParams
     * @param string $postText
     * @throws Exception
     */
    public function handle(array $attachmentsList, array $pubParams, string $postText = '')
    {
        parent::handle($attachmentsList, $pubParams, $postText); // TODO: Change the autogenerated stub
    }

    /**
     * @param array $pubParams
     * @param array $attachmentsList
     * @param string $postText
     * @return array
     * @throws Exception
     */
    public function post(array $pubParams, array $attachmentsList, $postText = '')
    {
        return parent::post($pubParams, $attachmentsList, $postText); // TODO: Change the autogenerated stub
    }

    /**
     * @param string $message
     * @param array $attachments
     * @throws Exception
     */
    public function sendNotificationMessage(string $message, array $attachments = [])
    {
        parent::sendNotificationMessage($message, $attachments); // TODO: Change the autogenerated stub
    }

}

默认情况下,只有成功添加帖子到延迟队列的消息会发送到您的私信

public function handle(array $attachmentsList, array $pubParams, string $postText = '')
    {
        try {
            $postInfo = $this->post($pubParams, $attachmentsList,$postText);
        } catch (Exception $e) {
            throw new Exception($e->getMessage(), null, $e);
        }
        $postDate = date('d.m.Y в H:i', $postInfo['date']);
        $textMessage = "Пост будет опубликован $postDate <br>";
        $textMessage .= "vk.com/wall-{$this->pubId}_{$postInfo['post_id']}";

        try {
            $this->sendNotificationMessage($textMessage);
        } catch (Exception $e) {
            throw new Exception($e->getMessage(), null, $e);
        }
    }

如果您想在添加帖子到延迟队列之前发送消息,可以这样做

// Пример из рабочего скрипта
 public function handle(array $attachmentsList, array $pubParams, string $postText = '')
    {
        parent::sendNotificationMessage("Начинаю закидывать выбранные вами картинки в отложку", $attachmentsList);
        parent::handle($attachmentsList, $pubParams, $postText); // TODO: Change the autogenerated stub
    }

如果您想执行其他操作,可以重写该方法

 public function handle(array $attachmentsList, array $pubParams, string $postText = '')
    {
        // Ваш код...
    }