// ==UserScript== // @name 学人VIP // @namespace studyVIP.taozhiyu.gitee.io // @version 0.2 // @description 解锁图文 // @author 涛之雨 // @match *://gbr.businessreview.global/articles/view/* // @icon https://gbr.businessreview.global/img/GBR-logo_black_50x50.png // @require https://cdn.bootcdn.net/ajax/libs/hls.js/1.0.8-0.canary.7807/hls.min.js // @require https://cdn.bootcdn.net/ajax/libs/blueimp-md5/2.19.0/js/md5.min.js // @require https://cdn.bootcdn.net/ajax/libs/jszip/3.7.1/jszip.min.js // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.slim.min.js // @require https://cdn.jsdelivr.net/gh/gildas-lormeau/zip.js@2.4.7/dist/zip-full.min.js // @antifeature tracking ============================================>>>说明:我们仅会在经济学人文章阅读页面收集您使用本插件的情况,以帮助作者了解插件的用户数量。这个操作仅会收集您的IP地址信息,不包含您鼠标、键盘点击在内的所有操作,没有任何安全风险,不会产生性能损耗。为了保护您的知情权以及使用体验,特告知于您。本插件系开源脚本,所有代码均可查看源码,请您放心安装。 <<<============================================ // @grant unsafeWindow // @run-at document-start // @license GPL3.0 // ==/UserScript== /*global Hls zip md5 $*/ /* jshint esversion: 8 */ (function() { 'use strict'; const path = location.pathname.split("/"),lang = path[4]; fetch('https://api.hummingbird.businessreview.global/api/article?id=' + path[3]).then(a=>a.json()).then(tao=>{ var script = document.createElement("script"); script.type = "text/javascript"; script.src = "//js.users.51.la/21234891.js"; document.body.appendChild(script); const Dom=document.querySelector(".maincontent"); Dom.innerHTML=''; document.querySelectorAll(".store_btns,.cover").forEach(a=>a.remove()); tao.body.content.map(a=>{ switch (a.type) { case "image": for (const i of a.data) { if (i.lang === lang) { Dom.innerHTML+=`
`; break; } } break; case "paragraph": for (const i of a.data) { if (i.lang === lang) { Dom.innerHTML+=`

${i.text}

`; break; } } break; case "subtitle": //似乎没什么用? break; case "video": for (const i of a.data) { if (i.lang === lang) { const url=i.url; if(Hls.isSupported()) { const vid=btoa((Math.random()+"").slice(2)).substr(0,10); Dom.innerHTML+=``; var video = document.getElementById(`v_${vid}`); var hls = new Hls(); var m3u8Url = decodeURIComponent(url); hls.loadSource(m3u8Url); // hls.on(Hls.Events.MANIFEST_PARSED,function() { // video.play(); // }); hls.attachMedia(video); }else Dom.innerHTML+=`

不支持hls播放器


`; break; } } break; default: console.log("未识别的类型",a); } }); const verifyZipPassword = async (file, password) => { let reader, mp3blob = ""; try { reader = new zip.ZipReader(new zip.BlobReader(file), { password }); const entries = await reader.getEntries(); // for (const entry of entries) { try { const audioBlob = await entries[0].getData(new zip.BlobWriter()); // audioBlob.type = 'mp3'; var newreader = new FileReader(); newreader.addEventListener("loadend", function(){ const newAudioBlob=new Blob([newreader.result],{type: 'mp3'}); mp3blob = URL.createObjectURL(audioBlob); $(".progress").hide(); $("#TPlayer").show(); document.querySelector('#TPlayer').src=mp3blob; }); newreader.readAsArrayBuffer(audioBlob); } catch (error) { return { state: false, error }; } // } } finally { if(reader&&reader.close)await reader.close(); } return {state: true,url:mp3blob}; }; const requestmp3=async (mp3zipurl)=>{ try{ const rep=await fetch(mp3zipurl).catch(a=>console.log('无音频')); //console.log(rep.headers.get('Content-Length')); if (rep.ok) { //console.log("请求数据"); $('body').append($('
0%
')); } else { //console.log("请求失败") return; } let size = 0; const body = rep.body, len = rep.headers.get('Content-Length'); const reader = body.getReader(); const steam=await new ReadableStream({ start(controller) { return pump(); function pump() { return reader.read().then(res => { const { done, value } = res; if (done) { console.log("end"); controller.close(); $(".progress-bar span").text('100%'); return; } size += value.length || 0; var rate = (100 * size / Number(len)).toFixed(2) + "%"; $(".progress-bar").width(rate); $(".progress-bar span").text(rate); controller.enqueue(value); return pump(); }); } } }); const blob=await (new Response(steam)), a = await blob.blob(); verifyZipPassword(a, md5('2q09kj876$A&21786351+_))l;k98zTRWE%$#*&^'+mp3zipurl.split("/").pop())) .then(a=>{ URL.revokeObjectURL(a); }) .catch(err => console.error(err)); }catch(e){ console.log(e); } }; requestmp3("https://businessreviewglobal-cdn.com/"+tao.publication_date.substr(0,7)+'/audio/'+path[3]+'_mp3.zip'); }); })();