作为一个编程外行来说,在他人的代码上进行小幅度的修改或许还可以,一旦需要实现新的功能那简直就是一场灾难。
最早我在心百科中收录书籍的目的有两个,一个是为了方便引用和记录笔记,一个就是为了实现个人藏书的记录。自打晒书房APP下架之后就再没有找到合适的工具,即便有也用起来不那么放心了,天知道哪天又关了呢?幸幸苦苦地扫了那么多书,结果说不能用就不能用。
用自己的网站哪怕有一天被迫关了,数据仍然可以迁移到自己本地的服务器上,所以我一直希望能够实现该功能。而思路就是利用小工具Gadget,这样的话用不用这功能可以根据自己需要来决定。
从维基百科中搜索到的小工具中有一个收藏的,但它针对的主要是图片。主要思路是看到某张图片觉得还不错,那么点击收藏链接后就会添加到该用户的某个子目录下,并以Gallery的方式显示。从原理上来说,貌似跟我要实现的效果差不多,无非它是图片我是图书,它是file命名空间,我是图书命名空间,我也巴不得显示图书封面。
源代码我就不贴了,就放个链接吧。
结果还是想简单了。光获取图书页面中的图片就费了我好大周章,最后还是在ChatGPT的辅助下完成了封面的显示。
在MediaWiki中,如果要获得某个条目中的图片,最简单的方式就是通过API,而官方并没有输出头图的API可用。
现成方案中,导航Popup小工具中能够抓取条目中的头图,但是要从其中分离出部分代码来,就我目前的水平来说有点难。还有一种就是通过PageImages扩展提供的API,它能够很好地支持头图的调用。官方示例如下:
api.php?action=query&prop=pageimages&titles=Lightbox_demo
返回结果:
{
"query": {
"normalized": [
{
"from": "Lightbox_demo",
"to": "Lightbox demo"
}
],
"pages": {
"162510": {
"pageid": 162510,
"ns": 0,
"title": "Lightbox demo",
"thumbnail": {
"source": "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e9/Crystal_Clear_app_korganizer.png/50px-Crystal_Clear_app_korganizer.png",
"width": 50,
"height": 50
},
"pageimage": "Crystal_Clear_app_korganizer.png"
}
}
}
}
pageimage中的就是我们想要的结果。
按照API的js写法,放到网页调试的控制台中试一下:
var image = {
action: 'query',
prop: 'pageimages',
formatversion: 2 ,
titles: mw.config.get('wgPageName'),
format: 'json'
},
api = new mw.Api();
api.get( image ).done( function ( data ) {
var pages = data.query.pages;
console.log(pages[0].pageimage);
} );
OK,图片信息被返回了。那怎么加入到原有的代码中呢?尤其是把数据赋给全局变量。ChatGPT告诉我,“API请求是异步的,可能需要适当处理异步操作”,完全没概念啊。虽然它也给了几个解决办法,但怎么应用到我具体的案例中呢?干脆扔给它处理算了。
结果倒还真在藏书页面中能够显示图书封面了,只不过链接和显示文字都是图片名。
到这里,我已经不知道怎么引导ChatGPT,或者说它可能也无能为力了。不过它还算是帮了我一个大忙。
哪位好心人要是正好看到,同时也懂编程的,不妨给些指导,多谢!
2 条评论
监视列表就是一个收藏功能
监视列表是全局的,这样的话所有东西都会混在一起,而我需要的则是特定的内容,并且还要有图片展示,所以就比较麻烦。