Извлечение подписи из изображения с помощью Facebook PHP SDK Transformer - PullRequest
0 голосов
/ 12 февраля 2019

У меня проблемы с извлечением текста атрибута из тега изображения с помощью SDK-трансформера для мгновенных статей Facebook

Я не могу выяснить rules.json, необходимый для извлечения текста из атрибута alt и создания из него надписи.

//MARKUP
<img src="https://upload.wikimedia.org/wikipedia/commons/8/84/Example.svg" alt="Foto By: Bla Bla"/>

//RULES.JSON
{
   "class": "ImageRule",
   "selector" : "img",
   "properties" : 
   {
      "image.url" : 
      {
         "type" : "string",
         "selector" : "img",
         "attribute": "src"
      },
      "image.caption" : 
      {
         "type" : "string",
         "selector" : "img",
         "attribute" : "alt"
      }
   }
}

Expected results are Facebook Instant Article compliant markup like:
<figure>
    <img src="https://upload.wikimedia.org/wikipedia/commons/8/84/Example.svg"/>
    <figcaption>Foto By: Bla Bla</figcaption>
</figure>

То, что я получаю, является необученной ошибкой: вызов функции-члена hasChildNodes () для строки в /Facebook/InstantArticles/Transformer/Transformer.php в строке 305.

Каким-то образом изображение обрабатывается, заголовок обрабатывается, я получаю правильное значение, но затем он рекурсивно снова входит в функцию преобразования, передавая извлеченную строку «alt», и происходит сбой, поскольку он ожидает, что ввод узла HTML не является строкой.

Документация Facebook навопрос крайне расплывчатый, поэтому, если у кого-то есть опыт работы с мгновенными статьями Facebook, пожалуйста, просим вас ознакомиться с

дерьмовыми документами:
https://developers.facebook.com/docs/instant-articles/sdk/transformer/
https://developers.facebook.com/docs/instant-articles/sdk/transformer-rules

1 Ответ

0 голосов
/ 20 февраля 2019

основной коммиттер SDK здесь.

Вы можете проверить наши настройки в SimpleTransformerTest.php , который точно соответствует вашим потребностям.Вы также можете использовать любые тесты, чтобы поиграться с Трансформатором.

То, что вы делаете неправильно, это селектор для image.caption, который должен иметь тип element.

Для вашегоRules.json это должно выглядеть так:

    {
        "class": "CaptionRule",
        "selector" : "//img[@alt]",
        "properties" : {
            "caption.default": {
                "type": "string",
                "selector": "img",
                "attribute": "alt"
            }
        }
    },
    {
       "class": "ImageRule",
       "selector" : "figure",
       "properties" : 
       {
          "image.url" : 
          {
             "type" : "string",
             "selector" : "img",
             "attribute": "src"
          },
          "image.caption" : 
          {
             "type" : "element",
             "selector" : "img"
          }
       }
    }

Убедитесь, что я использую другую стратегию, вместо того, чтобы идти прямо к элементу <img> в ImageRule, я выбираю тег <figure>,тогда мы сможем сохранить трансформатор в целости и сохранности.Обратите внимание, что rules.json применяется снизу вверх.

Дайте мне знать, если это соответствует вашим потребностям.

...