Как получить отдельные параметры из ответа сервера vk-api

58
05 марта 2022, 17:30

При работе с VK API получаю ответ:

{"response":{"type":"user","object_id":506019729}}

Как получить с этой строки с помощью PHP параметры type, object_id?

Сейчас использую такой костыль, какие есть еще решения?

$out = explode('{"response":{"type":"group","object_id":', $out);
if (isset($out[1])) {
    $id = $out[1];
    $id = trim($id, "}"); 
    Log::alert("ID: ".$id);
} else {
    $id = null;
}
return $id; 
Answer 1

Вы принимаете ответ в JSON и работать с ним нужно как с JSON.

$result = json_decode($response); // stdClass

или

$result = json_decode($response, true); // array

У вас получится готовый к работе массив параметров, который дальше можно перебирать через foreach и производить все необходимые действия.

Ваш код, если хотите работать с ответом как с stdClass:

$result = json_decode( '{"response":{"type":"user","object_id":506019729}}' );
echo $result->response->type;
// выведет user. 

Ваш код, если хотите работать с ответом как с array:

$result = json_decode( '{"response":{"type":"user","object_id":506019729}}', true );
echo $result["response"]["type"];
// тоже выведет user. 

Пример работы с API vk в одном из моих проектов.

$result = json_decode( vk_query( 'https://api.vk.com/method/board.getComments', array(
    'lang'             => $lang,
    'group_id'         => $group_id,
    'topic_id'         => $topic_id,
    'need_likes'       => $need_likes,
    'start_comment_id' => $start_comment_id,
    'offset'           => $offset,
    'count'            => $count,
    'sort'             => $sort,
    'extended'         => $extended,
    'access_token'     => $access_token,
    'v'                => $v
) ), true ); // делаем запрос к VK с нужными параметрами и декодируем ответ в массив
/* ... код запроса к БД через PDO */
foreach ( $result['response']['items'] as $item ) { / перебираем массив ответа ВК
    if ( $post_id < $item["id"] && $item["text"] != "" ) {
        // биндим нужные параметры для записи в БД
        $query->bindParam( ':post_id', $item["id"] );
        $query->bindParam( ':from_id', abs( $item["from_id"] ) );
        $query->bindParam( ':date', $item["date"] );
        $query->bindParam( ':text', $item["text"] );
        $query->execute(); // записываем в БД нужные значения
    }
}
READ ALSO
Как построить архитектуру сайта .Сайт будет предназначен для каждого региона

Как построить архитектуру сайта .Сайт будет предназначен для каждого региона

Для каждого региона создавать свой сайт с по доменом или как ? Что бы поисковики выдавали сразу информацию для клиента по его регионаПишу...

83
PHPSPREADSHEET задать формулу

PHPSPREADSHEET задать формулу

Как в библиотеке phpspreadsheet можно задать формулу A1 * A2 * A3 / A4?

77
Webpack не поддерживает классы?

Webpack не поддерживает классы?

Cтолкнулся с такой проблемой: объявление класса со свойством (приватным или нет - не важно)

61
Как получить значение присвоенное в функции

Как получить значение присвоенное в функции

В случае обычных функций нужно использовать return, а как поступить например с таким:

80