2015-11-10 7 views
0

Так что я пытаюсь кодировать .php файл, который нужно извлечь строку из API вызова (пример текста, который будет здесь добывали: https://gyazo.com/1efffc2360bd6aba15ece3437251aebd)Извлечение строки из запроса API не работает

Код:

<?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

После десериализации JSON, вам нужно будет получить доступ к price значение как:

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

При этом, вы можете также необходимо учитывать тот факт, что, поскольку $obj->data->prices является массивом, что он может содержать более одного элемента. Поэтому, если вы действительно хотите определить «самую низкую цену» (по мере того, как указана ваша переменная), вам, вероятно, потребуется перебрать более $obj->data->prices, чтобы найти, какой элемент в массиве имеет самое низкое значение price.

Вы не спрашивали об этом, но у вас также есть странная логика вокруг вашего SQL-обновления/вставки (upsert). Если вы намерены либо обновить существующую запись, либо вставить новую, если она не существует, вы можете рассмотреть тип запроса INSERT ... ON DUPLICATE KEY UPDATE.

+0

О, и я думаю, что $ LOWEST_PRICE = str_replace ("$", "", $ LOWEST_PRICE); неправильно написано неправильно? Он ищет $, но результат API не содержит его. Поправьте меня если я ошибаюсь. – bagda391

+0

@ bagda391 Я бы не сказал, что это «неправильно». Он просто ничего не делает, если API всегда будет возвращать цену без символа валюты. –

+0

в основном его бесполезно. поэтому я могу удалить его – bagda391

1

Я предлагаю получить с помощью PDO вместо MySQL, но это только мне

Смежные вопросы