对齐zotero-chinese格式,去掉release内xpiInfo字段。
This commit is contained in:
parent
6bd1505b1f
commit
a822b3cafa
95
README.md
95
README.md
@ -9,12 +9,35 @@ This is a script repository for scraping Zotero addon collections for [Zotero](h
|
||||
The script utilizes the GitHub API and GitHub Actions to automatically scrape and parse addon information from the [addons](addons) folder, and publish to [`publish`](https://github.com/syt2/zotero-addons-scraper/blob/publish/addon_infos.json) branch and the latest release every day.
|
||||
|
||||
## Contributing New Addons
|
||||
If you have new add-ons to parse, add the json information of the add-on with the name format of `repo.replace('/', '#').json` in the [addons](addons) folder with the format
|
||||
If you have a new add-on to add, add an add-on information file in the [addons](addons) folder.
|
||||
|
||||
> typically, name it with `repo.replace('/', '#').json`
|
||||
>
|
||||
> If an add-on has different IDs for different Zotero versions, split them into multiple JSON files with different filename.
|
||||
|
||||
The file format should be as follows:
|
||||
|
||||
``` json
|
||||
{
|
||||
"id": "zoteroAddons@ytshen.com",
|
||||
"name": "Zotero Addons",
|
||||
"repo": "syt2/zotero-addons",
|
||||
"releases": [
|
||||
{
|
||||
"targetZoteroVersion": "7",
|
||||
"tagName": "latest"
|
||||
},
|
||||
{
|
||||
"targetZoteroVersion": "6",
|
||||
"tagName": "0.6.0-3"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
or
|
||||
``` json
|
||||
{
|
||||
"repo": "syt2/zotero-scipdf",
|
||||
"releases": [
|
||||
{
|
||||
"targetZoteroVersion": "7",
|
||||
@ -24,72 +47,6 @@ If you have new add-ons to parse, add the json information of the add-on with th
|
||||
}
|
||||
```
|
||||
|
||||
## Addon Information Format
|
||||
## Generated Format
|
||||
The output format for add-on information follows the format specified in [zotero-chinese/zotero-plugins](https://github.com/zotero-chinese/zotero-plugins).
|
||||
|
||||
The output format for add-on information follows the format specified in [zotero-chinese/zotero-plugins](https://github.com/zotero-chinese/zotero-plugins), which is as follows:
|
||||
```ts
|
||||
export interface PluginInfo {
|
||||
id?: string;
|
||||
/**
|
||||
* 插件名称
|
||||
*/
|
||||
name: string;
|
||||
/**
|
||||
* 插件仓库
|
||||
*
|
||||
* 例如:northword/zotero-format-metadata
|
||||
*
|
||||
* 注意前后均无 `/`
|
||||
*/
|
||||
repo: string;
|
||||
/**
|
||||
* 插件的发布地址信息
|
||||
*/
|
||||
releases: Array<{
|
||||
/**
|
||||
* 当前发布版对应的 Zotero 版本
|
||||
*/
|
||||
targetZoteroVersion: string;
|
||||
/**
|
||||
* 当前发布版对应的下载通道
|
||||
*
|
||||
* `latest`:最新正式发布;
|
||||
* `pre`:最新预发布;
|
||||
* `string`:发布对应的 `git.tag_name`;
|
||||
* 注意 `git.tag_name` 有的有 `v` 而有的没有,可以通过发布链接来判断
|
||||
*/
|
||||
tagName: "latest" | "pre" | string;
|
||||
|
||||
currentVersion?: string;
|
||||
xpiDownloadUrl?: {
|
||||
github: string;
|
||||
gitee: string;
|
||||
ghProxy: string;
|
||||
jsdeliver: string;
|
||||
kgithub: string;
|
||||
};
|
||||
releaseData?: string;
|
||||
downloadCount?: number;
|
||||
assetId?: number;
|
||||
|
||||
/**
|
||||
* 从插件中解析的信息
|
||||
*
|
||||
* TODO:后续视 zotero-chinese/zotero-plugins 的情况更新
|
||||
*/
|
||||
xpiInfo?: {
|
||||
id?: string;
|
||||
name?: string;
|
||||
currentVersion?: string;
|
||||
};
|
||||
}>;
|
||||
|
||||
description?: string;
|
||||
star?: number;
|
||||
author?: {
|
||||
name: string;
|
||||
url: string;
|
||||
avatar: string;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
@ -19,39 +19,29 @@ star = "star"
|
||||
author = "author"
|
||||
url = "url"
|
||||
avatar = "avatar"
|
||||
xpiInfo = "xpiInfo"
|
||||
|
||||
|
||||
# from https://github.com/zotero-chinese/zotero-plugins/blob/main/src/plugins.ts
|
||||
# export interface PluginInfo {
|
||||
# /**
|
||||
# * 插件名称
|
||||
# */
|
||||
# name: string;
|
||||
# /**
|
||||
# * 插件仓库
|
||||
# *
|
||||
# * 例如:northword/zotero-format-metadata
|
||||
# *
|
||||
# * 注意前后均无 `/`
|
||||
# */
|
||||
# // plugin id
|
||||
# id?: string;
|
||||
#
|
||||
# // plugin name
|
||||
# name?: string;
|
||||
#
|
||||
# // plugin repository address on GitHub
|
||||
# // e.g., syt2/zotero-addons
|
||||
# repo: string;
|
||||
# /**
|
||||
# * 插件的发布地址信息
|
||||
# */
|
||||
#
|
||||
# // plugin releases information
|
||||
# releases: Array<{
|
||||
# /**
|
||||
# * 当前发布版对应的 Zotero 版本
|
||||
# */
|
||||
# // Zotero version corresponding to current release
|
||||
# targetZoteroVersion: string;
|
||||
# /**
|
||||
# * 当前发布版对应的下载通道
|
||||
# *
|
||||
# * `latest`:最新正式发布;
|
||||
# * `pre`:最新预发布;
|
||||
# * `string`:发布对应的 `git.tag_name`;
|
||||
# * 注意 `git.tag_name` 有的有 `v` 而有的没有,可以通过发布链接来判断
|
||||
# */
|
||||
#
|
||||
# // Download channel corresponding to the current release version
|
||||
# // `latest`: Latest stable release
|
||||
# // `pre`: Latest pre-release
|
||||
# // `string`: Corresponding to the `git.tag_name` of the release;
|
||||
# tagName: "latest" | "pre" | string;
|
||||
#
|
||||
# currentVersion?: string;
|
||||
@ -65,13 +55,6 @@ xpiInfo = "xpiInfo"
|
||||
# releaseData?: string;
|
||||
# downloadCount?: number;
|
||||
# assetId?: number;
|
||||
#
|
||||
# TODO:视 zotero-chinese/zotero-plugins情况更新
|
||||
# xpiInfo?: {
|
||||
# id?: string;
|
||||
# name?: string;
|
||||
# currentVersion?: string;
|
||||
# };
|
||||
# }>;
|
||||
#
|
||||
# description?: string;
|
||||
@ -81,4 +64,4 @@ xpiInfo = "xpiInfo"
|
||||
# url: string;
|
||||
# avatar: string;
|
||||
# };
|
||||
# }
|
||||
# }
|
||||
|
||||
38
main.py
38
main.py
@ -144,16 +144,36 @@ def parse(plugin, **kwargs):
|
||||
details = addon_details(xpi_filepath)
|
||||
except Exception as e:
|
||||
print(f'fetch addon detail of {plugin[repo]} failed: {e}')
|
||||
# 对齐zotero-chinese的格式
|
||||
# if details:
|
||||
# xpi_info = {}
|
||||
# if "id" in details:
|
||||
# xpi_info[id] = details["id"]
|
||||
# if "name" in details:
|
||||
# xpi_info[name] = details["name"]
|
||||
# if "version" in details:
|
||||
# xpi_info[currentVersion] = details["version"]
|
||||
# if xpi_info:
|
||||
# release[xpiInfo] = xpi_info
|
||||
|
||||
if details:
|
||||
xpi_info = {}
|
||||
if "id" in details:
|
||||
xpi_info[id] = details["id"]
|
||||
if "name" in details:
|
||||
xpi_info[name] = details["name"]
|
||||
if "version" in details:
|
||||
xpi_info[currentVersion] = details["version"]
|
||||
if xpi_info:
|
||||
release[xpiInfo] = xpi_info
|
||||
if detail_id := details.get('id'):
|
||||
if plugin.get(id) and plugin[id] != detail_id:
|
||||
print('🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘')
|
||||
print(f'Addon id not matched in {plugin[repo]}')
|
||||
print(f'{plugin[id]} <===> {detail_id}')
|
||||
print('🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘🆘')
|
||||
plugin[id] = detail_id
|
||||
if not plugin.get(name) and (detail_name := details.get('name')):
|
||||
plugin[name] = detail_name
|
||||
if detail_version := details.get('version'):
|
||||
release[currentVersion] = detail_version
|
||||
if not plugin.get(description) and (detail_desc := details.get('description')):
|
||||
if detail_desc != '__MSG_description__':
|
||||
plugin[description] = detail_desc
|
||||
else:
|
||||
# todo: read from i18n
|
||||
pass
|
||||
release_infos.append(release)
|
||||
|
||||
except Exception as e:
|
||||
|
||||
@ -19,7 +19,7 @@ def addon_details(addon_path):
|
||||
'unpack': False } # whether to unpack the addon
|
||||
"""
|
||||
|
||||
details = {"id": None, "unpack": False, "name": None, "version": None}
|
||||
details = {"id": None, "unpack": False, "name": None, "version": None, "description": None}
|
||||
|
||||
def get_namespace_id(doc, url):
|
||||
attributes = doc.documentElement.attributes
|
||||
@ -80,6 +80,7 @@ def addon_details(addon_path):
|
||||
if is_webext:
|
||||
details["version"] = manifest["version"]
|
||||
details["name"] = manifest["name"]
|
||||
details["description"] = manifest["description"]
|
||||
# Bug 1572404 - we support two locations for gecko-specific
|
||||
# metadata.
|
||||
for location in ("applications", "browser_specific_settings"):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user