За последние 24 часа нас посетили 114104 программиста и 6640 роботов. Сейчас ищут 1433 программиста ...

Получение изображения по API

Тема в разделе "PHP для новичков", создана пользователем 3140412, 15 фев 2023.

Метки:
  1. 3140412

    3140412 Новичок

    С нами с:
    15 фев 2023
    Сообщения:
    2
    Симпатии:
    0
    Доброго времени суток.

    Пытаюсь получить массив товаров по API.
    когда дошел до изображения, воткнулся в проблему.

    Изображения товара представляет из себя массив:

    Код (Text):
    1. images:array(2)
    2. 0:"/img?params=eyJPYmplY3RUeXBlIjogIm5vbWVuY2xhdHVyZV9mb3JfcmVmIiwgIk9iamVjdElkIjogMTM5NCwgIlBob3RvVVJMIjogImh0dHBzOi8vZGlzay5zYmlzLnJ1L2Rpc2tzaGFyZWRyZXN0LzU0NWEyMDE1LTY5MzktNDg0NS1iMjZkLTA2NGQ2YWRkMzc4ZSIsICJQaG90b0lkIjogbnVsbCwgIlNpemUiOiBudWxsLCAiQWRkaXRpb25hbFBhcmFtcyI6IG51bGx9"
    3. 1:"/img?params=eyJPYmplY3RUeXBlIjogIm5vbWVuY2xhdHVyZV9mb3JfcmVmIiwgIk9iamVjdElkIjogMTM5NCwgIlBob3RvVVJMIjogImh0dHBzOi8vZGlzay5zYmlzLnJ1L2Rpc2tzaGFyZWRyZXN0L2Q2NGJkMjYxLWYxZjctNDBkMy05NWMzLTdkMjMwOTY3MTAyYSIsICJQaG90b0lkIjogbnVsbCwgIlNpemUiOiBudWxsLCAiQWRkaXRpb25hbFBhcmFtcyI6IG51bGx9"
    и передаю по очереди значения массива в GET запрос.

    PHP:
    1. $img = $element['images'];
    2.                 if (is_array($img) || is_object($img)){
    3.                     foreach ($img as $picture){
    4.                         $csv[] = file_get_contents("https://api.sbis.ru/retail/{$picture}");                      
    5.                      }
    6.                 }
    на выходе получаю
    HTML:
    1.     <head>
    2.         <noscript><meta http-equiv=""refresh"" content=""2; url=/auth/?ret=%2Fretail%2Fimg%3Fparams%3DeyJPYmplY3RUeXBlIjogIm5vbWVuY2xhdHVyZV9mb3JfcmVmIiwgIk9iamVjdElkIjogMTM5NCwgIlBob3RvVVJMIjogImh0dHBzOi8vZGlzay5zYmlzLnJ1L2Rpc2tzaGFyZWRyZXN0LzU0NWEyMDE1LTY5MzktNDg0NS1iMjZkLTA2NGQ2YWRkMzc4ZSIsICJQaG90b0lkIjogbnVsbCwgIlNpemUiOiBudWxsLCAiQWRkaXRpb25hbFBhcmFtcyI6IG51bGx9""></noscript>
    3.         <script type=""text/javascript"">
    4.             var
    5.                loc = window.location,
    6.                redirect = '%2Fretail%2Fimg%3Fparams%3DeyJPYmplY3RUeXBlIjogIm5vbWVuY2xhdHVyZV9mb3JfcmVmIiwgIk9iamVjdElkIjogMTM5NCwgIlBob3RvVVJMIjogImh0dHBzOi8vZGlzay5zYmlzLnJ1L2Rpc2tzaGFyZWRyZXN0LzU0NWEyMDE1LTY5MzktNDg0NS1iMjZkLTA2NGQ2YWRkMzc4ZSIsICJQaG90b0lkIjogbnVsbCwgIlNpemUiOiBudWxsLCAiQWRkaXRpb25hbFBhcmFtcyI6IG51bGx9';
    7.             window.location = loc.protocol + '//' + loc.host + '/auth/?ret=' + redirect + loc.hash;
    8.         </script>
    9.     </head>
    10.     <body></body>
    11. </html>
    Подскажите, что это такое? Как с этим дальше работать?
    Я ожидал получить ссылку на изображение (http ://мой-сайт/ images/ pic.jpeg например)

    Ссылка на описание API
    https://sbis.ru/help/integration/api/app_sale/nomen_list
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    3140412 нравится это.
  3. 3140412

    3140412 Новичок

    С нами с:
    15 фев 2023
    Сообщения:
    2
    Симпатии:
    0
    Да действительно авторизацию хотел. Спасибо

    Пока добавил авторизацию прям в это место. как сделать авторизацию один раз на все действия скрипта не понял пока (
    PHP:
    1. if (is_array($img) || is_object($img)){
    2.                     foreach ($img as $picture){
    3.  
    4.                         $ch = curl_init();
    5.                         curl_setopt_array($ch, array(
    6.                             CURLOPT_SSL_VERIFYPEER => false,
    7.                             CURLOPT_FOLLOWLOCATION => false,
    8.                             CURLOPT_RETURNTRANSFER => true,
    9.                             CURLOPT_URL => "https://api.sbis.ru/retail/{$picture}",
    10.                             CURLOPT_HEADER => 0,
    11.                             CURLOPT_HTTPHEADER =>  array(
    12.                                 'Content-type: charset=utf-8',
    13.                                 'X-SBISAccessToken: bV...Yz'
    14.                                 )
    15.                         ));
    16.                         $curlimg = curl_exec($ch);
    17.                         curl_close($ch);
    18.                        
    19.                         file_put_contents(''.$element['name'].'.png',$curlimg);
    в переменной $curlimg прям код картинки.
    и я её на диск сохраняю.
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    и не пытайся...

    ибо авторизация проверяется для КАЖДОГО запроса
     
    3140412 нравится это.
  5. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    Работал с этим API. Авторизуешься один раз, потом в заголовках их почухню (X-SBISAccessToken) таскаешь, главное, по завершении скрипта разавторизоваться, а то у них сессии накапливаются.
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    753
    Адрес:
    Татарстан
    Какая разница, та же авторизаця - через почухню в заголовке
     
  7. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    947
    Симпатии:
    147
    Так говорю, если сессию не закрыть, AccessToken можно юзать и в другом скрипте, а запросов к API городи, сколько душЕ угодно.