2016-11-06 7 views
0

Мне нужно более простое объяснение, чем How do I extract data from JSON with PHP? И мне также нужно выплескать дату от метки времени в финальном PHP.Получить временную метку статьи в PHP с помощью API Википедии

я могу захватить "Test статью" метаданных в PHP через API Википедии JSON таким образом:

<?php 
$json_string = file_get_contents("https://en.wikipedia.org/w/api.php?action=query&titles=Test_article&prop=revisions&rvlimit=1&format=json"); 
print $json_string; 
?> 

Который дает мне это:

{"continue":{"rvcontinue":"20161025140129|746140638","continue":"||"},"query": 
{"normalized":[{"from":"Test_article","to":"Test article"}],"pages":{"29005947": 
{"pageid":29005947,"ns":0,"title":"Test article","revisions": 
[{"revid":746140679,"parentid":746140638,"user":"Theblackmidi72", 
"timestamp":"2016-10-25T14:01:47Z","comment":"Undid revision 746140638 by 
[[Special:Contributions/Theblackmidi72|Theblackmidi72]] ([[User 
talk:Theblackmidi72|talk]])"}]}}}} 

Но как я получаю и эхо/печатать только дату с отметки времени, то есть «2016-10-25» от "timestamp":"2016-10-25T14:01:47Z", и только эту строку из всей строки JSON?

Предполагаю, что мне нужно сначала захватить полную строку 016-10-25T14:01:47Z, а затем снять с нее T14:01:47Z.

Редактировать 11/25/16 Ответ Джеффа отлично работает, и я преобразовал функцию в короткий код, чтобы я мог вставить его в сообщение/содержание страницы.

function wikipedia_article_date() { 

$url = "https://en.wikipedia.org/w/api.php?action=query&titles=Test_article&prop=revisions&rvlimit=1&format=json"; 

$data = json_decode(file_get_contents($url), true); 
$date = $data['query']['pages']['746140638']['revisions'][0]['timestamp']; 

$date = new DateTime($date); 
return $date->format('m-d-Y'); 
} 

add_shortcode('article_date','wikipedia_article_date'); 

Но теперь я получаю PHP Warning:

file_get_contents(https://en.wikipedia.org/w/api.php?action=query& 
amp;titles=Test_article&amp;prop=revisions&amp;rvlimit=1&amp;format=json): 
failed to open stream: no suitable wrapper could be found in 
/functions/shortcodes.php 

этот вопрос с моим шорткодом или с оригинальной функции?

+2

Возможный дубликат [Как извлечь данные из JSON с PHP?] (Http://stackoverflow.com/questions/29308898/how-do-i-extract-data-from-json-with-php) –

+0

Хотя вы сказали, что связанный вопрос не достаточно прост, он является всеобъемлющим. Все, что вам нужно знать, это ссылки на элементы объектов и массивы, например '$ foo = $ foo_object-> bar' или' $ foo = $ foo_array ['bar'] '. Наиболее наивным удалением данных, которое вы можете сделать, будет '$ foo = date ('Y-m-d', strtotime ($ timestamp));' – moopet

ответ

4
  1. json_decode преобразует JSON в собственный массив PHP для удобства манипуляции.

  2. print_r будет рекурсивно печатать массив, чтобы вы могли легко прочитать его вручную, чтобы обнаружить структуру документа.

  3. DateTime::format полезен для преобразования форматов даты и времени.


<?php 

$url = "https://en.wikipedia.org/w/api.php?action=query&titles=Test_article&prop=revisions&rvlimit=1&format=json"; 

$data = json_decode(file_get_contents($url), true); 

// this will show you the structure of the data 
//print_r($data); 

// just the value in which you're interested 
$date = $data['query']['pages']['29005947']['revisions'][0]['timestamp']; 

// cast to the format you want 
$date = new DateTime($date); 
echo $date->format('Y-m-d'); 

2016-10-25

+0

Спасибо, это отлично работает. Интересно, как данные захватываются, и я использовал print_r для просмотра массива. А также функция PHP для изменения формата даты. Это также отлично подходит для разных страниц, если я также нахожу и изменяю идентификатор страницы в строке данных $ (просматривая массив для идентификатора страницы), а также заголовок страницы в $ url. – BlueDogRanch

+0

Это все еще отлично работает, но я сделал еще один шаг и превратил его в короткий код. Но теперь я получаю предупреждение PHP, которое, как я знаю, несерьезно, но я бы хотел быть в состоянии его подогнать; Я редактировал свой вопрос. – BlueDogRanch