VK API wall.post получить <media_id>

418
09 февраля 2017, 02:53

Всем привет. Пишу скрипт для добавления постов в группу:

    $dataSend = array(
        'owner_id'  => "-123456",
        'message'   => "Hello wall.post!",
        'attachments'=> "photo-123456_xxxxxxxxx"  // where xxxxxxxxx =  media_id
    ) ;
    $vkAPI->api("wall.post",$dataSend);

Работает, осталось прикрепить фото. Подскажите пож как получить media_id ?

Answer 1

Вот держите рабочий код:

    $accessToken = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    $vkAPI = new \BW\Vkontakte(['access_token' => $accessToken]);
    $publicID = -$group_id; // group_id
    $getURL = array(
        'group_id'  => $group_id,
    );
    if($vkAPI->api("photos.getWallUploadServer",$getURL)){   // получаем upload_url
        $result = $vkAPI->api("photos.getWallUploadServer",$getURL);
    } else {
        echo "ERROR URI<BR>";
    }
    $curl = curl_init();  //загружаем фото и получаем photo_id и owner_id
    $file = DIR_IMAGE.'0qDLZ0kw0I.jpg';   // путь к загружаемому файлу
    $file = curl_file_create($file, mime_content_type($file),pathinfo($file)['basename']);
    curl_setopt($curl, CURLOPT_URL, $result['response']['upload_url']);
    curl_setopt($curl, CURLOPT_POST, true);
    $charset = array(
        'Content-Type' => 'multipart/form-data',
        'charset' => 'utf-8',
    );
    curl_setopt($curl, CURLOPT_HTTPHEADER, $charset );
    curl_setopt($curl, CURLOPT_POSTFIELDS, ['file' => $file]);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    $response_image = json_decode(curl_exec($curl));
    curl_close($curl);
    $request_params = array(
        'group_id'=>"$group_id",
        'photo' => $response_image->photo,
        'server' => $response_image->server,
        'hash' => $response_image->hash,
    );
    $getPhoto = $vkAPI->api("photos.saveWallPhoto",$request_params);
    $photo_id = $getPhoto['response'][0]['pid'];
    $owner_id = $getPhoto['response'][0]['owner_id'];
    $dataSend = array(   // подготавливаем наш Post
        'owner_id'  => $publicID,
        'message'   => "I'm new Post!",
        'attachments'=> "photo".$owner_id."_".$photo_id.", https://google.com/"  // where 319485978 = media_id
    ) ;
    if($vkAPI->api("wall.post",$dataSend)){
        $vkAPI->api("wall.post",$dataSend);
        echo "Post добавлен!<BR>";
    } else {
        echo "ERROR! Ищем ошибку<BR>";
    }

Инфа по докам описана, так что повторно добавлять не буду. Всем добра!

Answer 2

Чтобы выяснить этот media_id, нужно вначале либо самостоятельно загрузить фотографию на сайт, прежде чем публиковать запись, либо взять уже загруженную ранее.

Для загрузки фотографии вам придётся выполнить несколько шагов:

  1. Вызвать метод photos.getWallUploadServer, передав ему параметр group_id с идентификатором группы, положительное число.
  2. В ответ сервер пришлёт JSON объект, с полем upload_url, содержащем URL для загрузки файла. По этому адресу надо выполнить POST запрос с полем photo, которое будет содержать фотографию.
  3. После надо будет передать данные, полученные на предыдущем шаге, методу photos.saveWallPhoto. (Если не ничего не путаю, достаточно передать только параметр photo).
  4. И только теперь есть смысл вызывать wall.post, как у вас в примере.

Подробнее процедура описана в документации на странице «Загрузка файлов».

Разумеется, если фото уже присутсвует на сайте к моменту публикации, то всё проще. Можно подглядеть этот meida_id в ссылке на фотографию.

READ ALSO
Уменьшение значения сессии

Уменьшение значения сессии

Почему, после того, как будет совпадение, то значение сессии, минусуется только 1 раз?

255
Почему при отправке формы на почту приходят неформатируемые данные?

Почему при отправке формы на почту приходят неформатируемые данные?

Интересует вопрос: почему при отправке формы на почту приходят данные в неформатируемом виде (в одну строчку) и как это исправить?

275
Почему не идет выборка из базы?

Почему не идет выборка из базы?

ЗдравствуйтеЕсть таблица prod , в ней ячейка id_specz , в которой значение 3,2,1

292
Инвертировать запрос

Инвертировать запрос

Есть регулярное выражение вида

280