Простите меня, если на это будет дан ответ. Я видел различные ответы на данные json и openlibrary
До сих пор данные json, которые я получаю от openlibrary, и данные json, которые я вижу в примерах, кажутся разными в формате
Мой вопрос: использовать php (или javascript), как я могу получить данные в массив или indavidual переменные и поместить их в базу данных mysql.
Название: Плитка книги Автор: Автор книги Isbn: Номер Isbn и т. Д.
а затем поместить эти данные в базу данных mysql
[Обновить 2015-011-07] Теперь я получил ответ, я обновил код ниже, чтобы показать, как это должно быть. Следующее запросит json-данные из openlibrary, и оно будет возвращено в виде строки. номер ISBN в $ url предназначен только для целей тестирования, поэтому обязательно замените его.
<?php $url ="https://openlibrary.org/api/books?bibkeys=ISBN:0789721813&jscmd=details&format=json"; $headers = array( "Content-type: application/json;charset=\"utf-8\"", "Accept: text/xml", "Cache-Control: no-cache", "Pragma: no-cache", "SOAPAction: \"run\"" ); $cURL = curl_init(); curl_setopt($cURL, CURLOPT_URL, $url); curl_setopt($cURL, CURLOPT_HTTPGET, true); curl_setopt($cURL, CURLOPT_HTTPHEADER, $headers); curl_setopt($cURL, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($cURL); foreach (json_decode($result, true) as $book) { printf("\nISBN: %s\ttitle: %s\tauthor: %s", $book['details']['isbn_10'][0], $book['details']['title'], $book['details']['contributions'][0]); } curl_close($cURL); ?>
Когда страница загружается, отображается следующее:
ISBN: 0789721813 title: Red Hat Linux author: Hellums, Duane
По умолчанию cURL
автоматически выводит передачу. В вашем коде отображается только содержимое json, но curl_exec($cURL)
возвращает 1 или 0, если что-то не так, а не содержимое json. Вот почему вы не можете получить массив или объект, который вы хотите с помощью json_decode
, строка JSON не находится в переменной $result
.
Чтобы получить то, что вы хотите, вам нужно установить другую опцию cURL:
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, 1);
Таким образом curl_exec($cURL)
вернет передачу как строку и больше не будет выводить ее автоматически.
См. Руководство по PHP о возвращаемых значениях curl_exec
.
Тогда вам нужно использовать только json_decode
:
foreach (json_decode($result, true) as $book) { printf("\nISBN: %s\ttitle: %s\tauthor: %s", $book['details']['isbn_10'][0], $book['details']['title'], $book['details']['contributions'][0]); }
это может помочь
echo 'title : '.$book['details']['title'].'<br />'; echo 'subtitle : '.$book['details']['subtitle'].'<br />'; echo 'lc_classifications : '.$book['details']['lc_classifications'][0].'<br />'; echo 'latest_revision : '.$book['details']['latest_revision'].'<br />'; echo 'edition_name : '.$book['details']['edition_name'].'<br />'; echo 'languages : '.$book['details']['languages'][0]['key'].'<br />'; echo 'subjects : '.$book['details']['subjects'][0].'<br />'; echo 'location : '.$book['details']['location'][0].'<br />'; echo 'type : '.$book['details']['type']['key'].'<br />'; echo 'publish_country : '.$book['details']['publish_country'].'<br />'; echo 'other_titles : '.$book['details']['other_titles'][0].'<br />'; echo 'publishers : '.$book['details']['publishers'][0].'<br />'; echo 'last_modified : '.$book['details']['last_modified']['value'].'<br />'; echo 'key : '.$book['details']['key'].'<br />'; echo 'authors : '.$book['details']['authors'][0]['name'].'<br />'; echo 'publish_places : '.$book['details']['publish_places'][0].'<br />'; echo 'pagination : '.$book['details']['pagination'].'<br />'; echo 'works : '.$book['details']['works'][0]['key'].'<br />'; echo 'isbn 10 : '.$book['details']['isbn_10'][0].'<br />';