// ==UserScript==
// @name 扇贝
// @name:en shanbay
// @namespace http://261day.com/
// @version 0.2
// @description 扇贝单词下载导出
// @description:en shanbay word download
// @author You
// @match https://web.shanbay.com/*
// @grant none
// @downloadURL https://update.greasyfork.icu/scripts/422693/%E6%89%87%E8%B4%9D.user.js
// @updateURL https://update.greasyfork.icu/scripts/422693/%E6%89%87%E8%B4%9D.meta.js
// ==/UserScript==
(function() {
'use strict';
var book_id = "";
var learning_count = 0;
var unlearned_count = 0;
var simple_count = 0;
function get_data(url){
return fetch(url, {
"headers": {
"accept": "application/json, text/plain, */*",
"accept-language": "en,zh-CN;q=0.9,zh;q=0.8,ja;q=0.7",
"sec-ch-ua": "\"Chromium\";v=\"88\", \"Google Chrome\";v=\"88\", \";Not A Brand\";v=\"99\"",
"sec-ch-ua-mobile": "?0",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site",
"x-csrftoken": "d57d33018f6b24892cea401df0173f53"
},
"referrer": "https://web.shanbay.com/",
"referrerPolicy": "strict-origin-when-cross-origin",
"body": null,
"method": "GET",
"mode": "cors",
"credentials": "include"
})
.then(response => response.json())
}
function get_decoded_data(url){
return get_data(url)
.then(json => json.data)
.then(data => window.bays4.d(data))
.then(data => JSON.parse(data))
}
function update_wordinfo(){
get_data("https://apiv3.shanbay.com/wordsapp/user_material_books/current").
then(data => {
document.getElementById("current_book").innerHTML = "单词书:" + data.materialbook.name + "
单词书id:" + data.materialbook.id;
book_id = data.materialbook.id;
get_decoded_data("https://apiv3.shanbay.com/wordsapp/user_material_books/"+book_id+"/learning/words/unlearned_items?ipp=10&page=1")
.then(data => {
document.getElementById("unlearned_word").innerText = data.total
unlearned_count = data.total;
})
get_decoded_data("https://apiv3.shanbay.com/wordsapp/user_material_books/"+book_id+"/learning/words/learning_items?ipp=10&page=1")
.then(data => {
document.getElementById("learning_word").innerText = data.total;
learning_count = data.total;
})
get_decoded_data("https://apiv3.shanbay.com/wordsapp/user_material_books/"+book_id+"/learning/words/simple_learned_items?ipp=10&page=1")
.then(data => {
document.getElementById("simple_learned_word").innerText = data.total
simple_count = data.total;
})
})
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function download_book(url,pages){
var res = [];
for(var i=1;i<=pages;i++){
document.getElementById("download_info").innerText = "休眠中"+i+"/"+pages
await sleep(100)
document.getElementById("download_info").innerText = "下载中"+i+"/"+pages
var data = await get_decoded_data(url+i);
for(const id in data.objects){
var word = data.objects[id]
var meanings = " ";
for(const mean of word.vocab_with_senses.senses){
meanings += mean.pos + mean.definition_cn
}
res.push({"word":word.vocab_with_senses.word, "trans":meanings})
}
}
document.getElementById("download_info").innerText = ""
return res;
}
function disable_buttons(){
document.getElementById("download_learning").setAttribute("disabled","true");
document.getElementById("download_unlearned").setAttribute("disabled","true");
document.getElementById("download_simple").setAttribute("disabled","true");
}
function enable_buttons(){
document.getElementById("download_learning").removeAttribute("disabled");
document.getElementById("download_unlearned").removeAttribute("disabled");
document.getElementById("download_simple").removeAttribute("disabled");
}
function popup_result(res){
var win = window.open("", "_blank");
win.document.write(String.raw`
`+JSON.stringify(res,null,2)+"
");
}
function init(){
var body = document.getElementById("root").parentElement
body.appendChild(document.createElement("div")).innerHTML = String.raw`单词书
条目 数量
在学单词 NaN
未学单词 NaN
简单词 NaN