如何从URL或其他来源获取易趣物品编号

时间:2016-11-20 02:21:29

标签: javascript php ebay ebay-api

我正在尝试创建一个Ebay项目模板,我可以动态地为我的所有项目使用,这些项目将在页面加载时从URL或其他源中提取项目ID,然后执行API查询以填充项目规范在我的模板中。如果有更简单的方法来填充这些字段,请随意分享,但目前我正在尝试从此URL中提取项目ID以进行测试。

  

http://www.ebay.com/itm/4-American-Racing-TORQUE-THRUST-2-II-Wheels-Torq-17x8-VN5157866-5x4-5-4-75-BS/281734025776#rpdCntId

物品ID为

  

281734025776

然后,我可以在API调用中使用ID来获取填写模板所需的信息。

提前感谢可以在此主题上显示的任何灯光。我无法找到这个特定问题的任何其他答案。

2 个答案:

答案 0 :(得分:0)

在PHP中你可以这样做,这是针对许多Ebay链接测试的。

<强> Demo

<?php

$response = "http://www.ebay.com/itm/4-American-Racing-TORQUE-THRUST-2-II-Wheels-Torq-17x8-VN5157866-5x4-5-4-75-BS/281734025776#rpdCntId";
$display = explode('/', $response);
$iDvalue = $display[5];

if( strpos( $iDvalue, "#" ) !== false ) {
    $display = explode('#', $iDvalue);
}

else{
     $display = explode('?', $iDvalue);
}

$EbayIDValue = $display[0];
echo $EbayIDValue;
?>

答案 1 :(得分:0)

正则表达式的简单任务(使用PHP / JavaScript)。

非常简单的PHP解决方案(当你知道一个URL时)就是这样。

    $url = "http://www.ebay.com/itm/4-American-Racing-TORQUE-THRUST-2-II-Wheels-Torq-17x8-VN5157866-5x4-5-4-75-BS/281734025776#rpdCntId";
    preg_match('~/itm/.*?/(\d+)~i', $url, $m);
    $id = $m[1];

    echo $id; // outputs: 281734025776

正则表达式模式~/itm/.*?/(\d+)~i只扫描输入字符串'/itm/{SOMETHING}/{ROW_OF_DIGITS}'并仅提取{ROW_OF_DIGITS}部分(找到时)。模式结尾处的修饰符i是可选的。我用它来使搜索不区分大小写。

更优雅,更优选的解决方案是使用功能

    function GetEBayId($url) {
        if (is_string($url))
            preg_match('~/itm/.*?/(\d+)~i', $url, $m);
        return isset ($m[1]) ? $m[1] : false;
    }

当参数GetEBayId($url)是有效的eBay项目网址时,PHP函数$url会返回易趣项目的ID,否则会返回布尔值false。< / p>

现在您可以轻松地针对多个输入进行测试......

    $urls = array (
         "http://www.ebay.com/itm/2013-Harley-Davidson-Touring-/112204342340?forcerrptr=true&hash=item1a1fe66444:g:wDUAAOSwgZ1Xv6xq&item=112204342340",
         "http://www.ebay.com/itm/1956-Harley-Davidson-Touring-/122225573210?forcerrptr=true&hash=item1c75363d5a:g:dkMAAOSw0OBYKP9A&item=122225573210",
         "http://www.ebay.com/itm/2010-Harley-Davidson-Touring-/122233680189?forcerrptr=true&hash=item1c75b1f13d:g:HFIAAOSwNRdX9tcg&item=122233680189",
         "http://stackoverflow.com/",
         "http://www.ebay.com/itm/2004-Harley-Davidson-Touring-/132002578508?forcerrptr=true&hash=item1ebbf7804c:g:aOEAAOSwal5YKPHd&item=132002578508",
         "http://www.ebay.com/itm/2015-Harley-Davidson-Touring-/132002811098?forcerrptr=true&hash=item1ebbfb0cda:g:AM4AAOSwB09YD2Wv&item=132002811098"
    );

    foreach ($urls as $url) 
        var_dump ( GetEBayId($url) );

以上示例输出:

string '112204342340' (length=12)
string '122225573210' (length=12)
string '122233680189' (length=12)
boolean false
string '132002578508' (length=12)
string '132002811098' (length=12)

使用JavaScript正则表达式函数(例如String.match())时,请使用此模式提取易趣项目的ID。

/\/itm\/.*?\/(\d+)/i

如果您想确保输入网址来自 ebay.com 域,请改用以下表达式。

  • ~^(?:https?://)?(?:www\.)?ebay\.com/itm/.*?/(\d+)~i for PHP
  • /^(?:https?:\/\/)?(?:www\.)?ebay\.com\/itm\/.*?\/(\d+)/i for JavaScript

注意:这些模式通过www.http协议接受 ebay.com 域中带有或不带https前缀的网址(或者没有)。 JavaScript正则表达式模式适用于PHP,但反之亦然。与JavaScript一起使用的模式分隔符/对PHP也有效,但分隔符~对JavaScript无效(JS要求使用正斜杠作为分隔符; PHP也接受其他一些字符)。< / p>

使用上述表达式,只有以下网址模式才会被视为有效。

  • http://www.ebay.com/itm/...
  • https://www.ebay.com/itm/...
  • http://ebay.com/itm/...
  • https://ebay.com/itm/...
  • www.ebay.com/itm/...
  • ebay.com/itm/...

为什么REGEX优于其他解决方案?

在对文本匹配某些模式时,正则表达式是非常强大的工具。他们更难以进行调试,但它们使代码更简单,更易读。在这个特定的情况下,当(和如果)eBay决定改变他们的url模式时,你所要做的就是更新这一小块正则表达式。否则,在使用函数进行字符串操作时(例如explodesubstrstr_replace等),您可能需要修改整个代码,甚至重写它新的。

现在几乎所有编程语言都支持某些正则表达式库(例如PCRERE2JRegex等)。这些库也称为正则表达式引擎。

享受;)