[mSocial]mSocialVK - постинг в Вконтакте.
Представляю Вашему вниманию результат своего двухнедельного марафона в разработке MODX расширений, а именно постинг из замечательной и горячо любимом CMF MODX REVO во всемирно известную социальную сеть Вконтакте.
Приобрести mSocialVK.
Докуменация mSocialVK.
Возможности
ps: на очереди facebook*.
Приобрести mSocialVK.
Докуменация mSocialVK.
Возможности
- Постинг в аккаунт или группу.
- Постинг вложенных изображений, с размещением их в альбом аккаунта.
- Постинг от имени группы.
- Весь функционал mSocial будет доступен и здесь.
- Устанавливаем mSocial.
- Устанавливаем mSocialVK.
- Создаем приложение и получаем бессрочный токен.
- Добавляем нужные ключи в Системные опции MODX REVO.
- Настраиваем шаблон в чанке для постинга и активируем TV в тех шаблонов которые должны участвовать в постинге.
- Отлично, теперь ресурсы автоматически размещаются в Вк при сохранении.
ps: на очереди facebook*.
*Meta, которой принадлежат facebook и instagram признана экстремистской в России
Комментарии: 69
Цена символичная, отличная работа, всё как и обещал!
P.S:
А то: он — мой Модикс.
P.S:
из замечательной и горячо любимой MODX REVOХотел сказать CMS?
А то: он — мой Модикс.
Ну да CMF))). Исправился. Все что обещал надеюсь впереди))
Насколько я понял mSocial бесплатен, то почему бы не сделать проверку на установленность зависимости и не ставить ее автоматом?
Безусловно отличное решение для тех кто работает с соц медиа
Безусловно отличное решение для тех кто работает с соц медиа
Отличный вопрос, Лев Вербицкий задал такой же. Нужно будет разобраться как это сделать и доработать.
Спасибо огроменное.
Кстати, а как указывается поставщик, если требуется дополнение не с оф. Репозитория?
Покопайся в ресолвере, там все просто.
Класс, все прекрасно работает.
Добрый день. Заинтересовал модуль.
1) Ссылка на документацию в этом посте битая
2) Будет ли работать данный модуль при добавлении тикетов пользователями сайта через TicketForm?
1) Ссылка на документацию в этом посте битая
2) Будет ли работать данный модуль при добавлении тикетов пользователями сайта через TicketForm?
1. Поправил.
2. В принципе да, вам просто нужно немного изменить событие плагина и все (в теории).
2. В принципе да, вам просто нужно немного изменить событие плагина и все (в теории).
Хотелось бы приобрести компонент, скажите возможно настроить так, чтобы одна новость репостилась сразу в несколько(2-4) группы в ВК(например выбирать в тв_шке в какую)? или только 1 новость — в одну группу?
В общем прикупил потестить да блин асес токен не могу получить чо за фигня, выдает
{"error":"invalid_client","error_description":"client_id is incorrect"}
Окей ассес токен получил протупил со {}, теперь вообще не пойму, не хочет постить)))
Блин само заработало…
Так оно само и работает)))
Неподскажешь как сделать интеграцию с тикетс, когда человек опубликовывает новый тикет шел постинг в вк?
По сути можно повесить просто в плагине обработчик.
Здравствуйте можете подсказать почему не хочет передавать картинки код чанка
[[+pagetitle]]
<img src="files/cw89cha6mp4.jpg"/>
Ингредиенты:
[[+Ingredusers]]
Способ приготовления:
[[+content]]
У кого нибудь оно работает?
У меня выбрасывает после обновления
У меня выбрасывает после обновления
Произошла ошибка при постинге в Vk 8 (Invalid request: v (version) is required)
так HybridAuth отвалился же на днях, неудивительно, что и этот модуль тоже упал. Очередное внезапное обновление API VK. В прошлом году я возился с динамическими обложками для групп ВК, так обновление API для работы с фотографиями групп менялось каждые две-три недели. Мы запарились этот модуль переделывать.
Так автор вроде совсем недавно обновил модуль, как раз после того, как HybridAuth отвалился
Вышло обновление попробуйте проапдейтится. Теперь у вк версионность обязательный параметр.
Если не поможет то в файл core/components/msocial/custom/network/vk/vk.class.php в 56 строку добавить
Если не поможет то в файл core/components/msocial/custom/network/vk/vk.class.php в 56 строку добавить
$param['v'] = '4.0';
Я утерял исходники пакета, и пока нет времени его переписать. $param['v'] = '4.0';
работает, но картинки перестали добавлятся
А как сделать чтобы постинг в вк был с активной ссылкой с поста.
Ссылка снизу идет под текстом.
И фото не добавляются.
Пробовала по-разному.
Ссылка снизу идет под текстом.
И фото не добавляются.
Пробовала по-разному.
[[+pagetitle]]
[[+content]]
[[getImageList?
&tvname=`foto`
&docid=`[[+id]]`
&tpl=`@CODE:<img src="[[++site_url]][[+image]]" alt="[[+pagetitle]]">`
&limit=`1`
]]
<img src="[[++site_url]][[+image]]" alt="[[+pagetitle]]">
[[++site_url]][[+uri]]
Привет! Очень интересуют все Ваши модули. Задача реализовать постинг новостей сайта (новостной сайт регионального масштаба) сразу во все группы. Скажите, можно будет использовать модули (вк, фейсбук, твиттер) одновременно? и будет ли реализована такая же фича в одноклассниках?
Очень прошу автора допились постинг картинок в ВК. Деньги же заплатили а рабочий компонент не получили.
Приобрел пакет недавно, сперва не постилось вообще, затем прописал $param['v'] = '4.0'; в vk.class.php и после этого посты начали добавляться, но без картинок.
Приобрел пакет недавно, сперва не постилось вообще, затем прописал $param['v'] = '4.0'; в vk.class.php и после этого посты начали добавляться, но без картинок.
Исправленный модуль с постингом картинок vk.class.php:
Необходимо в несколько мест добавить версию v=5.0 и album_id={id Альбома}
<?php
/**
* Класс vk для постинга в соответствующую соцсеть.
* @copyright Copyright © 2016 devPastet (Pavel Karelin) devpastet@yandex.ru
*/
class vk extends socials
{
/**
* @var array
*/
public $vkKeys;
public function __construct(modX & $modx, $setting)
{
$this->modx = $modx;
$this->setting = $setting;
$this->vkKeys['owner_id'] = trim($this->modx->getOption('msocial_vk_id'));
$this->vkKeys['access_token'] = trim($this->modx->getOption('msocial_vk_at'));
$this->vkKeys['from_group'] = trim($this->modx->getOption('msocial_im_fg'));
$this->vkKeys['message'] = $this->setting['message'];
$this->vkKeys['v'] = '5.0';
}
/**
* Метод для постинга
*/
public function posting()
{
$param = $this->vkKeys;
if(isset($this->setting['attach']) AND $this->modx->getOption('msocial_im_ps') == 1)
{
$count = 1;
foreach($this->setting['attach'] as $file)
{
if($count <= 4)
{
if (version_compare(phpversion(), '5.5.0', '<')) {
$attrImg['file'.$count] = '@'.MODX_BASE_PATH.$file;
}else{
$attrImg['file'.$count] = new CURLFile(MODX_BASE_PATH.$file);
}
}
$count++;
}
$imgList = $this->uploadImg($attrImg);
if($imgList){
foreach($this->uploadImg($attrImg) as $img){
$attachments .= 'photo'.$img->owner_id.'_'.$img->id.',';
}
$param['attachments'] = substr($attachments, 0, -1);
}
}
$return = $this->request('https://api.vk.com/method/wall.post',$param);
/* Вызываем обработчик ошибок */
if(isset($return->error)){
$errorMsg = $return->error->error_code.' ('.$return->error->error_msg.')';
$this->modx->log(modX::LOG_LEVEL_ERROR, $this->modx->lexicon('msocial_error_posting').' Vk '.$errorMsg);
}
}
/**
* Загрузка изображений
* $file array массив файлов
*/
public function uploadImg($file)
{
$group_id = $this->vkKeys['owner_id'];
$version = $this->vkKeys['v'];
$album_id = '{id Альбома}';
$access_token = $this->vkKeys['access_token'];
if($group_id[0] == '-'){
$group_id = substr($group_id, 1);
}
$server = $this->request('https://api.vk.com/method/photos.getWallUploadServer', array(
'group_id' => $group_id,
'access_token' => $this->vkKeys['access_token'],
'v' => $version,
'album_id' => $album_id
));
$vkPhoto = $this->request($server->response->upload_url, $file);
$result = $this->request('https://api.vk.com/method/photos.saveWallPhoto', array(
'group_id' => $group_id,
'photo' => $vkPhoto->photo,
'server' => $vkPhoto->server,
'hash' => $vkPhoto->hash,
'access_token' => $this->vkKeys['access_token'],
'v' => $version
));
return $result->response;
}
}
?>
Необходимо в несколько мест добавить версию v=5.0 и album_id={id Альбома}
<?php
/**
* Класс vk для постинга в соответствующую соцсеть.
* @copyright Copyright © 2016 devPastet (Pavel Karelin) devpastet@yandex.ru
*/
class vk extends socials
{
/**
* @var array
*/
public $vkKeys;
public function __construct(modX & $modx, $setting)
{
$this->modx = $modx;
$this->setting = $setting;
$this->vkKeys['owner_id'] = trim($this->modx->getOption('msocial_vk_id'));
$this->vkKeys['access_token'] = trim($this->modx->getOption('msocial_vk_at'));
$this->vkKeys['from_group'] = trim($this->modx->getOption('msocial_im_fg'));
$this->vkKeys['message'] = $this->setting['message'];
$this->vkKeys['v'] = '5.0';
}
/**
* Метод для постинга
*/
public function posting()
{
$param = $this->vkKeys;
if(isset($this->setting['attach']) AND $this->modx->getOption('msocial_im_ps') == 1)
{
$count = 1;
foreach($this->setting['attach'] as $file)
{
if($count <= 4)
{
if (version_compare(phpversion(), '5.5.0', '<')) {
$attrImg['file'.$count] = '@'.MODX_BASE_PATH.$file;
}else{
$attrImg['file'.$count] = new CURLFile(MODX_BASE_PATH.$file);
}
}
$count++;
}
$imgList = $this->uploadImg($attrImg);
if($imgList){
foreach($this->uploadImg($attrImg) as $img){
$attachments .= 'photo'.$img->owner_id.'_'.$img->id.',';
}
$param['attachments'] = substr($attachments, 0, -1);
}
}
$return = $this->request('https://api.vk.com/method/wall.post',$param);
/* Вызываем обработчик ошибок */
if(isset($return->error)){
$errorMsg = $return->error->error_code.' ('.$return->error->error_msg.')';
$this->modx->log(modX::LOG_LEVEL_ERROR, $this->modx->lexicon('msocial_error_posting').' Vk '.$errorMsg);
}
}
/**
* Загрузка изображений
* $file array массив файлов
*/
public function uploadImg($file)
{
$group_id = $this->vkKeys['owner_id'];
$version = $this->vkKeys['v'];
$album_id = '{id Альбома}';
$access_token = $this->vkKeys['access_token'];
if($group_id[0] == '-'){
$group_id = substr($group_id, 1);
}
$server = $this->request('https://api.vk.com/method/photos.getWallUploadServer', array(
'group_id' => $group_id,
'access_token' => $this->vkKeys['access_token'],
'v' => $version,
'album_id' => $album_id
));
$vkPhoto = $this->request($server->response->upload_url, $file);
$result = $this->request('https://api.vk.com/method/photos.saveWallPhoto', array(
'group_id' => $group_id,
'photo' => $vkPhoto->photo,
'server' => $vkPhoto->server,
'hash' => $vkPhoto->hash,
'access_token' => $this->vkKeys['access_token'],
'v' => $version
));
return $result->response;
}
}
?>
А в тег code не?
<?php
/**
* Класс vk для постинга в соответствующую соцсеть.
* @copyright Copyright © 2016 devPastet (Pavel Karelin) devpastet@yandex.ru
*/
class vk extends socials
{
/**
* @var array
*/
public $vkKeys;
public function __construct(modX & $modx, $setting)
{
$this->modx = $modx;
$this->setting = $setting;
$this->vkKeys['owner_id'] = trim($this->modx->getOption('msocial_vk_id'));
$this->vkKeys['access_token'] = trim($this->modx->getOption('msocial_vk_at'));
$this->vkKeys['from_group'] = trim($this->modx->getOption('msocial_im_fg'));
$this->vkKeys['message'] = $this->setting['message'];
$this->vkKeys['v'] = '5.0';
}
/**
* Метод для постинга
*/
public function posting()
{
$param = $this->vkKeys;
if(isset($this->setting['attach']) AND $this->modx->getOption('msocial_im_ps') == 1)
{
$count = 1;
foreach($this->setting['attach'] as $file)
{
if($count <= 4)
{
if (version_compare(phpversion(), '5.5.0', '<')) {
$attrImg['file'.$count] = '@'.MODX_BASE_PATH.$file;
}else{
$attrImg['file'.$count] = new CURLFile(MODX_BASE_PATH.$file);
}
}
$count++;
}
$imgList = $this->uploadImg($attrImg);
if($imgList){
foreach($this->uploadImg($attrImg) as $img){
$attachments .= 'photo'.$img->owner_id.'_'.$img->id.',';
}
$param['attachments'] = substr($attachments, 0, -1);
}
}
$return = $this->request('https://api.vk.com/method/wall.post',$param);
/* Вызываем обработчик ошибок */
if(isset($return->error)){
$errorMsg = $return->error->error_code.' ('.$return->error->error_msg.')';
$this->modx->log(modX::LOG_LEVEL_ERROR, $this->modx->lexicon('msocial_error_posting').' Vk '.$errorMsg);
}
}
/**
* Загрузка изображений
* $file array массив файлов
*/
public function uploadImg($file)
{
$group_id = $this->vkKeys['owner_id'];
$version = $this->vkKeys['v'];
$album_id = '{id Альбома}';
$access_token = $this->vkKeys['access_token'];
if($group_id[0] == '-'){
$group_id = substr($group_id, 1);
}
$server = $this->request('https://api.vk.com/method/photos.getWallUploadServer', array(
'group_id' => $group_id,
'access_token' => $this->vkKeys['access_token'],
'v' => $version,
'album_id' => $album_id
));
$vkPhoto = $this->request($server->response->upload_url, $file);
$result = $this->request('https://api.vk.com/method/photos.saveWallPhoto', array(
'group_id' => $group_id,
'photo' => $vkPhoto->photo,
'server' => $vkPhoto->server,
'hash' => $vkPhoto->hash,
'access_token' => $this->vkKeys['access_token'],
'v' => $version
));
return $result->response;
}
}
?>
Спасибо за комментарий, не разобрался сразу:
Можно тогда еще ссылку на публикацию в пост добавить,
Я сделал через ссылку в чанке:
Вконтакте пока из этой ссылки картинки не подгружают из og:image, но я в поддержку написал, мб поправят.
msocial.class.php
Можно тогда еще ссылку на публикацию в пост добавить,
Я сделал через ссылку в чанке:
<postlink href="[[~[[+id]]? &scheme=`full`]]"/>
Специально не брал стандартный Тег «a», так как ссылка должна быть одна — иначе ошибка.Вконтакте пока из этой ссылки картинки не подгружают из og:image, но я в поддержку написал, мб поправят.
msocial.class.php
<?php
/**
* Класс mSocial для инициализации и подключение классов постинга в соцсети. Текущий набор соцсетей: Tw.
* @copyright Copyright © 2016 devPastet (Pavel Karelin) devpastet@yandex.ru
*/
set_time_limit(0);
class mSocial
{
/**
* @var mixed
*/
public $setting;
/**
* @var mixed
*/
public $modx;
/**
* @var string
*/
public $soc;
/*@var object $modx обьект modx */
public function __construct(modX & $modx, $setting)
{
require_once MODX_CORE_PATH . 'components/msocial/model/msocial/socials.class.php';
$this->modx = $modx;
$this->setting = $setting;
foreach($setting['activeSoc'] as $soc)
{
$this->soc = $soc;
$this->checkSocialAndDock();
}
}
/**
* Определяем что есть класс соцсети и подключаем его
*/
public function checkSocialAndDock()
{
if (file_exists(MODX_CORE_PATH . 'components/msocial/custom/network/'.$this->soc.'/'.$this->soc.'.class.php')) {
$modx = $this->modx;
if($modx->loadClass($this->soc, MODX_CORE_PATH . 'components/msocial/custom/network/'.$this->soc.'/', true, true)){
$this->getAndParseChunk($this->soc);
$initSocial[$this->soc] = new $this->soc($modx, $this->setting);
if($this->setting['method'] == 'posting'){
$initSocial[$this->soc]->posting();
}
}
}
}
/**
* Парсим шаблоны соцсетей
*/
public function getAndParseChunk()
{
$chunkName = trim($this->modx->getOption('msocial_'.$this->soc.'_tp'));
$this->setting['message'] = $this->modx->getChunk($chunkName, $this->setting['allField']);
$this->modx->getParser()->processElementTags('', $this->setting['message'], true, true, '[[', ']]', array(), 10);
$this->setting['message'] = html_entity_decode($this->setting['message']);
$this->parseAttach();
$this->clearMess();
}
/**
* Чистим сообщение от html
*/
public function clearMess(){ //
$this->setting['message'] = strip_tags(trim($this->setting['message']));
}
/**
* Ищем и дергаем файлы для отправки
*/
public function parseAttach()
{
$this->setting['attach'] = array();
preg_match_all("/(<img )(.+?)( \/)?(>)/", $this->setting['message'],$images);
foreach ($images[2] as $val)
{
if (preg_match("/(src=)('|\")(.+?)('|\")/",$val,$matches) == 1)
{
if(file_exists(MODX_BASE_PATH.$matches[3]))
{
$this->setting['attach'][] = $matches[3];
}
}
}
if (preg_match("/(<postlink )(.+?)( \/)?(>)/", $this->setting['message'],$link_src) == 1)
{
if (preg_match("/(href=)('|\")(.+?)('|\")/",$link_src[2],$link) == 1)
{
$this->setting['link']=$link[3];
}
}
}
}
?>
И vk.class.php<?php
/**
* Класс vk для постинга в соответствующую соцсеть.
* @copyright Copyright © 2016 devPastet (Pavel Karelin) devpastet@yandex.ru
*/
class vk extends socials
{
/**
* @var array
*/
public $vkKeys;
public function __construct(modX & $modx, $setting)
{
$this->modx = $modx;
$this->setting = $setting;
$this->vkKeys['owner_id'] = trim($this->modx->getOption('msocial_vk_id'));
$this->vkKeys['access_token'] = trim($this->modx->getOption('msocial_vk_at'));
$this->vkKeys['from_group'] = trim($this->modx->getOption('msocial_im_fg'));
$this->vkKeys['message'] = $this->setting['message'];
$this->vkKeys['v'] = '5.0';
}
/**
* Метод для постинга
*/
public function posting()
{
$param = $this->vkKeys;
if(isset($this->setting['attach']) AND $this->modx->getOption('msocial_im_ps') == 1)
{
$count = 1;
foreach($this->setting['attach'] as $file)
{
if($count <= 4)
{
if (version_compare(phpversion(), '5.5.0', '<')) {
$attrImg['file'.$count] = '@'.MODX_BASE_PATH.$file;
}else{
$attrImg['file'.$count] = new CURLFile(MODX_BASE_PATH.$file);
}
}
$count++;
}
$imgList = $this->uploadImg($attrImg);
if($imgList){
foreach($this->uploadImg($attrImg) as $img){
$attachments .= 'photo'.$img->owner_id.'_'.$img->id.',';
}
}
}
if(isset($this->setting['link']))
{
if(isset($this->setting['attach']) AND $this->modx->getOption('msocial_im_ps') == 1)
{
$param['attachments'] = $attachments.$this->setting['link'];
}
else
{
$param['attachments'] = $this->setting['link'];
}
} else
{
if(isset($this->setting['attach']) AND $this->modx->getOption('msocial_im_ps') == 1)
{
$param['attachments'] = substr($attachments, 0, -1);
}
}
$return = $this->request('https://api.vk.com/method/wall.post',$param);
/* Вызываем обработчик ошибок */
if(isset($return->error)){
$errorMsg = $return->error->error_code.' ('.$return->error->error_msg.')';
$this->modx->log(modX::LOG_LEVEL_ERROR, $this->modx->lexicon('msocial_error_posting').' Vk '.$errorMsg);
}
}
/**
* Загрузка изображений
* $file array массив файлов
*/
public function uploadImg($file)
{
$group_id = $this->vkKeys['owner_id'];
$version = $this->vkKeys['v'];
$album_id = '{ID альбома}';
$access_token = $this->vkKeys['access_token'];
if($group_id[0] == '-'){
$group_id = substr($group_id, 1);
}
$server = $this->request('https://api.vk.com/method/photos.getWallUploadServer', array(
'group_id' => $group_id,
'access_token' => $this->vkKeys['access_token'],
'v' => $version,
'album_id' => $album_id
));
$vkPhoto = $this->request($server->response->upload_url, $file);
$result = $this->request('https://api.vk.com/method/photos.saveWallPhoto', array(
'group_id' => $group_id,
'photo' => $vkPhoto->photo,
'server' => $vkPhoto->server,
'hash' => $vkPhoto->hash,
'access_token' => $this->vkKeys['access_token'],
'v' => $version
));
return $result->response;
}
}
?>
Так как сейчас для соц. сетей важно — во сколько вы публикуете пост (и чтобы не ждать этого времени — есть идея реализовать автоматический постинг по расписанию.
Для этого создал отдельный TV, в который записывается время последнего поста данного ресурса.
Для автоматического постинга проверяется не превышено ли максимальное количество постов в сутки. И берется самый старый ресурс из дочерних опубликованных.
Осталось разобраться — как запустить его из cron — мб кто-то подскажет?
При запуске вручную — код работает:
Для этого создал отдельный TV, в который записывается время последнего поста данного ресурса.
Для автоматического постинга проверяется не превышено ли максимальное количество постов в сутки. И берется самый старый ресурс из дочерних опубликованных.
Осталось разобраться — как запустить его из cron — мб кто-то подскажет?
При запуске вручную — код работает:
<?php
/*Автоматический постинг в вконтакте. Общие параметры*/
$MaxPostsPerDay = 10;
$TopParentRes=2;
$ChildLevel=2;
$SortByFild= 'createdon';
/**/
$tv_vkPostDate_type = $modx->getObject('modTemplateVar',array('name' => 'vkPostDate' ));
$tv_vkPostDate_id = $tv_vkPostDate_type->get('id');
$time_now = time();
$time_yesterday = $time_now - 24*60*60;
$output='';
$PostedId = Array();
$Sort_by = Array();
$tvs_where = array(
'tmplvarid' => $tv_vkPostDate_id,
'value:>' => $time_yesterday
);
$tvs_day = $modx->getCollection('modTemplateVarResource', $tvs_where);
if (count($tvs_day) < $MaxPostsPerDay)
{
$tvs_posted = $modx->getCollection('modTemplateVarResource', array('tmplvarid' => $tv_vkPostDate_id));
foreach ($tvs_posted as $tv) {
$PostedId[] = $tv->contentid;
}
$allChildren = $modx->getChildIds($TopParentRes,$ChildLevel,array('context' => 'web'));
if(count($allChildren))
{
$where = array(
'hidemenu' => false,
'published' => true,
'deleted' => false,
'id:IN' => $allChildren,
'id:NOT IN' => $PostedId
);
$resources = $modx->getCollection('modResource',$where);
foreach ($resources as $k => $res) {
$Sort_by[$k] = $res->get($SortByFild);
}
$min_value=min($Sort_by);
$id = array_search($min_value, $Sort_by);
$resource = $modx->getObject('modResource',$id);
if ($modx->loadClass('mSocial', MODX_CORE_PATH . 'components/msocial/model/msocial/', true, true))
{
//Получаем лексиконы
$modx->lexicon->load('msocial:default');
/* Список полей для постинга */
$setting['allField'] = $resource->toArray();
$setting['activeSoc'][] = 'vk';
// Определяем метод действий
$setting['method'] = 'posting';
$mSocial = new mSocial($modx, $setting);
}else{
$modx->log(modX::LOG_LEVEL_ERROR, "Не удалось подключить класс mSocial в ".MODX_CORE_PATH."/components/msocial/model/");
return false;
}
}
}
?>
вынести данный код в файл, и его запускать через cron вашего хостинга, можете себе даже сэкономить время и обратится в тех поддержку, настроят правильный пути, а вы только выставите расписание
+
Я попробовал так и сделать — запустить файл из консоли — но ему не хватает объектов мод х
Fatal error: Call to a member function get() on a non-object
Fatal error: Call to a member function get() on a non-object
После того как отвалился фейсбук, я принял решение координально переписать модули. Теперь модуль будет основан на нескольких сервисах постинга. И будет включать больше соцсетей. Потому то на данный момент слишком много гемороя делать это напрямую.
Через SDK соцсетей слишком геморно?
Постить через sdk в фейсбук не получится теперь, например. Что бы постить в однокласники нужно апрува миллиарда апликух пройти, а в инсту вообще постить нельзя через api. В общем нужна куча мороки что бы все работало и постоянная поддержка решений, что в принципе и реадизуют сервисы. Решение у меня следующее, подключить общую либу с возможностью в будущем подключать дополнительные сервисы. И в пакет добавить несколько самых популярных. Это и удобно и будет работать со всеми соцсетями которые поддерживают сервисы.
У сервисом есть неприятная особенность — они рядом с постом добавляют ссылку на себя — и это гипер стремно: реакция у многих на такие посты — негативная;(
Такие сервисы мы в расчет брать не будем)
ну постинг в Instagram как то просто получилось сделать, а вот в ФБ это какие то семь кругов ада
На сколько я помню там вообще не было такого метода. И сейчас нормально постинг в инсту можно реализовать через виртуальное приложение.
Но вот с другими соцсетями вообще весело. Хотя странно, почему бы не упростить это
Я как раз хотел добить вк и купить модуль fb — нет смысла покупать? не работает?
Пока его купить нельзя, я еще думаю о том как организовать архитектуру дополнения, где будут все соцсети. В будущем текущие модули mSocial будут заменены на более практичное решение.
А не планируется функционал ротации постов в группе вк? Почти все посты пошли по второму (а то и третьему кругу) надоело руками их перепащивать копировать.
В разработке новое дополнение, я добавил в заметки реализацию такого функционала.
Это очень круто! Я обязательно куплю это дополнение!))
Еще бы всасывать имеющиеся посты в CMS и потом крутить их по кругу с заданным интервалом, например, что б не чаще чем раз в год повторение случалось. А некоторым постам выставить дату ежегодного постинга, или там каждый год, последнее воскресенье июля. Уиииии!!! Такой фрегатик будет!))))
Еще бы всасывать имеющиеся посты в CMS и потом крутить их по кругу с заданным интервалом, например, что б не чаще чем раз в год повторение случалось. А некоторым постам выставить дату ежегодного постинга, или там каждый год, последнее воскресенье июля. Уиииии!!! Такой фрегатик будет!))))
Добрый день, всем!
Купил компонент, настроил, все учел, что выше описано, версию добавил, 5.92, id альбома прописал.
Пост формируется, но нет картинок.
Что делать?
Купил компонент, настроил, все учел, что выше описано, версию добавил, 5.92, id альбома прописал.
Пост формируется, но нет картинок.
Что делать?
Почитать комментарии, там дан ответ и готовое решение. Сделал все как написано выше, у меня все завелось, картинки добавляются в конец поста в vk.
Обожаю такие умные ответы! Ждал именно Вашего!
Я прочитал, все сделал, прописал и album_id и version. Толку нет. Не работает.
Точнее работает, пост появляется, НО картинок нет.
Может быть я как-то не так картинку подставляю. Но пробовал и как написано в инструкции и полный путь указывать, не хочет работать.
Пришлите код Ваш, хотя бы чтобы было понятно большее, чем «почитать комментарии».
Как написано тут — делал:
modx.pro/solutions/7882#comment-100380
Я прочитал, все сделал, прописал и album_id и version. Толку нет. Не работает.
Точнее работает, пост появляется, НО картинок нет.
Может быть я как-то не так картинку подставляю. Но пробовал и как написано в инструкции и полный путь указывать, не хочет работать.
Пришлите код Ваш, хотя бы чтобы было понятно большее, чем «почитать комментарии».
Как написано тут — делал:
modx.pro/solutions/7882#comment-100380
Ну для начала, я как и вы столкнулся с такой же проблемой и в поисках её решения наткнулся на эту тему, прочитал комментарии и с помощью добрых людей, которые тут оставили ГОТОВОЕ решение, проблему устранил.
Далее. Вы написали что сделали все как указано выше и у вас не работает, я же написал, что АНАЛОГИЧНОЕ решение выше, у меня работает, проверил вот буквально 2 минуты назад. Вы бы спасибо сказали, вместо того что писать про то, как вы ждали умного ответа. Еще раз — по коду выше, у меня все работает, странно да? Видимо я код копирую как-то иначе, нежели вы.
Откуда я знаю что и как вы подставляете? У меня картинки собираются из тела письма, вот мой чанк.
Далее. Вы написали что сделали все как указано выше и у вас не работает, я же написал, что АНАЛОГИЧНОЕ решение выше, у меня работает, проверил вот буквально 2 минуты назад. Вы бы спасибо сказали, вместо того что писать про то, как вы ждали умного ответа. Еще раз — по коду выше, у меня все работает, странно да? Видимо я код копирую как-то иначе, нежели вы.
Откуда я знаю что и как вы подставляете? У меня картинки собираются из тела письма, вот мой чанк.
[[+pagetitle]]
[[+content]]
Мой код абсолютно идентичен коду выше.
Ваш комментарий изначально мне не понравился.
«Почитать комментарии, там дан ответ и готовое решение.» Предлагать перечитать все комментарии заново — это дельный совет, спасибо!
Код чанка, что Вы прислали — нечем не поможет.
Я думаю, что либо код vk.class.php пришлете, либо код content пришлете. Ибо я понимаю, что все работает, кроме картинок, но чтобы работали картинки — я для этого все перечисленное выше сделал.
Что еще мне надо сделать — не понимаю. Пробовал уже
«Почитать комментарии, там дан ответ и готовое решение.» Предлагать перечитать все комментарии заново — это дельный совет, спасибо!
Код чанка, что Вы прислали — нечем не поможет.
Я думаю, что либо код vk.class.php пришлете, либо код content пришлете. Ибо я понимаю, что все работает, кроме картинок, но чтобы работали картинки — я для этого все перечисленное выше сделал.
Что еще мне надо сделать — не понимаю. Пробовал уже
<img src="что-то">
прописывать — не работает…
Если у меня все работает, а у вас нет, значит это магия и мой сайт подпирается рогом волшебного единорога, да?
Еще раз и последний.
vk.class.php — аналогичен коду выше, только ID альбома другой.
Код content — Что? У меня он меняется из статьи к статье, какой код контента, вы о чем?
Вы общаетесь с претензией на то, что я вам должен. Я же хотел лишь помочь, сказал что код выше — рабочий.
Делайте в разделе работа предложение решить вашу проблему, я с вами свяжусь и на платной основе помогу. Ну или можете написать мне на почту через личные сообщения на этом сайте.
Еще раз и последний.
vk.class.php — аналогичен коду выше, только ID альбома другой.
Код content — Что? У меня он меняется из статьи к статье, какой код контента, вы о чем?
Вы общаетесь с претензией на то, что я вам должен. Я же хотел лишь помочь, сказал что код выше — рабочий.
Делайте в разделе работа предложение решить вашу проблему, я с вами свяжусь и на платной основе помогу. Ну или можете написать мне на почту через личные сообщения на этом сайте.
Если у меня все работает, а у вас нет, значит это магия и мой сайт подпирается рогом волшебного единорога, да?Я думаю, что, что-то не так у меня, вопрос, что именно?
Мой чанк tpl.msocial.vk:
{$_modx->resource.pagetitle}
{$_modx->resource.content}
{var $gallery = $_modx->resource.gallery | fromJSON}
{foreach $gallery as $galItem}
<img src="{$galItem.img}">
{/foreach}
Мой код vk.class.php:<?php
/**
* Класс vk для постинга в соответствующую соцсеть.
* @copyright Copyright © 2016 devPastet (Pavel Karelin) devpastet@yandex.ru
*/
class vk extends socials
{
/**
* @var array
*/
public $vkKeys;
public function __construct(modX & $modx, $setting)
{
$this->modx = $modx;
$this->setting = $setting;
$this->vkKeys['owner_id'] = trim($this->modx->getOption('msocial_vk_id'));
$this->vkKeys['access_token'] = trim($this->modx->getOption('msocial_vk_at'));
$this->vkKeys['from_group'] = trim($this->modx->getOption('msocial_im_fg'));
$this->vkKeys['message'] = $this->setting['message'];
$this->vkKeys['v'] = '5.0';
}
/**
* Метод для постинга
*/
public function posting()
{
$param = $this->vkKeys;
if(isset($this->setting['attach']) AND $this->modx->getOption('msocial_im_ps') == 1)
{
$count = 1;
foreach($this->setting['attach'] as $file)
{
if($count <= 4)
{
if (version_compare(phpversion(), '5.5.0', '<')) {
$attrImg['file'.$count] = '@'.MODX_BASE_PATH.$file;
}else{
$attrImg['file'.$count] = new CURLFile(MODX_BASE_PATH.$file);
}
}
$count++;
}
$imgList = $this->uploadImg($attrImg);
if($imgList){
foreach($this->uploadImg($attrImg) as $img){
$attachments .= 'photo'.$img->owner_id.'_'.$img->id.',';
}
$param['attachments'] = substr($attachments, 0, -1);
}
}
$return = $this->request('https://api.vk.com/method/wall.post',$param);
/* Вызываем обработчик ошибок */
if(isset($return->error)){
$errorMsg = $return->error->error_code.' ('.$return->error->error_msg.')';
$this->modx->log(modX::LOG_LEVEL_ERROR, $this->modx->lexicon('msocial_error_posting').' Vk '.$errorMsg);
}
}
/**
* Загрузка изображений
* $file array массив файлов
*/
public function uploadImg($file)
{
$group_id = $this->vkKeys['owner_id'];
$version = $this->vkKeys['v'];
$album_id = '259041743';
$access_token = $this->vkKeys['access_token'];
if($group_id[0] == '-'){
$group_id = substr($group_id, 1);
}
$server = $this->request('https://api.vk.com/method/photos.getWallUploadServer', array(
'group_id' => $group_id,
'access_token' => $this->vkKeys['access_token'],
'v' => $version,
'album_id' => $album_id
));
$vkPhoto = $this->request($server->response->upload_url, $file);
$result = $this->request('https://api.vk.com/method/photos.saveWallPhoto', array(
'group_id' => $group_id,
'photo' => $vkPhoto->photo,
'server' => $vkPhoto->server,
'hash' => $vkPhoto->hash,
'access_token' => $this->vkKeys['access_token'],
'v' => $version
));
return $result->response;
}
}
?>
Интересный Вы человек.
«Если у меня все работает, а у вас нет, значит это магия и мой сайт подпирается рогом волшебного единорога, да?»
Делать из меня дурака — тоже не нужно. Предлагать за деньги разобраться — не интересно. За деньги, за сколько? Компонент стоил мне 190 рублей, за 50 рублей возьметесь разбираться? А если не разберетесь — ничего не получите, готовы рискнуть?
Уверен, что скорее всего проблема не сложная, просто я ее упускаю из вида. Если кто-то может помочь советом, буду благодарен, кроме советов почитать все еще раз и обратиться за платной помощью.
«Если у меня все работает, а у вас нет, значит это магия и мой сайт подпирается рогом волшебного единорога, да?»
Делать из меня дурака — тоже не нужно. Предлагать за деньги разобраться — не интересно. За деньги, за сколько? Компонент стоил мне 190 рублей, за 50 рублей возьметесь разбираться? А если не разберетесь — ничего не получите, готовы рискнуть?
Уверен, что скорее всего проблема не сложная, просто я ее упускаю из вида. Если кто-то может помочь советом, буду благодарен, кроме советов почитать все еще раз и обратиться за платной помощью.
Мне не интересно помогать вам бесплатно, к тому же за 50 рублей, к тому же с таким отношением будто я вам должен.
Раз купили компонент — у вас есть годовая техподдержка от автора.
Раз купили компонент — у вас есть годовая техподдержка от автора.
)))) Интересно на какую суммы Вы рассчитываете? Никто конечно не собирается к Вам обращаться, но все же)))
Просто мне очень не нравятся люди, которые начинают умничать, что «я сделал точно так же и у меня все работает» и какой вывод должны остальные сделать? Что Вы крутой мега спец? Что все остальные — никто и можно на них заработать? Нет, уважаемый, вы не угадали ни одной буквы!
По поводу «будто я вам должен.». Вы начали отвечать мне, но Ваш ответ был -ни о чем. Либо отвечайте, либо вообще не пишите. Если у меня были соображения по поводу моих ошибок, я их указал. А писать, то о что уже было сделано мною и я об этом указал в сообщении — это просто пустозвонство. Вы — ничем не помогли, а еще спасибо просите.
В последнее время люди конечно начали совсем наглеть. Вы чистый тому пример. Вы, конечно же, ничего не должны. Но позиция Ваша. Я сделал, я знаю, я платно сделаю — это плохая позиция. Не по душе она мне. Я сам могу помочь, если что-то знаю и все еще, наивно, конечно, жду такого же от других. Ну а в ответ — всегда, почти, только наглость.
Просто мне очень не нравятся люди, которые начинают умничать, что «я сделал точно так же и у меня все работает» и какой вывод должны остальные сделать? Что Вы крутой мега спец? Что все остальные — никто и можно на них заработать? Нет, уважаемый, вы не угадали ни одной буквы!
По поводу «будто я вам должен.». Вы начали отвечать мне, но Ваш ответ был -ни о чем. Либо отвечайте, либо вообще не пишите. Если у меня были соображения по поводу моих ошибок, я их указал. А писать, то о что уже было сделано мною и я об этом указал в сообщении — это просто пустозвонство. Вы — ничем не помогли, а еще спасибо просите.
В последнее время люди конечно начали совсем наглеть. Вы чистый тому пример. Вы, конечно же, ничего не должны. Но позиция Ваша. Я сделал, я знаю, я платно сделаю — это плохая позиция. Не по душе она мне. Я сам могу помочь, если что-то знаю и все еще, наивно, конечно, жду такого же от других. Ну а в ответ — всегда, почти, только наглость.
Извините меня за мою наглость, всего Вам наилучшего.
Кто подскажет, где у меня ошибка, почему фотографии не постятся?
Мой чанк tpl.msocial.vk:
Мой чанк tpl.msocial.vk:
{$_modx->resource.pagetitle}
{$_modx->resource.content}
{var $gallery = $_modx->resource.gallery | fromJSON}
{foreach $gallery as $galItem}
<img src="{$galItem.img}">
{/foreach}
Мой код vk.class.php:<?php
/**
* Класс vk для постинга в соответствующую соцсеть.
* @copyright Copyright © 2016 devPastet (Pavel Karelin) devpastet@yandex.ru
*/
class vk extends socials
{
/**
* @var array
*/
public $vkKeys;
public function __construct(modX & $modx, $setting)
{
$this->modx = $modx;
$this->setting = $setting;
$this->vkKeys['owner_id'] = trim($this->modx->getOption('msocial_vk_id'));
$this->vkKeys['access_token'] = trim($this->modx->getOption('msocial_vk_at'));
$this->vkKeys['from_group'] = trim($this->modx->getOption('msocial_im_fg'));
$this->vkKeys['message'] = $this->setting['message'];
$this->vkKeys['v'] = '5.0';
}
/**
* Метод для постинга
*/
public function posting()
{
$param = $this->vkKeys;
if(isset($this->setting['attach']) AND $this->modx->getOption('msocial_im_ps') == 1)
{
$count = 1;
foreach($this->setting['attach'] as $file)
{
if($count <= 4)
{
if (version_compare(phpversion(), '5.5.0', '<')) {
$attrImg['file'.$count] = '@'.MODX_BASE_PATH.$file;
}else{
$attrImg['file'.$count] = new CURLFile(MODX_BASE_PATH.$file);
}
}
$count++;
}
$imgList = $this->uploadImg($attrImg);
if($imgList){
foreach($this->uploadImg($attrImg) as $img){
$attachments .= 'photo'.$img->owner_id.'_'.$img->id.',';
}
$param['attachments'] = substr($attachments, 0, -1);
}
}
$return = $this->request('https://api.vk.com/method/wall.post',$param);
/* Вызываем обработчик ошибок */
if(isset($return->error)){
$errorMsg = $return->error->error_code.' ('.$return->error->error_msg.')';
$this->modx->log(modX::LOG_LEVEL_ERROR, $this->modx->lexicon('msocial_error_posting').' Vk '.$errorMsg);
}
}
/**
* Загрузка изображений
* $file array массив файлов
*/
public function uploadImg($file)
{
$group_id = $this->vkKeys['owner_id'];
$version = $this->vkKeys['v'];
$album_id = '259041743';
$access_token = $this->vkKeys['access_token'];
if($group_id[0] == '-'){
$group_id = substr($group_id, 1);
}
$server = $this->request('https://api.vk.com/method/photos.getWallUploadServer', array(
'group_id' => $group_id,
'access_token' => $this->vkKeys['access_token'],
'v' => $version,
'album_id' => $album_id
));
$vkPhoto = $this->request($server->response->upload_url, $file);
$result = $this->request('https://api.vk.com/method/photos.saveWallPhoto', array(
'group_id' => $group_id,
'photo' => $vkPhoto->photo,
'server' => $vkPhoto->server,
'hash' => $vkPhoto->hash,
'access_token' => $this->vkKeys['access_token'],
'v' => $version
));
return $result->response;
}
}
?>
Привет, удалось решить проблему с постингом фотографий?
Да
Круто! а можешь подсказать как?
$this->vkKeys['v'] = "5.0";
сюда: vk.class.php
Делал я так, класс такой же что и выше в посте
[[+pagetitle]]
[[+content]]
<img src="[[+img]]" alt="[[+pagetitle]]">
<?php
/**
* Класс vk для постинга в соответствующую соцсеть.
* @copyright Copyright © 2016 devPastet (Pavel Karelin) devpastet@yandex.ru
*/
class vk extends socials
{
/**
* @var array
*/
public $vkKeys;
public function __construct(modX & $modx, $setting)
{
$this->modx = $modx;
$this->setting = $setting;
$this->vkKeys['owner_id'] = trim($this->modx->getOption('msocial_vk_id'));
$this->vkKeys['access_token'] = trim($this->modx->getOption('msocial_vk_at'));
$this->vkKeys['from_group'] = trim($this->modx->getOption('msocial_im_fg'));
$this->vkKeys['message'] = $this->setting['message'];
$this->vkKeys['v'] = '5.0';
}
/**
* Метод для постинга
*/
public function posting()
{
$param = $this->vkKeys;
if(isset($this->setting['attach']) AND $this->modx->getOption('msocial_im_ps') == 1)
{
$count = 1;
foreach($this->setting['attach'] as $file)
{
if($count <= 4)
{
if (version_compare(phpversion(), '5.5.0', '<')) {
$attrImg['file'.$count] = '@'.MODX_BASE_PATH.$file;
}else{
$attrImg['file'.$count] = new CURLFile(MODX_BASE_PATH.$file);
}
}
$count++;
}
$imgList = $this->uploadImg($attrImg);
if($imgList){
foreach($this->uploadImg($attrImg) as $img){
$attachments .= 'photo'.$img->owner_id.'_'.$img->id.',';
}
$param['attachments'] = substr($attachments, 0, -1);
}
}
$return = $this->request('https://api.vk.com/method/wall.post',$param);
/* Вызываем обработчик ошибок */
if(isset($return->error)){
$errorMsg = $return->error->error_code.' ('.$return->error->error_msg.')';
$this->modx->log(modX::LOG_LEVEL_ERROR, $this->modx->lexicon('msocial_error_posting').' Vk '.$errorMsg);
}
}
/**
* Загрузка изображений
* $file array массив файлов
*/
public function uploadImg($file)
{
$group_id = $this->vkKeys['owner_id'];
$version = $this->vkKeys['v'];
$album_id = '217978767';
$access_token = $this->vkKeys['access_token'];
if($group_id[0] == '-'){
$group_id = substr($group_id, 1);
}
$server = $this->request('https://api.vk.com/method/photos.getWallUploadServer', array(
'group_id' => $group_id,
'access_token' => $this->vkKeys['access_token'],
'v' => $version,
'album_id' => $album_id
));
$vkPhoto = $this->request($server->response->upload_url, $file);
$result = $this->request('https://api.vk.com/method/photos.saveWallPhoto', array(
'group_id' => $group_id,
'photo' => $vkPhoto->photo,
'server' => $vkPhoto->server,
'hash' => $vkPhoto->hash,
'access_token' => $this->vkKeys['access_token'],
'v' => $version
));
return $result->response;
}
}
?>
<img src="[[+img]]" alt="[[+pagetitle]]">
— это TV?
В коде вывода картинки наверное проблема. Я только вставил
Как вызвать картинку? Я делал так у меня картинки из ms2Gallery.
$this->vkKeys['v'] = "5.0";
сюда: vk.class.php и все. код той версии что устанавливается сейчас правильный.Как вызвать картинку? Я делал так у меня картинки из ms2Gallery.
[[+pagetitle]]
[[+content]]
<postlink href="[[~[[+id]]? &scheme=`full`]]"/>
[[!ms2Gallery?
&tpl=`tpl.ms2GalleryObject`
&frontend_css=``
&frontend_js=``
]]
а шаблон — tpl.ms2GalleryObject{if count($files) > 1}
{foreach $files as $file}
<img src="{$file['url']}">
{/foreach}
{elseif count($files) == 1}
<img src="{$file[0]['url']}">
{else}
<p>Нет фото</p>
{/if}
Привет, при постинге новости в ВК затираются все внешние ссылки из текста, возможно ли это как то исправить?
Добрый день. На дворе 2022 год. Модуль работает у кого то? Я поставил, с учетом всех изменений в классе vk. Но ничего не происходит. Посты не публикуются.
Отвечу самому себе. Постинг работает, надо только прописать актуальную версию. Сейчас это 5.131.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.