我正在尝试创建一个Ebay项目模板,我可以动态地为我的所有项目使用,这些项目将在页面加载时从URL或其他源中提取项目ID,然后执行API查询以填充项目规范在我的模板中。如果有更简单的方法来填充这些字段,请随意分享,但目前我正在尝试从此URL中提取项目ID以进行测试。
物品ID为
281734025776
然后,我可以在API调用中使用ID来获取填写模板所需的信息。
提前感谢可以在此主题上显示的任何灯光。我无法找到这个特定问题的任何其他答案。
答案 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模式时,你所要做的就是更新这一小块正则表达式。否则,在使用函数进行字符串操作时(例如explode
,substr
,str_replace
等),您可能需要修改整个代码,甚至重写它新的。
现在几乎所有编程语言都支持某些正则表达式库(例如PCRE
,RE2
,JRegex
等)。这些库也称为正则表达式引擎。
享受;)