[modInstagram] 1.2.0 - Instagram PHP Scraper и прокси



Всем привет!

Долгожданное обновление компонента. Что нового:

  • теперь используется библиотека Instagram PHP Scraper
  • два способа получения данных: парсинг страницы и JSON www.instagram.com/USER_NAME/?__a=1
  • авторизация по логину/паролю для закрытых аккаунтов (также может помочь, если заблокирован IP)
  • возможность использования прокси для обхода блокировки IP
  • вывод более 20 постов
Актуальная документация в modstore.

Новая версия уже в modstore: https://modstore.pro/packages/photos-and-files/modinstagram
Демо: https://demo.webone.pw/modinstagram/scraper/
Github: https://github.com/ig0r74/modInstagram/
Игорь Терентьев
16 февраля 2020, 12:15
modx.pro
2 737
+10

Комментарии: 68

Сергей
17 февраля 2020, 12:07
0
Добрый день!
Можно как то сохранять посты в базе данных? что бы все посты подтягивать из instragramm.
Алексей
17 февраля 2020, 19:05
0
Взял из демо код
{'!modInstagram' | snippet : [
    'limit' => 40,
    'accessToken' => false, // если токен указан в настройках, но хотите использовать Scraper
    'username' => 'ig0r74',
    'cachePrefix' => 'inst',
    'cacheTime' => 86400,
    'showLog' => true,
    ]}
Консоль админки: modInstagram scraper error: Account with this username does not exist
    Игорь Терентьев
    17 февраля 2020, 19:48
    +1
    Значит IP сервера заблокирован. Можно так проверить в консоли:

    <?php
    $response = file_get_contents('https://www.instagram.com/ig0r74/?__a=1');
    
    if ($http_response_header[0] != 'HTTP/1.1 200 OK') {
        print 'ERROR: ' . $http_response_header[0];
    }
    302 ошибка будет.

    Можно попробовать указать в системных настройках пароль от аккаунта. Или использовать прокси.
      Алексей
      18 февраля 2020, 11:15
      0
      Спасибо за ответ, в настройки написал логин и пароль.
      Вызов сниппета выглядит так
      {'!modInstagram' | snippet : 
              [
              'limit' => 40,
              'cachePrefix' => 'inst',
              'cacheTime' => 86400,
              'showLog' => true
              ]}
      На странице:
      Warning: Unsupported declare 'strict_types' in .../core/components/modinstagram/vendor/phpfastcache/phpfastcache/lib/Phpfastcache/Helper/Psr16Adapter.php on line 14
      
      Parse error: syntax error, unexpected '{', expecting identifier (T_STRING) in .../core/components/modinstagram/vendor/phpfastcache/phpfastcache/lib/Phpfastcache/Helper/Psr16Adapter.php on line 21
      Версия php 5.6
        Игорь Терентьев
        18 февраля 2020, 17:25
        +1
        Да, забыл указать когда пакет загружал, что минимум 7 версия нужна.
    Вячеслав
    18 февраля 2020, 20:40
    0
    Доброго времени.
    php 7.3
    [[!pdoPage?
                    &element=`modInstagram`
                    &accessToken=`false`
                    &username=`scrap_pandahome`
                    &password=`1111111111`
                    &fromJson=`true`
                    &cachePrefix=`inst`
                    &cacheTime=`3600`
                    &showLog=`true`
                    &tpl=`tpl.modInstagram.item`
                    &tplWrapper=`tpl.modInstagram.wrapper`
                    &limit=`12`
                    &maxId=`13872296`
                    &minId=`13872200`]]
    И вот такая ошибка в консоле:
    /core/components/modinstagram/model/modinstagram.class.php : 99) modInstagram scraper error: Something went wrong. Please report issue.
    Подскажите куда копать?
      Игорь Терентьев
      20 февраля 2020, 09:46
      0
      Привет, обновил библиотеку — сейчас более информативный текст ошибок.
      Уже залил в modstore.
      Игорь Терентьев
      20 февраля 2020, 09:49
      0
      Обновил библиотеку instagram-php-scraper до v0.9.4.
      — более информативные сообщения об ошибках
      — теперь limit работает для fromJson
      — также в modstore указал минимальную версию php 7.0
        Вячеслав
        20 февраля 2020, 15:50
        0
        Приветствую!
        Обновился и все же:
        core/components/modinstagram/model/modinstagram.class.php : 99) modInstagram scraper error: Something went wrong. Please report issue.
        php 7.3
        modinstagram 1.2.1-beta
        Код чанка тот же.
          Игорь Терентьев
          21 февраля 2020, 15:48
          0
          Сори, в спешке немного не доработал. Обновись до 1.2.2 — там будут подробные сообщения об ошибках.
            Вячеслав
            21 февраля 2020, 20:44
            0
            core/components/modinstagram/model/modinstagram.class.php: 104) modInstagram Scraper error: InstagramScraper\Exception\InstagramAuthException 'Something went wrong. Please report issue.' (code: 400) in core/components/modinstagram/vendor/raiym/instagram-php-scraper/src/InstagramScraper/Instagram.php(1460)
              Игорь Терентьев
              26 февраля 2020, 18:41
              0
              А тебе на почту не приходит письмо от инсты с сообщением о подозрительной попытке входа?
                Вячеслав
                26 февраля 2020, 18:54
                0
                Приходят. Пришлось отключить modinstagramm пока не будет решения.
                  Анастасия
                  10 марта 2020, 22:55
                  0
                  Получилось решить? У меня тоже не грузятся фотки, пишет, что подозрительная попытка входа
                    Вячеслав
                    10 марта 2020, 22:57
                    0
                    Нет. Жду от автора помощи. Тоже постоянные сообщения о подозрительной попытке входа.
        Саша Туманов
        26 февраля 2020, 14:43
        0
        А в каких случая надо пароль передавать?
        И еще, у вас в одних примерах указано
        &username=``
        &password=``
        а в других
        &miUsername=``
        &miPassword=``
        Как, все-таки правильно и на что это влияет?
        Еще заметил, что если указываешь источник — json, то в чанке вывода перестает работать {$image_low_resolution}.
          Игорь Терентьев
          26 февраля 2020, 18:39
          0
          Пароль нужен, если ip сервера заблокирован инстаграмом.
          Параметры username и password могут перезаписываться одноименными системными настройками. Лучше использовать miUsername, поддержку username оставил для обратной совместимости.
          По поводу {$image_low_resolution} посмотрю, как время будет. Спасибо.
            Саша Туманов
            26 февраля 2020, 19:35
            0
            Это еще не все )
            Периодически компонент перестает выводить ленту, а вместо этого пишет в общий error.log такое
            [2020-02-26 17:59:28] (ERROR @ /var/www/vhosts/h-74422.kz/httpdocs/core/components/modinstagram/model/modinstagram.class.php : 104) modInstagram Scraper error: InstagramScraper\Exception\InstagramException 'Response code is 429. Body: <!DOCTYPE html> ... </html>
             Something went wrong. Please report issue.' (code: 429) in /var/www/vhosts/h-74422.kz/httpdocs/core/components/modinstagram/vendor/raiym/instagram-php-scraper/src/InstagramScraper/Instagram.php(486)
            [2020-02-26 18:03:54] (ERROR @ /var/www/vhosts/h-74422.kz/httpdocs/core/components/modinstagram/model/modinstagram.class.php : 104) modInstagram Scraper error: InstagramScraper\Exception\InstagramException 'Response code is 429. Body: <!DOCTYPE html>
            [2020-02-26 21:47:54] (ERROR @ /var/www/vhosts/h-74422.kz/httpdocs/core/components/modinstagram/model/modinstagram.class.php : 104) modInstagram Scraper error: InstagramScraper\Exception\InstagramException 'Response code is 429. Body: <!DOCTYPE html>
            Это бы пофиг, на самом деле, но между тегами
            <!DOCTYPE html> ... </html>
            в лог пишется тело странички ошибки инстаграм. Со ссылками, стилями и скриптами естественно. Когда я в первый раз заподозрил неладное и полез смотреть — размер лога уже приближался к 200 мб ))
          Анастасия
          09 марта 2020, 14:09
          0
          В настройках указала логин и пароль, но всё равно не работает. Если в вызове сниппета прописать — тоже не работает. Подскажите, пожалуйста, в чем может быть проблема?
            Анастасия
            10 марта 2020, 11:04
            0
            В самом инстаграме появляется окно с сообщением о подозрительном входе, что кто-то пытался зайти в а
            Денис
            11 марта 2020, 15:21
            0
            Не запускается без токена, логин и пароль указаны в системных настройках, в логах ошибка
            [[!modInstagram?
                &limit=`6`
                &fromJson=`1`
                &showLog=`1`
            ]]
            [2020-03-11 15:16:57] (ERROR @ /home/c/cp04792/gbk/core/components/modinstagram/model/modinstagram.class.php : 105) modInstagram Scraper error: InstagramScraper\Exception\InstagramAuthException 'Something went wrong. Please report issue.' (code: 400) in /home/c/cp04792/gbk/core/components/modinstagram/vendor/raiym/instagram-php-scraper/src/InstagramScraper/Instagram.php(1460)
              Станислав
              15 марта 2020, 21:41
              0
              та же ошибка, перестал работать инстаграм
                Саша Туманов
                18 марта 2020, 13:29
                0
                Да, не работает с той же ошибкой
                [2020-03-18 16:21:45] (ERROR @ /var/www/vhosts/h-74422.kz/httpdocs/core/components/modinstagram/model/modinstagram.class.php : 105) modInstagram Scraper error: InstagramScraper\Exception\InstagramAuthException 'Something went wrong. Please report issue.' (code: 403) in /var/www/vhosts/h-74422.kz/httpdocs/core/components/modinstagram/vendor/raiym/instagram-php-scraper/src/InstagramScraper/Instagram.php(1460)
                  Игорь Терентьев
                  18 марта 2020, 17:28
                  0
                  Всем привет, у кого появляется подобная ошибка «Something went wrong. Please report issue.» — скорее всего IP сервера в черном списке инстаграма. Для начала можно попробовать указать пароль, если не помогло — то только использовать прокси.
                    Саша Туманов
                    18 марта 2020, 18:55
                    0
                    Здравствуйте! Теперь понятно в чем дело. А как можно использовать прокси? Компонент это умеет?
                      Игорь Терентьев
                      08 апреля 2020, 08:56
                      0
                      Привет, да, в системных настройках. Для начала попробуй обновись до последней версии. Там изменен User-Agent для парсера — возможно и так заработает.
                    Stan Ezersky
                    19 марта 2020, 12:07
                    0
                    del
                      Игорь Терентьев
                      19 марта 2020, 12:11
                      0
                      Привет, попробуй укажи имя пользователя в вызове сниппета, параметр miUsername.
                        Stan Ezersky
                        19 марта 2020, 12:13
                        0
                        Спасибо, сниппет изменил
                      Андрей
                      02 апреля 2020, 16:26
                      0
                      Здравствуйте. Получилось у кого авторизоваться с помощью логина и пароля? У меня ошибка «Something went wrong. Please report issue» и письма от инстаграм на почту о подозрительной попытке авторизации. Нужно обязательно использовать прокси? Как это сделать?
                        Станислав
                        02 апреля 2020, 20:02
                        0
                        мы перешли на другой сниппет, все заработало
                          Андрей
                          02 апреля 2020, 20:44
                          0
                          Не подскажете — какой именно?)
                            Андрей
                            03 апреля 2020, 00:11
                            0
                            Да. Расскажите. Я обновил modinstagram до последней версии.
                          Владимир
                          06 апреля 2020, 12:39
                          0
                          Доброго дня!
                          Пробую без токена, обновил modInstagram до 1.2.4-beta. HTTP/1.1 200 OK Ошибка «Учетные данные пользователя неверны» [2020-04-06 12:36:02] (ERROR @ /home/host/www/core/components/modinstagram/model/modinstagram.class.php: 106) modInstagram Scraper error: InstagramScraper\Exception\InstagramAuthException 'User credentials are wrong.' (code: 401) in /home/host/www/core/components/modinstagram/vendor/raiym/instagram-php-scraper/src/InstagramScraper/Instagram.php(1480)

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

                          Вопрос закрыт. Наверно пробел попал с паролем. Все работает, спасибо!
                            Денис
                            08 апреля 2020, 02:25
                            0
                            Доброго дня!
                            Пробую без токена (инстаграм больше его не выдает, см. скриншот monosnap.com/file/xM8fQFLBUoME3gNLLWJNe5PVn3Crmg).
                            Появляется следующая ошибка:
                            [2020-04-08 02:01:07] (ERROR @ /var/www/u1003749/data/www/site.ru/core/components/modinstagram/model/modinstagram.class.php : 105) modInstagram Scraper error: InstagramScraper\Exception\InstagramAuthException 'Something went wrong. Please report issue.' (code: 400) in /var/www/u1003749/data/www/ustimi.ru/core/components/modinstagram/vendor/raiym/instagram-php-scraper/src/InstagramScraper/Instagram.php(1460)
                            В то же время в Инстаграме появляется следующее уведомление, см. monosnap.com/file/5AhB9gYyiz4ZWd3bB4A4Wwa5iDeZaF.
                            При этом на сайте ничего не выводиться.
                            Логин и пароль ввёл верно, перепроверял несколько раз.
                            В чем может быть дело?

                            P.S. Сниппет для вывода постов:
                            [[!modInstagram]]
                              Игорь Терентьев
                              08 апреля 2020, 08:55
                              0
                              Привет, попробуй подтвердить попытку входа, но не через браузер, а из приложения.
                            Andrey
                            30 апреля 2020, 20:25
                            0
                            привет,
                            а можно выводить ровно 4 поста из ленты с каруселями/фото/видео,
                            но чтобы выводились только фото? без видео и каруселей?
                              Игорь Терентьев
                              01 мая 2020, 00:03
                              +2
                              Привет, да.
                              Скопируй сниппет и поменяй здесь логику: github.com/ig0r74/modInstagram/blob/master/core/components/modinstagram/elements/snippets/modinstagram.php#L126-L147

                              Или можно вообще сделать return $apiResponse['data']; и перебирать массив феномом.
                                Andrey
                                01 мая 2020, 11:30
                                0
                                жаль что придется отказаться от обновлений, или вручную обновлять)
                                спасибо за совет! надеюсь, однажды появится что-то вроде 'type' => 'image,video'
                                  Andrey
                                  01 мая 2020, 11:38
                                  0
                                  кстати, логику поменял — а с лимитом это проблему не решает.
                                  например, исключаем видео — if ($row['type'] != 'video') — работает.
                                  но в forech переберется 4 элемента, и если один из них — видео, то выведется 3 элемента в итоге.
                                  а нужно например всегда ровно 4 шт
                                    Владимир
                                    01 мая 2020, 16:26
                                    +1
                                    в стандартном чанке оставь лишь превьюшки и будут выводиться только они
                                    {if ($idx - 1) % 3 == 0}
                                        <div class="row">
                                    {/if}
                                        <div class="col-sm-6 col-md-4">
                                            <div class="thumbnail">
                                               
                                                    <a href="{$link}" target="_blank"><img src="{$image_thumbnail}" alt=""></a>
                                             
                                            </div>
                                        </div>
                                    {if $idx % 3 == 0}
                                        </div>
                                    {/if}
                                      Andrey
                                      01 мая 2020, 16:42
                                      0
                                      да, хороший вариант, но только именно мне не подойдет — в профиле видео горизонтального формата, а фото — вертикальные. сетка ломается)
                                      Игорь Терентьев
                                      01 мая 2020, 17:07
                                      0
                                      Сделай лимит 10, например и если тип изображение делай $i++;
                                      if($i == 4) break;
                                        Andrey
                                        01 мая 2020, 17:52
                                        0
                                        да, примерно так и сделал. из 10 постов 4 фото уж точно наберется
                                  Dmitry
                                  16 мая 2020, 12:00
                                  0
                                  Пару дней работало, потом:
                                  (ERROR @ /.../core/components/modinstagram/model/modinstagram.class.php: 106) modInstagram Scraper error: InstagramScraper\Exception\InstagramAuthException 'Response code is 400. Body: Bad request Something went wrong. Please report issue.' (code: 400) in /.../core/components/modinstagram/vendor/raiym/instagram-php-scraper/src/InstagramScraper/Instagram.php(1472)

                                  через прокси тоже самое
                                    Владимир
                                    18 мая 2020, 18:32
                                    0
                                    Эх… вот такая же беда, а так было хорошо
                                    Работало несколько месяцев нормально
                                    ERROR @ /home/-**********/www/core/components/modinstagram/model/modinstagram.class.php: 106) modInstagram Scraper error: InstagramScraper\Exception\InstagramAuthException 'Response code is 400. Body: Bad request Something went wrong. Please report issue.' (code: 400) in /home/-**********/www/core/components/modinstagram/vendor/raiym/instagram-php-scraper/src/InstagramScraper/Instagram.php(1472)
                                      Сергей
                                      30 мая 2020, 13:24
                                      0
                                      Добрый день, есть ли надежда, что компонент заработает? у меня клиент не понимает что что то может не работать и хочет вернуть инст на сайт
                                        varanika
                                        02 июня 2020, 11:38
                                        +1
                                        Очень странно себя ведет компонент. Сначала жестоко закэшировался первый вызов и смена параметров (того же лимита) вообще не работала. Потом удалила fromJson и лимит стал видеть новое значение. И работало вроде вчера. А тут утром открываю сайт и все — отломился сам по себе компонент.
                                        /core/components/modinstagram/model/modinstagram.class.php: 106) modInstagram Scraper error: InstagramScraper\Exception\InstagramException 'Response code is 403. Body: message => login_required; error_title => You've Been Logged Out; error_body => Please log back in.; logout_reason => 2; status => fail; Something went wrong. Please report issue.' (code: 403) in core/components/modinstagram/vendor/raiym/instagram-php-scraper/src/InstagramScraper/Instagram.php(348)
                                        [[!modInstagram?
                                            &limit = `18`
                                            &username = `***`
                                            &password = `*****`
                                            &accessToken=`false`
                                            &tpl = `my.modInstagram.item`
                                            &tplWrapper = `tpl.modInstagram.wrapper`
                                            &cacheTime = `86400`
                                            &cachePrefix = `inst`
                                        ]]
                                          Андрей
                                          02 июня 2020, 17:54
                                          0
                                          Оно и на демо странице перестало работать. Вариант использовать что то из подобных решений — Вывод фоток с Instagram по тегу или юзеру без токена
                                            Иван Бочкарев
                                            03 июня 2020, 10:52
                                            0
                                            К сожалению тоже отвалилось. Как будет решение обновлю код.
                                              varanika
                                              03 июня 2020, 11:39
                                              0
                                              Эм… Почему — то даже два решения от туда у меня вообще не отдают ничего — просто пусто и в логах чисто… Кажется, инстаграм не хочет показывать свою ленту :)
                                              Andrey
                                              03 июня 2020, 15:41
                                              0
                                              та же ошибка
                                              Владимир
                                              04 июня 2020, 11:25
                                              0
                                              Тоже отвалилось, не выводится
                                              Роман
                                              15 января 2021, 04:14
                                              0
                                              Приветствую @Игорь Терентьев Подскажите пожалуйста, какое максимальное количество постов позволяет выводить сниппет ваш? Не могу найти этой информации.
                                                Игорь Терентьев
                                                15 января 2021, 09:35
                                                0
                                                Здравствуйте, в документации по API нет информации. У меня получилось 100шт вывести (modInstagram2).
                                                  Роман
                                                  15 января 2021, 12:39
                                                  0
                                                  вроде стандартное разрешение для приложения stand alone позволяет 12 или 20 выводить, как вы получили 100? Нужно получать разрешение для своего приложения на dev facebok?
                                                    Игорь Терентьев
                                                    15 января 2021, 13:11
                                                    0
                                                    Превая версия уже не актуальна.
                                                    modstore.pro/packages/photos-and-files/modinstagram2
                                                      Роман
                                                      15 января 2021, 15:19
                                                      0
                                                      Ок да, вижу что 100 можно максимально получить постов своего аккаунта. Еще вопрос, скажите пожалуйста, я так понимаю количество лайков и комментариев для поста нельзя получить в вашем сниппете? В демо смотрю у вас нет такого. demo.webone.pw/modinstagram/
                                              addictivechemical
                                              14 февраля 2021, 23:11
                                              0
                                              Добрый вечер, подскажите пожалуйста как правильно и успешно всё это сделать в Termux
                                                Александр Мельник
                                                15 февраля 2021, 09:36
                                                +1
                                                termux это же вроде эмулятор терминала linux для android?
                                                Вы сломали мой мозг)) потому что лично для меня эта фраза звучит так же как
                                                «подскажите пожалуйста как правильно и успешно всё это сделать в малиновом варенье „
                                                Чего я не понимаю, причем тут termux к компоненту для modx revo?
                                                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                68