На днях возникла потребность выгрузить фотографии из аккаунта instagram на сайт клиента. Быстро написал небольшой скрипт. Может быть кому-то пригодится.
Данный скрипт позволит выгрузить фотографии из профиля instagram на ваш сайт, под управлением 1C Bitrix, впрочем, вы можете адаптировать его под любую CMS. Для его работы вам необходимо заранее создать инфоблок. Далее кладём файл, который я прикреплю в конце статьи в корень вашего сайта. Открываем и вносим нужные корректировки, вам необходимо заменить лишь следующую информацию:
|
<? //Настройки $AccessToken = '1198378782.6509ed0.kl62be8ar8d14a28341099487432iea3'; $mailto= "myemail@mail.ru"; //Кому будут приходить сообщения в случае ошибки $sitename = "mysyte.ru"; //адрес сайта, на котором устанавилваете скрипт $subject = "Error parsing photo from instagram in website: ".$sitename; $iblockid = 7; //Идентификатор инфоблока, куда будут выгружаться фотографии ?> |
Первое, что нужно знать это Access Token от вашего аккаунта в Instagram. Как его узнать, я рассказывал в этой статье.
В переменную $mailto
заносим электронный адрес администратора сайта, ему будут приходить уведомления в случае ошибок при импорте.
Что писать, в $sitename
и $iblockid
я думаю и так понятно. В $subject
заносим тему сообщения, которое получит администратор.
Далее следует код самого импорта.
Я использовал curl для работы с Instagram API, для начала следует сформировать запрос:
|
$ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_URL => 'https://api.instagram.com/v1/users/self/media/recent?access_token='.$AccessToken, CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => 2 )); |
Далее, выполняем запрос и проверяем был ли он успешен. Если да, то разбираем пришедшие данные при помощи функции json_decode,
так как ответ придёт в формате json
. И наконец, если код ответа равен 200, то есть, мы получили нужные нам данные, то начинаем запись в инфоблок. Если же во время выполнения возникла ошибка, то выведем это на страницу.
|
if($json = curl_exec($ch)){ curl_close($ch); $array = json_decode($json, true); if($array["meta"]["code"] == 200){ //далее код записи в инфоблок } else{ curl_close($ch); echo "curl_exec was error;"; } |
Если всё в порядке, запрос выполнен успешно, код ответа 200, то пробуем разобрать наши данные и записать их в инфоблок. Подключим модуль iblock
и создадим новый элемент инфоблока:
|
CModule::IncludeModule('iblock'); $element = new CIBlockElement(); |
Код далее, я приводить не буду, так как он слишком длинный, но разобраться в нём не составит труда. В нём мы выполняем следующие операции:
- В цикле перебираем все полученные из instagram изображения
- Проверяем существуют ли они уже в нашем инфоблоке
- Если существуют, то обновляем их
- Если отсутствуют, то добавляем
- Попутно выводим на страницу сообщения об ошибках и успешных добавлениях
Из кода можно увидеть, что если от API мы получим ошибку, то есть, в данном случае код ответа не будет равен 200, то сформируется email письмо, которое будет содержать: имя сайта, на котором произошла ошибка, тип ошибки, её код и описание, чего более чем достаточно для того, чтоб администратор обратил внимание на данное сообщение.
Не забывайте в начале и в конце файла подключить header
и footer
, и установить заголовок:
|
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle("Импорт"); ?> <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?> |
В противном случае, подключить модуль iblock
у вас не получится.
На этом, я думаю, статью можно закончить. Данный пример иллюстрирует как вы можете работать с instagram api на своём сайте. Вы можете посетить страницу api и посмотреть все возможные методы работы с ним.
comments powered by HyperComments