Как починить автоматическую отправку поста в группу ВК?

Есть php скрипт на сервере который отправляет пост с прикреплённой картинкой в ленту группы ВК
До недавнего времени всё работало отлично, а сейчас перестала выгружаться картинка с сервера.
Вот код:

require 'class/vk.php';
require 'class/post.php';

$token = ' ... ';
$user_id = null;
$group_id = ' ...132465789... ';

$text = $tempbody;
$image = ' ... /vk/meteoimg.jpg';

try {
    $vk = \vkApi\vk::create($token);
    $post = new \vkApi\post($vk, $user_id, $group_id);
    $post->post($text, $image);
    echo 'Success!';
} catch(Exception $e){
    echo 'Error: <b>' . $e->getMessage() . '</b><br />';
    echo 'in file "' . $e->getFile() . '" on line ' . $e->getLine();
}


и файлик post.php
namespace vkApi;

class post{
    private $vk;
    private $owner;
    function __construct(vk $vk, $user = null, $group = null){
        $this->vk = $vk;
        if(!$user && !$group){
            throw new \Exception('Not found group or user');
        }
        $this->owner = array(
            'type' => $user ? 'owner_id' : 'group_id',
            'value' => $user ? $user : $group
        );
        $this->owner['value'] = (int)preg_replace('/([^\d]+)/', '', $this->owner['value']);
    }

    function post($text, $img = null){
        if($img) {
            $data = $this->load($img);
            $img = $data->response[0]->id;
        }
        $data = array(
            'message' => $text,
            'owner_id' => $this->owner['value']
        );
        if($img){
            $data['attachments'] = $img;
        }
        if($this->owner['type'] == 'group_id'){
            $data['owner_id'] = '-' . $data['owner_id'];
        }

        $data = $this->vk->get('wall.post', $data);
        if(isset($data->error)){
            throw new \Exception($data->error->error_msg);
        }
        return $data;
    }

    function load($src){
        $photo = (array)$this->getPhoto($src);
        $photo[$this->owner['type']] = $this->owner['value'];
        $data = $this->vk->get('photos.saveWallPhoto', $photo);
        return $data;
    }

    private function getPhoto($src){
        $name = __DIR__ . DIRECTORY_SEPARATOR . '1.png';
        file_put_contents($name, file_get_contents($src));
        $ch = curl_init($this->getServer());
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
        curl_setopt($ch, CURLOPT_POSTFIELDS, array(
            'photo' => '@' . $name
        ));
        $response = curl_exec( $ch );
        curl_close( $ch );
        return json_decode($response);
    }

    private function getServer(){
        $data = $this->vk->get('photos.getWallUploadServer', array(
            $this->owner['type'] => $this->owner['value'],
        ));
        return $data->response->upload_url;
    }


}


и vk.php
namespace vkApi;

class vk {
    private $token;
    private $count = -1;
    private static $class = null;

    public static function create($token){
        if(!self::$class){
            self::$class = new vk($token);
        }
        return self::$class;
    }

    private function __clone(){}
    private function __construct($token){
        $this->token = $token;
    }

    function get($method, array $data){
        $this->count ++;
        if($this->count >= 3){
            $this->count = 0;
            sleep(1);
        }
        $params = array();
        foreach($data as $name => $val){
            $params[$name] = $val;
			$params['v'] = '5.101';
            $params['access_token'] = $this->token;
        }
        $json = file_get_contents('https://api.vk.com/method/' . $method . '?' . http_build_query($params));
        return json_decode($json);
    }
}


Подскажите, пожалуйста, как починить.
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 1
volodec
@volodec
Выведи в лог, что возвращает post::load и post::getPhoto, после этого тебе станет понятнее в чем дело
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы