[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
1 203
+10

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

Сергей
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
                                              Тоже отвалилось, не выводится
                                              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                              60