从API请求中提取字符串不起作用

时间:2015-11-10 21:38:14

标签: php api steam

所以我试图编写一个.php文件,它应该从API调用中提取一个字符串(这里要提取的文本示例:https://gyazo.com/1efffc2360bd6aba15ece3437251aebd

代码:

<?php
$item = $_GET['item'];
$item = str_replace("\"", "", $item);
$item = str_replace("\'", "", $item);
$item = str_replace(" ", "%20", $item);
$item = str_replace("\\", "", $item);
@include_once ("pdocon.php");
$stmt = $dbh->prepare("SELECT * FROM items WHERE name=?");
$stmt->execute(array($item));
$rs = $stmt->fetch(PDO::FETCH_ASSOC);
if(!empty($rs)) {
        if(time()-$rs["lastupdate"] < 604800) die($rs["cost"]);
}
$link = "https://bitskins.com/api/v1/get_item_price/?api_key=(NOTSHOWINGYOUGUYSMYAPIKEY)&names=".$item;
$string = file_get_contents($link);
$json = $string;

$obj = json_decode($json);
//print $obj->{"median_price"}; // 12345
//$obj = json_decode($string);
if($obj->{'status'} == "success") die("notfound");
$lowest_price = $obj->{'price'};
$lowest_price=str_replace("$", "", $lowest_price);
$lowest_price = (float)($lowest_price);

//$stmt = $dbh->prepare("DELETE FROM items WHERE name=?");
//$stmt->execute(array($item));
$stmt = $dbh->prepare("UPDATE items SET `cost` = ?,`lastupdate` = ? WHERE `name` = ?");
$stmt->execute(array($lowest_price, time(), $item));
$stmt = $dbh->prepare("INSERT INTO items (`name`,`cost`,`lastupdate`) VALUES (?, ?, ?)");
$stmt->execute(array($item, $lowest_price, time()));
echo $lowest_price;
?>

问题是代码不提取我需要的字符串($ lower_price变量)。我尝试通过以哈希市场名称值格式自定义$ item变量并使用显示的脚本来运行它。没有结果。知道为什么吗?

感谢。

2 个答案:

答案 0 :(得分:2)

反序列化JSON后,您需要访问price值,如:

$lowest_price = $obj->data->prices[0]->price;

话虽如此,您可能还需要考虑这样一个事实,即$obj->data->prices是一个数组,它可能包含多个元素。因此,如果您确实想要确定“最低价格”(因为您的变量已命名),您可能需要迭代$obj->data->prices以查找数组中哪个项具有最低price值。< / p>

你没有问过这个问题,但你的SQL更新/插入(upsert)也有一些奇怪的逻辑。如果您的目的是更新现有记录,或者插入新记录(如果不存在),您可以考虑INSERT ... ON DUPLICATE KEY UPDATE类型的查询。

答案 1 :(得分:1)

我建议使用pdo而不是mysql,但那只是我