2025年7月2日 星期三

[Javascript]國立公共資訊圖書館的電子書服務平台進行複製標韱

 上篇:[ 國立公共資訊圖書館的電子書服務平台進行查詢所有符合的書目]



(1)先登入帳號1,將該帳號已標韱的書目產生"加入我的標韱"url


(async function () {

    const allUrls = [];

    const baseApi = "https://ebook.nlpi.edu.tw/personal/MyTagDetail";

    const tagName = "閱讀雲端-低年級";


    for (let start = 1; start <= 2; start++) {

        const url = `${baseApi}?tagName=${encodeURIComponent(tagName)}&start=${start}&limit=100&ajaxQuery=Y`;


        try {

            const response = await fetch(url);

            if (!response.ok) throw new Error(`API 錯誤:${response.status}`);

            const json = await response.json();


            if (Array.isArray(json.data)) {

                json.data.forEach(item => {

                    if (item.sid) {

                        const link = `https://ebook.nlpi.edu.tw/bookdetail/${item.sid}/booktag.add?tagName=${tagName}`;

                        allUrls.push(link);

                    }

                });

            }

        } catch (error) {

            console.error(`處理 start=${start} 時發生錯誤:`, error);

        }

    }


    // 將結果轉為純文字並下載

    const blob = new Blob([allUrls.join('\n')], { type: 'text/plain;charset=utf-8' });

    const downloadUrl = URL.createObjectURL(blob);

    const a = document.createElement('a');

    a.href = downloadUrl;

    a.download = 'booktag_links.txt';

    document.body.appendChild(a);

    a.click();

    document.body.removeChild(a);

    URL.revokeObjectURL(downloadUrl);

})();


(2)改登入帳號2,將產生連結進行寫入

(async function () {

    const urls = [

        "https://ebook.nlpi.edu.tw/bookdetail/1559/booktag.add?tagName=閱讀雲端-低年級",

        "https://ebook.nlpi.edu.tw/bookdetail/1463/booktag.add?tagName=閱讀雲端-低年級",

        "https://ebook.nlpi.edu.tw/bookdetail/953/booktag.add?tagName=閱讀雲端-低年級",

        "https://ebook.nlpi.edu.tw/bookdetail/1066/booktag.add?tagName=閱讀雲端-低年級",

        // ...(請將所有 URL 放入此陣列)

        "https://ebook.nlpi.edu.tw/bookdetail/11041/booktag.add?tagName=閱讀雲端-低年級"

    ];


    for (let i = 0; i < urls.length; i++) {

        try {

            const response = await fetch(urls[i], {

                method: 'GET',

                headers: {

                    'Content-Type': 'application/json'

                }

            });


            if (!response.ok) {

                console.error(`❌ 第 ${i + 1} 筆失敗:${response.status} - ${urls[i]}`);

                continue;

            }


            const result = await response.text(); // 或 .json() 視 API 回傳格式

            console.log(`✅ 第 ${i + 1} 筆成功:`, result);

        } catch (err) {

            console.error(`⚠️ 第 ${i + 1} 筆錯誤:`, err);

        }

    }

})();