使用 Wikipedia API 在 PHP 中获取文章时间戳
Get article timestamp in PHP with Wikipedia API
我需要一个比 更简单的解释而且,我还需要在最后 PHP.
我可以通过维基百科 JSON API 在 PHP 中获取 "Test article" 元数据:
<?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]])"}]}}}}
但是我如何获取 echo/print 时间戳中的日期,即 "timestamp":"2016-10-25T14:01:47Z"
中的“2016-10-25”,以及整个 JSON 中的那个字符串字符串?
我想我需要先获取完整的字符串 016-10-25T14:01:47Z
,然后从中删除 T14:01:47Z
。
编辑 2016 年 11 月 25 日 Jeff 的回答很有效,我将该函数转换为简码,以便可以将其插入 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&prop=revisions&rvlimit=1&format=json):
failed to open stream: no suitable wrapper could be found in
/functions/shortcodes.php
这是我的简码还是原始函数的问题?
json_decode
将 JSON 转换为原生 PHP 数组以便于操作。
print_r
将递归打印数组,以便您可以轻松地手动读取它以发现文档的结构。
DateTime::format
对转换 date/time 格式很有用。
<?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
我需要一个比
我可以通过维基百科 JSON API 在 PHP 中获取 "Test article" 元数据:
<?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]])"}]}}}}
但是我如何获取 echo/print 时间戳中的日期,即 "timestamp":"2016-10-25T14:01:47Z"
中的“2016-10-25”,以及整个 JSON 中的那个字符串字符串?
我想我需要先获取完整的字符串 016-10-25T14:01:47Z
,然后从中删除 T14:01:47Z
。
编辑 2016 年 11 月 25 日 Jeff 的回答很有效,我将该函数转换为简码,以便可以将其插入 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&prop=revisions&rvlimit=1&format=json):
failed to open stream: no suitable wrapper could be found in
/functions/shortcodes.php
这是我的简码还是原始函数的问题?
json_decode
将 JSON 转换为原生 PHP 数组以便于操作。print_r
将递归打印数组,以便您可以轻松地手动读取它以发现文档的结构。DateTime::format
对转换 date/time 格式很有用。
<?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