Гарантированный парсинг сниппетов, КАК ?

Тема в разделе "Thunder 3.X", создана пользователем daronlad, 25 янв 2019.

  1. daronlad

    daronlad Новичок

    14 апр 2016
    49
    0
    Мужской
    Подскажите, кто тут остался, как сделать универсальный парсинг снипетов, который гарантированно что-то да выдаст

    Конструкция вида:
    {% set snipz = snippets(keyword) %}
    {% if snipz is empty %}
    {% set snipz = google_snippets(keyword,random(5..30)) %}
    {% elseif snipz is empty %}
    {% set snipz = bing_snippets(keyword,'en') %}
    {% elseif snipz is empty %}
    {% set snipz = yahoo_snippets(keyword,'en') %}
    {% elseif snipz is empty %}
    {% set snipz = snippets(keyword) %}
    {% elseif snipz is empty %}
    {% endif %}


    часто не выдает ни чего.
    Конструкции while..do, break, как я понял, в twig нет (пиздец :)) ), так бы можно было зациклить перебор всех функций.

    Попытки просто использовать все возможные функции (google_snippets итд, где то что-то да спарсит) и слить их в один массив через merge:

    {% set snipz1 = bing_snippets(keyword,'en') %}
    {% set snipz2 = snippets(keyword) %}

    {% if snipz1 is not empty %}
    {% set snipz = snipz|merge(snipz1) %}
    {% else %}
    {% endif %}

    {% if snipz2 is not empty %}
    {% set snipz = snipz|merge(snipz2) %}
    {% else %}
    {% endif %}


    Выдают это.
    The merge filter only works with arrays or "Traversable", got "string" as first argument.

    походу нужно как то правильно инициализировать массив в переменной snipz.

    Пробовал слить массивы через php, но чот тоже через раз пустые получаются, не могу понять почему.
    Понимаю, что форум умер, но, может у кого есть собственный 100 процентно рабочий код парсинга, поделитесь плиз.
     
  2. ddn128

    ddn128 Опытный Пользователь

    31 дек 2015
    527
    245
    Мужской
    ну можно что-то слепить - если оч. надо
    например как-то так

    Код:
    {% set snip_eng = [ google_snippets(keyword,10), bing_snippets(keyword,'en'), yahoo_snippets(keyword,'en') ] %}
    
    {% for sn_eng in snip_eng if snip|length < 10 %}
       {% set snip = sn_eng %}
    <!-- ну и здесь можно мандражировать со snip или sn_eng-->
    {% endfor %}
    
    а можно и через merge, если надо все\несколько ПС

    надо сначала задать пустой массив

    Код:
    {% set snipz =  []  %}
    а потом уже дальше мержить

    Но в любом случае это не гарантирует 100% наличие снипетов - либо ключ какой-то "не поисковый" (оч. редко, но бывает) либо IP серв. забанен во всех ПС (такое тоже бывает иногда :( )
     
    daronlad нравится это.
  3. daronlad

    daronlad Новичок

    14 апр 2016
    49
    0
    Мужской
    Спасибо за наводку, в итоге сделал так, может кому пригодиться:

    {% set snipz = [ bing_snippets(keyword,'en-US'), snippets(keyword), yahoo_snippets(keyword), duck_snippets(keyword,'en') ] %}
    {% for snippets in snipz|shuffle %}
    {% for snippet in snippets|shuffle %}
    {{snippet.title}}
    {{snippet.description}}
    {% endfor %}
    {% endfor %}


    понято, что это не 100 процентов, но если почистить функцию getSnippets от неработающих поисковиков searx, и скорректировать запрос к bing в getBingSnippets то работает хорошо
    google и duck у меня, кстати не парсит. С гуглом понятно - нужны прокси, а вот с даком хз, вроде верстка не менялась, запрос идет, но, как я понял - не распарсивает нормально страницу выдачи
     

Поделиться этой страницей