我在使用Facebook Instant Articles SDK Transformer 从Image标签提取属性文本时遇到问题
我无法理解从alt属性中提取文本并用它制作标题所需的rules.json
//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>
我得到的是Uncaught错误:在第305行的/Facebook/InstantArticles/Transformer/Transformer.php中的字符串上调用成员函数hasChildNodes()。
不知怎的,图像得到了处理,标题得到了处理。我得到了正确的值,但随后它再次递归地进入传递提取的"alt"字符串的转换函数,它失败了,因为它需要HTML节点输入,而不是字符串。
关于此事的Facebook文档非常模糊,因此如果有人有处理Facebook即时文章的经验,请加入。
糟糕的文档可以在这里找到:
https://developers.facebook.com/docs/instant-articles/sdk/transformer/
https://developers.facebook.com/docs/instant-articles/sdk/transformer-rules
这里是SDK的主要提交者。
您可以在SimpleTransformerTest.php中查看我们的设置,它正好满足您的需求。您还可以使用任何测试来摆弄Transformer。
您做错的是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"
}
}
}
检查我是否使用了不同的策略,而不是直接转到ImageRule上的<img>
元素,我选择了<figure>
标记,这样我们就可以保持转换器完好无损。请注意,rules.json是自下而上应用的。
如果这能满足你的需要,请告诉我。