【问题标题】:Extract string from API request does not work从 API 请求中提取字符串不起作用
【发布时间】:2015-11-10 21:38:14
【问题描述】:

所以我正在尝试编写一个 .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 变量以及使用显示的脚本来运行它。没有结果。知道为什么吗?

谢谢。

【问题讨论】:

    标签: php api steam


    【解决方案1】:

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

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

    话虽如此,您可能还需要考虑这样一个事实,因为$obj-&gt;data-&gt;prices 是一个数组,它可能包含多个元素。因此,如果您真的想确定“最低价格”(正如您的变量所命名的那样),您可能需要遍历 $obj-&gt;data-&gt;prices 以查找数组中的哪个项目具有最低的 price 值。

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

    【讨论】:

    • 哦,我认为 $lowest_price=str_replace("$", "", $lowest_price);是不是写错了?它搜索 $ 但 API 结果不包含它。如果我错了,请纠正我。
    • @bagda391 我不会说这是“错误的”。如果 API 总是返回没有货币符号的价格,它就什么也不做。
    • 基本上没用。所以我可以删除它
    【解决方案2】:

    我建议使用 pdo 而不是 mysql,但这只是我自己

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多