画像のURLの取得
function getImageURL(filename){
// スペース文字をアンダースコアに
filename = filename.replaceAll(" ", "_");
// Apiを呼び出す
return $.Deferred().promise( function() {
return new mw.Api().get( {
action: 'query',
titles: "File:" + filename,
prop: 'imageinfo',
iiprop: 'url'
});
}).then(function( data ){
// 受け取ったのはオブジェクトか?
if(typeof data === "object"){
// クエリの結果からpageIDを取得
var pageid = Object.keys( data.query.pages )[0];
// ファイルが存在する場合はpageID > -1
if (pageid > -1){
// URLを返す
return data.query.pages[ pageid ].imageinfo[0].url;
}
}
return "存在しないファイル名です";
}).fail(function(){
return "APIの呼び出しに失敗しました";
});
}
オーディオファイルの情報を取得
オーディオファイルの場合imageinfoではなくvideoinfoクエリーを使用する。
こちらは<audio/>タグで再生可能な必要情報も含める例。
function getVideInfo(filename) {
// メタデータ情報をObjectで返す関数
function meta2obj(value){
if(typeof value === 'object' && Array.isArray(value)){
var obj = {}, idx = 0;
value.forEach( function( v, i ){
if(v.hasOwnProperty("name") && v.hasOwnProperty("value")){
if(typeof v.name === 'number'){
obj[idx++] = {
id: v.name,
data: meta2obj(v.value)
};
} else {
obj[v.name] = meta2obj(v.value);
}
}
});
return obj;
}
return value;
}
// スペース文字をアンダースコアに
filename = filename.replaceAll(" ", "_");
// Apiを呼び出す
return $.Deferred().promise(function () {
return new mw.Api().get({
action: 'query',
titles: "File:" + filename,
prop: 'videoinfo',
viprop: 'url|mime|metadata'
});
}).then(function (data) {
// 受け取ったのはオブジェクトか?
if(typeof data === "object"){
// クエリの結果からpageIDを取得
var pageid = Object.keys( data.query.pages )[0];
// ファイルが存在する場合はpageID > -1
if (pageid > -1) {
var info = data.query.pages[ pageid ].videoinfo[0];
var metadata = meta2obj( info.metadata );
return {
// URL
url: info.url,
// MIME-Type + Cordec
type: info.mime.replace(/application/, "audio") + "; codecs='" + metadata.streams[0].data.type + "'"
};
}
}
return { error: "存在しないファイル名です" };
}).fail(function () {
return { error: "APIの呼び出しに失敗しました" };
});
}