2015-07-10 2 views
0

Я ищу, чтобы сделать php-скрипт для обновления mysql каждый час из json-файла.Итак, у меня есть json-файл, как я могу вставить его в mysql?

API-интерфейс, что

http://backpack.tf/api/IGetMarketPrices/v1/?key=51f7eb704bd7b8231900000c&appid=730&format=json

Как я могу скопировать это вещи из JSON и поместить их в MySQL?

Я имею в виду что-то вроде этого

"AK-47 | Aquamarine Revenge (Battle-Scarred)": { 
    "last_updated": 1436569230, 
    "quantity": 34, 
    "value": 2268 
}, 

"AK-47 | Aquamarine Revenge (Factory New)": { 
    "last_updated": 1436569230, 
    "quantity": 21, 
    "value": 9386 
}, 
"AK-47 | Aquamarine Revenge (Field-Tested)": { 
    "last_updated": 1436569230, 
    "quantity": 55, 
    "value": 4968 
}, 
"AK-47 | Aquamarine Revenge (Minimal Wear)": { 
    "last_updated": 1436569230, 
    "quantity": 40, 
    "value": 6018 
}, 
"AK-47 | Aquamarine Revenge (Well-Worn)": { 
    "last_updated": 1436569230, 
    "quantity": 40, 
    "value": 3597 
}, 
"AK-47 | Black Laminate (Battle-Scarred)": { 
    "last_updated": 1436569230, 
    "quantity": 50, 
    "value": 345 
}, 
"AK-47 | Black Laminate (Factory New)": { 
    "last_updated": 1436569230, 
    "quantity": 8, 
    "value": 8593 
}, 
"AK-47 | Black Laminate (Field-Tested)": { 
    "last_updated": 1436569230, 
    "quantity": 141, 
    "value": 308 
}, 

Я хочу, чтобы это пойти в MySQL, как этот

enter image description here

Это то, что я получил до сих пор:

<?php 

$json = file_get_contents('http://backpack.tf/api/IGetMarketPrices/v1/?key=51f7eb704bd7b8231900000c&appid=730&format=json'); 
$obj = json_decode($json,true); 

//Database Connection 
require_once 'db.php'; 

/* insert data into DB */ 
foreach($obj as $item) { 
    mysql_query("INSERT INTO `cyberst_CSGO`.`items` (cost, lastupdate) 
    VALUES ('".$item['value']."'', '".$item['last_updated']."')"); 

} 
//database connection close 
mysql_close($con); 

//} 
?> 
+0

и что вы пробовали до сих пор? – Jeff

+1

использует цикл 'foreach', который проходит через массив и выполняет' INSERT' для каждого элемента. – Barmar

+0

@jeff http://pastebin.com/cKf1XvtS –

ответ

0

EDIT: этот код генерирует временный файл с разделителями табуляции и использует LOAD DATA IN FILE, чтобы вставить этот файл в базу данных, затем удаляет временный файл.

  1. Использование MySQLi - MySQL функции устарели в PHP теперь
  2. EDIT: cost = value * 0.01.
  3. Самый быстрый способ загрузить кучу данных в MySQL - LOAD DATA INFILE
  4. Я не тестировал импорт базы данных, но я неоднократно использовал этот метод, и он работает очень хорошо.
  5. Возможно, вам понадобится избежать $name $cost $row с mysqli_real_escape_string() или $conn->real_escape_string(). Я не проверял все ваши данные.

Вот PHP:

$json = file_get_contents('http://backpack.tf/api/IGetMarketPrices/v1/?key=51f7eb704bd7b8231900000c&appid=730&format=json'); 
$obj = json_decode($json,true); 

//open a temporary file to hold data 
$path = str_replace('\\','/',realpath(dirname(__FILE__))); 
$filename = time().'tmp.csv'; 
$filename = $path.'/'.$filename; 
$tmpfile = fopen($filename,'w+'); 

//data to loop through and write to temporary file 
$loopme = $obj['response']['items']; 

foreach($loopme as $name=>$row) { 
    //i'm guessing this is what cost is 
    $cost = $row['value'] * 0.01; 
    //write to our tmp file 
    fwrite($tmpfile,"$name\t$cost\t$row[last_updated]\n"); 
} 

// this is the fastest way to load large amounts of data into MySQL 
$sql = "LOAD DATA INFILE '$filename' 
    INTO TABLE `cyberst_CSGO`.`items` 
    FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'"; 

//run your mysql query 

//delete temporary file 
unlink($filename); 
+0

, поэтому php должен выглядеть так: http://pastebin.com/ZBctbUXW и файл базы данных, подобный этому http://pastebin.com/G82eEdPy? Или я делаю что-то неправильно, когда я использую эти коды, я получаю пустую страницу –

+0

bump ................... –

+0

Если данные загружаются, как ожидалось, в базе данных вероятно, работает так, как ожидалось. Как сейчас, в этом коде нет эхо-заявлений. Так выведите все, что захотите. Я не написал код для фактического запуска запроса –

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