从 Wikipedia API 获取图像,除了 .svg 扩展名
Fetching Images from Wikipedia API except .svg extension
我正在尝试从我的 PHP 页面中的维基百科 API 中提取图像。但是我在 .svg 扩展名中得到了一些不必要的图像。有什么办法可以避免使用 .svg 扩展名或仅包含 api 请求中的 .jpg 扩展名?我可以看到一个名为 mediatype 的变量,但它不起作用。
我正在使用以下 api 请求 url:
https://en.wikipedia.org/w/api.php?&redirects=1&action=query&titles=Basilica%20Cistern&prop=images&format=json&imlimit=15
我得到的回复如下:
{
"continue": {
"imcontinue": "1365761|Peacock-eyed_column_in_the_Basilica_Cistern_in_Istanbul,Turkey,January_20,2014.jpg ",
"continue ": " || "
},
"query": {
"pages": {
"1365761": {
"pageid": 1365761,
"ns": 0,
"title": "Basilica Cistern",
"images": [{
"ns": 6,
"title": "File:20131203 Istanbul 269.jpg"
},
{
"ns": 6,
"title": "File:Archaeological site icon (red).svg"
},
{
"ns": 6,
"title": "File:Basilica Cistern.jpg"
},
{
"ns": 6,
"title": "File:Basilica Cistern Constantinople 2007.jpg"
},
{
"ns": 6,
"title": "File:Basilica Cistern Constantinople 2007 011.jpg"
},
{
"ns": 6,
"title": "File:Basilica cistern Art.jpg"
},
{
"ns": 6,
"title": "File:Carp at the Basilica Cistern, Istanbul 2007.JPG"
},
{
"ns": 6,
"title": "File:Commons-logo.svg"
},
{
"ns": 6,
"title": "File:Head of Medusa, Basilica Cistern, Constantinople 01.jpg"
},
{
"ns": 6,
"title": "File:Head of Medusa, Basilica Cistern, Constantinople 02.jpg"
},
{
"ns": 6,
"title": "File:Location map Istanbul.png"
}
]
}
}
}
}
PHP 代码:
function getResults($json){
$results = array();
$json_array = json_decode($json, true);
foreach($json_array['query']['pages'] as $page){
if(count($page['images']) > 0){
foreach($page['images'] as $image){
$title = str_replace(" ", "_", $image["title"]);
$imageinfourl = "https://en.wikipedia.org/w/api.php?&action=query&titles=".$title."&prop=imageinfo&iiprop=url&format=json";
$imageinfo = curl($imageinfourl);
$iamge_array = json_decode($imageinfo, true);
$image_pages = $iamge_array["query"]["pages"];
foreach($image_pages as $a){
$results[] = $a["imageinfo"][0]["url"];
}
}
}
}
return $results;
}
在 API 中看不到任何内容。我想也许你可以使用 imimages
参数,但它只对匹配整个 title
有用,例如
...&imimages=File%3A20131203%20Istanbul%20269.jpg
您可以过滤结果
// snip
if(count($page['images']) > 0) {
$jpgs = array_filter($page['images'], function($img) {
return strtolower(pathinfo($img['title'], PATHINFO_EXTENSION)) === 'jpg';
});
foreach($jpgs as $image) {
// and continue
或者,只需检查 foreach
循环中的扩展程序
foreach($page['images'] as $image) {
if (strtolower(pathinfo($img['title'], PATHINFO_EXTENSION)) !== 'jpg') {
continue;
}
我正在尝试从我的 PHP 页面中的维基百科 API 中提取图像。但是我在 .svg 扩展名中得到了一些不必要的图像。有什么办法可以避免使用 .svg 扩展名或仅包含 api 请求中的 .jpg 扩展名?我可以看到一个名为 mediatype 的变量,但它不起作用。
我正在使用以下 api 请求 url:
https://en.wikipedia.org/w/api.php?&redirects=1&action=query&titles=Basilica%20Cistern&prop=images&format=json&imlimit=15
我得到的回复如下:
{
"continue": {
"imcontinue": "1365761|Peacock-eyed_column_in_the_Basilica_Cistern_in_Istanbul,Turkey,January_20,2014.jpg ",
"continue ": " || "
},
"query": {
"pages": {
"1365761": {
"pageid": 1365761,
"ns": 0,
"title": "Basilica Cistern",
"images": [{
"ns": 6,
"title": "File:20131203 Istanbul 269.jpg"
},
{
"ns": 6,
"title": "File:Archaeological site icon (red).svg"
},
{
"ns": 6,
"title": "File:Basilica Cistern.jpg"
},
{
"ns": 6,
"title": "File:Basilica Cistern Constantinople 2007.jpg"
},
{
"ns": 6,
"title": "File:Basilica Cistern Constantinople 2007 011.jpg"
},
{
"ns": 6,
"title": "File:Basilica cistern Art.jpg"
},
{
"ns": 6,
"title": "File:Carp at the Basilica Cistern, Istanbul 2007.JPG"
},
{
"ns": 6,
"title": "File:Commons-logo.svg"
},
{
"ns": 6,
"title": "File:Head of Medusa, Basilica Cistern, Constantinople 01.jpg"
},
{
"ns": 6,
"title": "File:Head of Medusa, Basilica Cistern, Constantinople 02.jpg"
},
{
"ns": 6,
"title": "File:Location map Istanbul.png"
}
]
}
}
}
}
PHP 代码:
function getResults($json){
$results = array();
$json_array = json_decode($json, true);
foreach($json_array['query']['pages'] as $page){
if(count($page['images']) > 0){
foreach($page['images'] as $image){
$title = str_replace(" ", "_", $image["title"]);
$imageinfourl = "https://en.wikipedia.org/w/api.php?&action=query&titles=".$title."&prop=imageinfo&iiprop=url&format=json";
$imageinfo = curl($imageinfourl);
$iamge_array = json_decode($imageinfo, true);
$image_pages = $iamge_array["query"]["pages"];
foreach($image_pages as $a){
$results[] = $a["imageinfo"][0]["url"];
}
}
}
}
return $results;
}
在 API 中看不到任何内容。我想也许你可以使用 imimages
参数,但它只对匹配整个 title
有用,例如
...&imimages=File%3A20131203%20Istanbul%20269.jpg
您可以过滤结果
// snip
if(count($page['images']) > 0) {
$jpgs = array_filter($page['images'], function($img) {
return strtolower(pathinfo($img['title'], PATHINFO_EXTENSION)) === 'jpg';
});
foreach($jpgs as $image) {
// and continue
或者,只需检查 foreach
循环中的扩展程序
foreach($page['images'] as $image) {
if (strtolower(pathinfo($img['title'], PATHINFO_EXTENSION)) !== 'jpg') {
continue;
}