【问题标题】:Need help extracting image src url from a pinterest rss feed需要帮助从 pinterest rss 提要中提取图像 src url
【发布时间】:2012-08-20 18:33:48
【问题描述】:

基本上,我正在尝试将 Pinterest 提要小部件添加到 ExpressionEngine 网站。我发现 this tutorial 非常有用,但问题是我无法使用引用的标签剥离插件,因为我正在帮助的网站使用 ExpressionEngine 1x,而该插件仅适用于 2x。

如果您查看 Pinterest rss 源的来源,例如:http://pinterest.com/amazon/feed.rss,您会看到在 <description> 标签内是 Pinterest 图片的 url,以及 pin 的标题、标签和 pin 的相对链接在 pinterest 上。我希望能够仅提取“img src”之后双引号之间的值。

本教程还使用了一个名为 Magpie 的插件,该插件已经加载到网站上,所以我很好。

理想情况下,我希望我的代码看起来像这样:

{exp:magpie url="http://pinterest.com/amazon/feed.rss" parse="inward"
refresh="720" limit="5"} {items}<a href="{link}" target="_blank"><img
src="<?php code-to-grab-the-img-src->{description} ?>"
alt="{title}"></a>{/items} {/exp:magpie}

显然“code-to-grab-the-img-src->{description}”不起作用,所以我正在寻找一个功能或其他东西。如何告诉 Magpie 在不使用 SuperGeekery Tag Stripper 插件的情况下仅提取 img src 值?

谢谢!

【问题讨论】:

    标签: rss expressionengine pinterest magpie


    【解决方案1】:

    我建议构建一个简单的插件来处理这个问题,您可以使用与 my other answer 相同的正则表达式(由于无法将 {description} 内容导入 PHP 导致失败)。

    这是您的插件的外观:

    <?php
    
    $plugin_info = array(
      'pi_name' => 'Get Pinterest Image',
      'pi_version' => '1.0',
      'pi_author' => 'Derek Hogue',
      'pi_author_url' => 'http://amphibian.info',
      'pi_description' => 'Grabs the image URL from a Pinterest RSS feed description element.',
      'pi_usage' => Get_pinterest_image::usage()
      );
    
    class Get_pinterest_image
    {
    
    var $return_data = "";
    
      function Get_pinterest_image()
      {
        global $TMPL;
        $fallback = $TMPL->fetch_param('fallback_image');
        preg_match("/src=\"(.+)(?=\"&gt;&lt;\/a&gt;)/ui", $TMPL->tagdata, $matches);
        $this->return_data = (!empty($matches)) ? $matches[1] : $fallback;
      }
    
      function usage()
      {
      ob_start(); 
      ?>
        {exp:get_pinterest_image fallback="/path/to/fallback_image.png"}{description}{/exp:get_pinterest_image}
    
        Where {description} is the "description" XML node from the Pinterest RSS feed (likely parsed via the Magpie plugin).
      <?php
      $buffer = ob_get_contents();
      ob_end_clean(); 
      return $buffer;
      }  
    
    }
    
    ?>
    

    根据 EE 约定,这将被命名为 get_pinterest_image.php,并进入您的 /plugins/ 文件夹。然后在您的模板中:

    {exp:magpie url="http://pinterest.com/amazon/feed.rss" refresh="720" limit="5" parse="inward"}
        {items}
            <a href="{link}" target="_blank"><img src="{exp:get_pinterest_image fallback="/path/to/fallback_image.png"}{description}{/exp:get_pinterest_image}" alt="{title}" /></a>
        {/items}
    {/exp:magpie}
    

    【讨论】:

    • 我很抱歉,但你可能会说我只是学到了很多。我应该在插件文件中的哪个位置粘贴正则表达式?我尝试了几个不同的地方,但是当我刷新以查看是否可以看到我新创建的插件时,无法让 EE 中的插件管理器不会爆炸。你能告诉我这个应该放在哪个区域吗?你帮了大忙,谢谢。
    • 在我将插件 ftp 到 /sys/plugins/ 目录后刷新插件管理器时更清楚,我得到“不允许直接脚本访问”
    • 尤里卡!!!进行了一些修改。我不得不打广告“pi”。到插件文件,以便我的插件管理器识别它,所以 pi.get_pinterest_image.php。我还将您的正则表达式编辑为 '/src="([^"]+)"/' ,这是我从这个 Wordpress Pinterest 小部件中窃取的:plugins.svn.wordpress.org/mg-pinterest-strips-widget/trunk/…。非常感谢!!
    【解决方案2】:

    当然 - 在输出上启用 PHP,然后使用这个正则表达式:

    {exp:magpie url="http://pinterest.com/amazon/feed.rss" refresh="720" limit="5"}
    {items}
    <?php
        preg_match("/src=\"(.+)(?=\"&gt;&lt;\/a&gt;)/ui", '{description}', $matches);
        $src = (!empty($matches)) ? $matches[1] : '/path/to/default-image.png';
    ?>
        <a href="{link}" target="_blank"><img src="<?php echo $src; ?>" alt="{title}"></a>
    {/items}
    {/exp:magpie}
    

    此代码包含另一个图像的后备,以防由于某种原因无法找到图像 src

    未经测试,但应该可以。

    【讨论】:

    • 嗯,我得到 5 个损坏的图像框,因为 img src 是 /path/to/default-image.png 的后备,它不存在(还)。链接和 alt 标记正常工作。任何猜测为什么?非常感谢!我需要了解 rexeg。
    • 抱歉,模式不够具体。试试更新的代码?
    • 不,仍然给我默认的图像路径。我在这个测试器上运行了你的正则表达式和一个 标记的值:spaweditor.com/scripts/regex/index.php,结果是一个空数组。非常感谢你帮我解决这个问题。
    • 确认,抱歉,忘记转义正斜杠。再试一次!
    • 还是没有运气。我认为实际上将输入字符串从 {description} 中拉出时遇到了麻烦。我尝试使用非常简单的正则表达式来填充 src="" ,但无济于事。您不能在其中使用正则表达式来深入到 XML 对象的特定部分,这可能是 Magpie 的一个限制吗?
    【解决方案3】:

    RSS 解析很难!如果您愿意稍微复杂一点并将提要内容带入 EE,那么我对仅限 EE2 的 DataGrab 很幸运,因此您可能会从免费的 EE1 前身中找到一些快乐:FeedGrab

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      相关资源
      最近更新 更多