【发布时间】:2022-01-12 13:00:22
【问题描述】:
我正在尝试制作一个 php 脚本,从他们的网站上抓取竞争对手产品的价格,我设法拥有一个带有 json 输出的功能性脚本,但是当我想将竞争对手的 url 设为变量时用户输入的,都横着走。
我知道我一定是搞砸了,这实际上是我的第一个 php 脚本。
这是“第一个版本”(有效的版本):
<?php
require 'C:\Users\dgayg\vendor\autoload.php';
use \GuzzleHttp\Client;
use \PHPHtmlParser\Dom;
use \CurrencyDetector\Detector;
$productPairs = [
'ASICS FUJITRABUCO LYTE' => [
'RunnerInn' => [
'url' => 'https://www.runnerinn.com/magasin-running/asics-chaussures-de-femme-asics-fujitrabuco-lyte/138541586/p',
'selectorPath' => '#total_dinamic'
],
'iRun' => [
'url' => 'https://www.i-run.fr/chaussures_homme/Trail_c15/Asics_m1/Asics-FujiTrabuco-Lyte-M_Asics_fiche_92311.html',
'selectorPath' => '.price'
],
'Zalando' => [
'url' => 'https://www.zalando.fr/asics-gel-trabuco-terra-chaussures-de-running-deep-sea-tealblazing-coral-as141a0r6-k11.html',
'selectorPath' => 'span.uqkIZw.ka2E9k.uMhVZi.dgII7d._6yVObe._88STHx.cMfkVL'
]
]
];
$detector = new Detector();
$comparison = [];
foreach ($productPairs as $productName => $pair) {
foreach($pair as $provider => $product) {
$client = new Client();
$parser = new Dom;
$request = $client->request('GET', $product['url']);
$response = (string) $request->getBody();
$parser->loadStr($response);
$price = $parser->find($product['selectorPath'])[0];
$priceString = $price->text;
$fmt = new NumberFormatter( 'fr_FR', NumberFormatter::CURRENCY );
$comparison[$productName][$provider] = [
'Prix' => $detector->getAmount($priceString)." ".$detector->getCurrency($priceString)
];
}
}
echo json_encode($comparison);
它的输出如下:{"ASICS FUJITRABUCO LYTE":{"RunnerInn":{"Prix":"120.26 EUR"},"iRun":{"Prix":"94 EUR"},"Zalando":{"Prix":"76.95 EUR"}}}
现在这是我将代码放入函数并尝试让用户输入 URL 的版本:
<?php
require 'C:\Users\dgayg\vendor\autoload.php';
use \GuzzleHttp\Client;
use \PHPHtmlParser\Dom;
use \CurrencyDetector\Detector;
function comparateur($site1, $site2) {
return
$productPairs = [
'ASICS FUJITRABUCO LYTE' => [
'iRun' => [
'url' => $site1,
'selectorPath' => '.price'
],
'Zalando' => [
'url' => $site2,
'selectorPath' => 'span.uqkIZw.ka2E9k.uMhVZi.dgII7d._6yVObe._88STHx.cMfkVL'
]
]
];
$detector = new Detector();
$comparison = [];
foreach ($productPairs as $productName => $pair) {
foreach($pair as $provider => $product) {
$client = new Client();
$parser = new Dom;
$request = $client->request('GET', $product['url']);
$response = (string) $request->getBody();
$parser->loadStr($response);
$price = $parser->find($product['selectorPath'])[0];
$priceString = $price->text;
$fmt = new NumberFormatter( 'fr_FR', NumberFormatter::CURRENCY );
$comparison[$productName][$provider] = [
'Prix' => $detector->getAmount($priceString)." ".$detector->getCurrency($priceString)
];
}
}
echo json_encode($comparison);
}
// echo comparateur(($_POST['site1']), ($_POST['site2']));
if (isset($_POST['site1']) && isset($_POST['site2'])) {
$result = comparateur($_POST['site1'], $_POST['site2']);
}
?>
<html>
<body>
<!-- <p>https://www.i-run.fr/chaussures_homme/Trail_c15/Asics_m1/Asics-FujiTrabuco-Lyte-M_Asics_fiche_92311.html</p>
<p>https://www.zalando.fr/asics-gel-trabuco-terra-chaussures-de-running-deep-sea-tealblazing-coral-as141a0r6-k11.html</p> -->
<form action="" method="post">
<p>iRun: <input type="text" name="site1" value="https://www.i-run.fr/chaussures_homme/Trail_c15/Asics_m1/Asics-FujiTrabuco-Lyte-M_Asics_fiche_92311.html" /></p>
<p>Zalando: <input type="text" name="site2" value="https://www.zalando.fr/asics-gel-trabuco-terra-chaussures-de-running-deep-sea-tealblazing-coral-as141a0r6-k11.html" /></p>
<p><input type="submit"/></p>
<?php if (isset($result)) { ?>
<h1> Result: <?php print_r($result);?></h1>
<?php } ?>
</body>
</html>
它的输出如下:Result: Array ( [ASICS FUJITRABUCO LYTE] => Array ( [iRun] => Array ( [url] => https://www.i-run.fr/chaussures_homme/Trail_c15/Asics_m1/Asics-FujiTrabuco-Lyte-M_Asics_fiche_92311.html [selectorPath] => .price ) [Zalando] => Array ( [url] => https://www.zalando.fr/asics-gel-trabuco-terra-chaussures-de-running-deep-sea-tealblazing-coral-as141a0r6-k11.html [selectorPath] => span.uqkIZw.ka2E9k.uMhVZi.dgII7d._6yVObe._88STHx.cMfkVL ) ) )
谁能告诉我我在哪里搞砸了,因为我真的想不通。
非常感谢!
【问题讨论】: