2016-11-06 90 views
0

我需要一個比How do I extract data from JSON with PHP?更簡單的解釋而且,我還需要從最後的PHP中的時間戳中剔除日期。使用Wikipedia API獲取PHP中的文章時間戳

能搶我通過維基百科JSON API「測試文章」元數據在PHP中這樣說:

<?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]])"}]}}}} 

但如何我得到和回聲/只打印時間戳的日期,即"timestamp":"2016-10-25T14:01:47Z"的「2016-10-25」,以及整個JSON字符串中的那個字符串?

我假設我需要先抓住整個字符串016-10-25T14:01:47Z,然後從中去掉T14:01:47Z

編輯11/25/16傑夫的答案很好,我把這個函數轉換成了一個簡碼,所以我可以把它插入到post/page內容中。

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的警告:

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功能來更改日期格式。這也適用於不同的頁面,只要我還可以在$ data行中查找並更改頁面標識(通過在數組中查找頁面標識)以及$ url中的頁面標題。 – BlueDogRanch

+0

這仍然很好,但我又邁出了一步,並把它變成了一個簡碼。但是現在我得到了一個PHP警告,我知道這並不嚴重,但我希望能夠適應它;我編輯了我的問題。 – BlueDogRanch