ostiwe/ vksaver
Requires
- php: >=7.1
- ext-json: *
- vkcom/vk-php-sdk: ^5.101
Requires (Dev)
README
描述
本包适用于拥有或编辑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 = '') { // Ваш код... }