За последние 24 часа нас посетили 23220 программистов и 1636 роботов. Сейчас ищут 1238 программистов ...

Ошибка при получении изображений постов из ВК по API

Тема в разделе "PHP для новичков", создана пользователем nash, 11 июл 2022.

Метки:
  1. nash

    nash Активный пользователь

    С нами с:
    19 мар 2011
    Сообщения:
    7
    Симпатии:
    0
    Делаю на сайт вывод последних 5 постов из группы ВК. Текст, дату, просмотры - подтянул, а с изображениями (вложениями) никак не могу разобраться. Записываю в массив ссылку на изображение:

    PHP:
    1. 'image'  => $w->attachments->photo->sizes->url[2]
    и вывожу в шаблоне... в итоге выдает ошибку:
    Код (Text):
    1. Notice: Trying to get property 'photo' of non-object in /home/c/ce651/public_html/catalog/controller/extension/module/vk_news.php
    2. on line 36
    3. Notice: Trying to get property 'sizes' of non-object in
    4. /home/c/ce651/public_html/catalog/controller/extension/module/vk_news.php
    5. on line 36
    6. Notice: Trying to get property 'url' of non-object in
    7. /home/c/ce651/public_html/catalog/controller/extension/module/vk_news.php
    8. on line 36
    как правильно получить вложения постов из группы ВК, а именно изображения?


    PHP:
    1. // ID нашего сообщества или страницы вконтакте
    2.         $wall_id="-86529522";
    3.        
    4.         // Удаляем минус у ID групп, что мы используем выше (понадобится для ссылки).
    5.         $group_id = preg_replace("/-/i", "", $wall_id);
    6.        
    7.         // Количество записей, которое нам нужно получить.
    8.         $count = "5";
    9.        
    10.         // Токен
    11.         $token = "f0022454f0022454f002245479f07ee6cdff002f0022454928fc887a253afc909a9xxxx";
    12.        
    13.         // Получаем информацию, подставив все данные выше.
    14.         $api = file_get_contents("https://api.vk.com/api.php?oauth=1&method=wall.get&owner_id=".$wall_id."&count=5&v=5.131&access_token=".$token."");
    15.        
    16.         // Преобразуем JSON-строку в массив
    17.         $wall = json_decode($api);
    18.         //var_dump($wall);
    19.        
    20.         // Получаем массив
    21.         $wall = $wall->response->items;
    22.         //$images = $wall->response->attachments;
    23.      
    24.         $data['news'] = [];
    25.  
    26.         foreach ($wall as $w) {
    27.  
    28. //формируем массив с данными
    29.             $data['news'][] = [
    30.                 'id'        => $w->id,
    31.                 'posted'    => date("d.m.Y H:i", $w->date),
    32.                 'image'        => $w->attachments->photo->sizes->url[2],
    33.                 'view'        => $w->views->count,
    34.                 'text'        => utf8_substr(trim(strip_tags(html_entity_decode($w->text, ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
    35.                 'href'      => "https://vk.com/wall-" . $group_id . "_" . $w->id
    36.             ];
    37.         }

    HTML/TWIG:
    PHP:
    1. <div class="heading">VK Новости</div>
    2.     <div class="uni-module news-module news-100">
    3.         <div class="uni-module__wrapper row-flex">
    4.             {% for news in news %}
    5.                 <div class="news-module__item uni-item">
    6.                         <div class="news-module__image uni-href" data-href="{{ news.href }}">
    7.                                 <img src="{{ news.image }}" loading="lazy" alt="" title="" class="img-responsive" width="100" height="100" />
    8.                         </div>
    9.                     <div class="news-module__description">
    10.                         <div class="news-module__category-date-viewed">
    11.                             <span class="news-module__date"><i class="fa fa-calendar"></i>{{ news.posted }}</span>
    12.                             <span class="news-module__viewed"><i class="fa fa-eye"></i>{{ news.view }}</span>
    13.                         </div>                      
    14.                         <div class="news-module__text">{{ news.text }} <a class="news-module__name" href="{{ news.href }}" title="">читать далее</a></div>
    15.                     </div>
    16.                 </div>
    17.             {% endfor %}
    18.         </div>
    19.     </div>

    массив wall во вложении txt
     

    Вложения:

    • wall_arr.txt
      Размер файла:
      21,3 КБ
      Просмотров:
      2
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.860
    Симпатии:
    750
    Адрес:
    Татарстан
    может для начала попытаться перевести текст ошибки?
    чтоб понять что там нет того чего вы хотите... потом задуматься, "а что же там есть?"
    и посмотреть для разнообразия print_r($w->attachments);
     
  3. nash

    nash Активный пользователь

    С нами с:
    19 мар 2011
    Сообщения:
    7
    Симпатии:
    0
    все же есть
    upload_2022-7-12_11-18-33.png
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.860
    Симпатии:
    750
    Адрес:
    Татарстан
    В - внимательность ....
    attachments - это массив! кроме этого и sizes тоже массив
    для обращения к 1 элементу и с 1 размером можете делать так
    PHP:
    1. $w->attachments[0]->photo->sizesх[0]->url,
    а вот url - не массив, хоть вы и пытаетесь к нему так обратиться
     
    nash нравится это.