За последние 24 часа нас посетили 36664 программиста и 1711 роботов. Сейчас ищут 883 программиста ...

Функция публикации записи на стене группы в вк

Тема в разделе "Беседы", создана пользователем Dron-Boy, 5 июл 2018.

  1. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Понадобилась функция для постинга постов на стену группы, начал гуглить нашел пару примеров но они не работали, оказалось вк поменял что то в api и пришлось вникать и курить мануалы. Часто натыкался на проблемы даже щас есть одна пока постяться только картинки с текстом не гифки. Щас этот вопрос решаю с тех. поддержкой "ошибка отказано в доступе на добавление документов". Прикрепить по api можно не более 5 картинок к одному посту.
    в качестве параметра обязательно передать массив с параметрами $token его получаем после создания своего приложения и авторизации. $group_id это id группы можно найти в адресной строке. $album_id это id альбома куда нужно загружать фотографии его тоже можно посмотреть в адресной строке зайдя в альбом. $text любой текст который хотите опубликовать можно прикреплять хештеги пример #teg1 #teg2 и тд. $files это массив с файлами как я и говорил максимум 5 штук, но если вы закинете больше скрипт загрузит всеровно только 5 шт.
    PHP:
    1. if($info[2] == 1)
    тут сравнивается с 1 потому что функция getimagesize возвращает 1 к типу gif.
    Так вроде все расписал. Кому надо берите. и еще токен должен быть минимм с доступом photos,wall .
    Скрипт не идеален. Кто хочет допилить прошу.
    PHP:
    1. function add_post_vk($mas){
    2.     $token = $mas['token'];
    3.     $group_id = $mas['group_id'];
    4.     $album_id = $mas['album_id'];
    5.     $message = $mas['text'];
    6.     $v = '5.62'; //версия vk api
    7.     $res_file = [];
    8.     (count($mas['files']) > 5 ? $count = 5 : $count = count($mas['files']));
    9.     for($i = 0; $i < $count;$i++){
    10.         $file = new CURLFile(realpath($mas['files'][$i]));
    11.         $info = getimagesize($mas['files'][$i]);
    12.         if($info[2] == 1){
    13.             continue;
    14.             $post_data = array("file" => $file);
    15.             // получаем урл для загрузки
    16.             $url = file_get_contents("https://api.vk.com/method/docs.getUploadServer?group_id=".$group_id."&v=".$v."&access_token=".$token);
    17.             $url = json_decode($url)->response->upload_url;
    18.             //// отправка post картинки
    19.             $ch = curl_init();
    20.             curl_setopt($ch, CURLOPT_URL, $url);
    21.             curl_setopt($ch, CURLOPT_POST, true);
    22.             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    23.             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    24.             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    25.             curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    26.             $r  = curl_exec($ch);
    27.             $result = json_decode($r,true);
    28.             $params = array(
    29.                 'access_token' => $token,
    30.                 'group_id' => $group_id,
    31.                 'file' => $result['file'],
    32.                 'v' => $v,
    33.             );
    34.             $safe = json_decode(file_get_contents('https://api.vk.com/method/docs.save' . '?' .http_build_query($params)), true);
    35.             $res_str .= 'doc '.$safe['response'][0]['owner_id'].'_'.$safe['response'][0]['id'].',';
    36.         }else{
    37.             $post_data = array("photo" => $file);
    38.             // получаем урл для загрузки
    39.             $url = file_get_contents("https://api.vk.com/method/photos.getWallUploadServer?album_id=".$album_id."&group_id=".$group_id."&v=".$v."&access_token=".$token);
    40.             $url = json_decode($url)->response->upload_url;
    41.             //// отправка post картинки
    42.             $ch = curl_init();
    43.             curl_setopt($ch, CURLOPT_URL, $url);
    44.             curl_setopt($ch, CURLOPT_POST, true);
    45.             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    46.             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    47.             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    48.             curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    49.             $r  = curl_exec($ch);
    50.             $result = json_decode($r,true);
    51.             $ph = $result['photo'];
    52.             //// сохраняем
    53.             $params = array(
    54.                 'access_token' => $token,
    55.                 'album_id' =>$album_id,
    56.                 'group_id' => $group_id,
    57.                 'server' => $result['server'],
    58.                 'photo' => $ph,
    59.                 'hash' => $result['hash'],
    60.                 'v' => $v,
    61.             );
    62.             $safe = json_decode(file_get_contents('https://api.vk.com/method/photos.saveWallPhoto' . '?' .http_build_query($params)), true);
    63.             $res_file[]=[
    64.                 'id' => $safe['response'][0]['id'],
    65.                 'owner_id' => $safe['response'][0]['owner_id'],
    66.             ];
    67.             $res_str .= 'photo'.$safe['response'][0]['owner_id'].'_'.$safe['response'][0]['id'].',';
    68.         }
    69.     }
    70.     $query=file_get_contents("https://api.vk.com/method/wall.post?owner_id=-168148011&from_group=1&attachments=$res_str&message=".urlencode($message)."&access_token=".$token."&v=".$v);
    71.     $query = json_decode($query);
    72.     if($query->post_id){
    73.         return true;
    74.     }else{
    75.         return false;
    76.     }
    77. }
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Dron-Boy нравится это.
  3. Dron-Boy

    Dron-Boy Старожил

    С нами с:
    20 ноя 2014
    Сообщения:
    1.041
    Симпатии:
    126
    Интересно, честно я не знал о нем. Спасибо