From 2a13e67a2dc7a27d253339908ef32f7fe8d8a922 Mon Sep 17 00:00:00 2001 From: cheney Date: Fri, 17 Jul 2026 21:36:57 +0800 Subject: [PATCH] save --- config/server-config.json | 2 +- package.json | 7 ++++--- src/cli.js | 37 +++++++++++++++++++++++-------------- src/get-cookie.js | 9 ++++----- src/index.js | 30 +++++++++++++++--------------- 5 files changed, 47 insertions(+), 38 deletions(-) diff --git a/config/server-config.json b/config/server-config.json index a48b2fc..5a27684 100644 --- a/config/server-config.json +++ b/config/server-config.json @@ -1,4 +1,4 @@ -{ +{ "apiBase": "http://dsv6.honor3.com:10101", "username": "douyin", "password": "douyin2025" diff --git a/package.json b/package.json index c104f77..fddc2db 100644 --- a/package.json +++ b/package.json @@ -5,11 +5,12 @@ "main": "src/index.js", "type": "module", "scripts": { + "loopfav": "node src/cli.js loopfav", "cookies": "node src/cli.js cookies", + "unfav": "node src/cli.js unfav", "sync": "node src/cli.js sync", - "unfavorite": "node src/cli.js unfavorite", - "uncollect": "node src/cli.js uncollect", - "loop": "node src/cli.js loop" + "loopcol": "node src/cli.js loopcol", + "uncol": "node src/cli.js uncol" }, "author": "", "license": "ISC", diff --git a/src/cli.js b/src/cli.js index 8adf30e..1966919 100644 --- a/src/cli.js +++ b/src/cli.js @@ -1,23 +1,25 @@ // 抖音小云 CLI 工具 // 用法: -// node cli.js cookies 获取抖音 cookies 并同步到 douxiaoyun -// node cli.js sync 将本地 cookies 同步到 douxiaoyun -// node cli.js unfavorite 取消点赞(单次执行) -// node cli.js uncollect 取消收藏(单次执行) -// node cli.js loop 循环模式:每10秒取消点赞 +// node cli.js cookies 获取抖音 cookies(仅保存本地) +// node cli.js sync 将本地 cookies 同步到 douxiaoyun +// node cli.js unfav 取消点赞(单次执行) +// node cli.js uncol 取消收藏(单次执行) +// node cli.js loopfav 循环取消点赞(每10秒) +// node cli.js loopcol 循环取消收藏(每10秒) const cmd = process.argv[2]; -const validCommands = ["cookies", "sync", "unfavorite", "uncollect", "loop"]; +const validCommands = ["cookies", "sync", "unfav", "uncol", "loopfav", "loopcol"]; if (!cmd || !validCommands.includes(cmd)) { console.log("抖音小云 CLI 工具\n"); console.log("用法: node src/cli.js <命令>\n"); console.log("可用命令:"); - console.log(" cookies 获取抖音 cookies 并同步到 douxiaoyun"); + console.log(" cookies 获取抖音 cookies(仅保存本地)"); console.log(" sync 将本地 cookies 同步到 douxiaoyun"); - console.log(" unfavorite 取消点赞(单次执行)"); - console.log(" uncollect 取消收藏(单次执行)"); - console.log(" loop 循环模式:每10秒取消点赞"); + console.log(" unfav 取消点赞(单次执行)"); + console.log(" uncol 取消收藏(单次执行)"); + console.log(" loopfav 循环取消点赞(每10秒)"); + console.log(" loopcol 循环取消收藏(每10秒)"); process.exit(1); } @@ -40,24 +42,31 @@ async function main() { await syncToDouxiaoyun(config.cookie, config.sec_user_id); break; - case "unfavorite": + case "unfav": console.log("💔 取消点赞..."); const { getAndUnFavorite } = await import("./index.js"); await getAndUnFavorite(); break; - case "uncollect": + case "uncol": console.log("📦 取消收藏..."); const { getAndUnCollection } = await import("./index.js"); await getAndUnCollection(); break; - case "loop": - console.log("🔄 启动循环模式:每10秒取消点赞..."); + case "loopfav": + console.log("🔄 启动循环:每10秒取消点赞..."); const mod = await import("./index.js"); await mod.getAndUnFavorite(); setInterval(() => { mod.getAndUnFavorite(); }, 10 * 1000); break; + + case "loopcol": + console.log("🔄 启动循环:每10秒取消收藏..."); + const mod2 = await import("./index.js"); + await mod2.getAndUnCollection(); + setInterval(() => { mod2.getAndUnCollection(); }, 10 * 1000); + break; } } diff --git a/src/get-cookie.js b/src/get-cookie.js index c9b14f1..3268ad4 100644 --- a/src/get-cookie.js +++ b/src/get-cookie.js @@ -7,7 +7,7 @@ import { chromium } from "playwright"; import { writeFileSync, readFileSync } from "fs"; import { resolve, dirname } from "path"; import { fileURLToPath } from "url"; -import { syncToDouxiaoyun } from "./sync-douxiaoyun.js"; + const __dirname = dirname(fileURLToPath(import.meta.url)); const CONFIG_PATH = resolve(__dirname, "..", "config", "config.json"); @@ -115,10 +115,9 @@ async function main() { saveConfig(cookieString, capturedSecUserId); - if (capturedSecUserId) { - await syncToDouxiaoyun(cookieString, capturedSecUserId); - } else { - console.log("\n⚠️ 未获取到 sec_user_id,跳过服务器上传"); + if (!capturedSecUserId) { + console.log("\n⚠️ 未获取到 sec_user_id"); + console.log(" 请参考 README 手动获取"); } } diff --git a/src/index.js b/src/index.js index b0e34b9..d0a16bb 100644 --- a/src/index.js +++ b/src/index.js @@ -34,7 +34,9 @@ async function getCollection() { throw new Error(`HTTP error! status: ${response.status}`); } - const data = await response.json(); + const text = await response.text(); + if (!text) throw new Error(`Empty response (HTTP ${response.status})`); + const data = JSON.parse(text); return data; } catch (error) { console.error('Error fetching collection list:', error); @@ -109,7 +111,9 @@ async function unCollection(ids) { throw new Error(`HTTP error! status: ${response.status}`); } - const data = await response.json(); + const text = await response.text(); + if (!text) throw new Error(`Empty response (HTTP ${response.status})`); + const data = JSON.parse(text); console.log('Uncollection result:', data); return data; } catch (error) { @@ -120,7 +124,7 @@ async function unCollection(ids) { async function getFavorite() { try { - const response = await fetch("https://www.douyin.com/aweme/v1/web/aweme/favorite/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=MS4wLjABAAAAeCSMEnt7Z_MPClAjdbmjofNkc5QXE1kgLEeEztHMllXHD-6jm_yVA0-yhPbfmoTs&max_cursor=1765691979000&min_cursor=0&whale_cut_token=&cut_version=1&count=18&publish_video_strategy_type=2&update_version_code=170400&pc_client_type=1&pc_libra_divert=Windows&support_h265=0&support_dash=0&cpu_core_num=8&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1536&screen_height=864&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=132.0.0.0&browser_online=true&engine_name=Blink&engine_version=132.0.0.0&os_name=Windows&os_version=10&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7600719568957376051&uifid=5a0fbbb49c6c57acd77ca86d66dd2e8e2f1fcf7b3fa6b8a56e480f684bd08589553786161c459bb4fde00266efba4bd4c7d71cbbbad2aa259a57d98088e17aa732fcd7470f39fc1ad8e6c4dabca3df6cd6bb2981b17d2ca74fda32cce67b70cd3e751397bddfe28b867839d4bdadac332514874de9aa707e360bddc17cff6bc614830247bd64b3e8636de32f8ad3980392acb5339b9ebd0a1769462c4804352394b3d1bae7b1145706962cd2283c7dd332300ece35b337ec699cd4539ff4b521&msToken=vGl5fdx6IS2me-NiDMAT5PzpgXrkv6pW_-nR7BuX8etF_FNvFYCyIoocOkB5hoy_nXnHtg9TXsImr1vB_OPa0CcQ8590y6y8jE4M6PYyn6y_BzmF5wr8uToew-m0so_1zSBIYUQg1gtxNAphc3iVZMG_OKdXmgH82ihVWVKEKyWzjtmcZvlkzw%3D%3D&a_bogus=xj4VgHt7EZRVPV%2FS8cBt9l3lH9DlNPuy13T2SYoTyNKvPwzGjmPPOcG6GoLcvkk-bSBhwq57efTAbnxb8UUzZC9pomhfSoXb5t%2F5I6fL0qNgGUG%2FENRpe0gFuwsC0QJNlACnilkRWs0x2VxRnH52AB%2FGt5z95cEgbrp5p2SyjDC8pByTV9%2F7e-hD&verifyFp=verify_mkza1y3w_BssDMxBB_ts4H_4IAZ_8E6V_jkFSXMpq4wYX&fp=verify_mkza1y3w_BssDMxBB_ts4H_4IAZ_8E6V_jkFSXMpq4wYX×tamp=1769681008&x-secsdk-web-signature=35459cca9b59c6163483716753a9dc66", { + const response = await fetch(`https://www.douyin.com/aweme/v1/web/aweme/favorite/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=${sec_user_id}&max_cursor=1765691979000&min_cursor=0&whale_cut_token=&cut_version=1&count=18&publish_video_strategy_type=2&update_version_code=170400&pc_client_type=1&pc_libra_divert=Windows&support_h265=0&support_dash=0&cpu_core_num=8&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1536&screen_height=864&browser_language=zh-CN&browser_platform=Win32&browser_name=Chrome&browser_version=132.0.0.0&browser_online=true&engine_name=Blink&engine_version=132.0.0.0&os_name=Windows&os_version=10&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7600719568957376051&uifid=5a0fbbb49c6c57acd77ca86d66dd2e8e2f1fcf7b3fa6b8a56e480f684bd08589553786161c459bb4fde00266efba4bd4c7d71cbbbad2aa259a57d98088e17aa732fcd7470f39fc1ad8e6c4dabca3df6cd6bb2981b17d2ca74fda32cce67b70cd3e751397bddfe28b867839d4bdadac332514874de9aa707e360bddc17cff6bc614830247bd64b3e8636de32f8ad3980392acb5339b9ebd0a1769462c4804352394b3d1bae7b1145706962cd2283c7dd332300ece35b337ec699cd4539ff4b521&msToken=vGl5fdx6IS2me-NiDMAT5PzpgXrkv6pW_-nR7BuX8etF_FNvFYCyIoocOkB5hoy_nXnHtg9TXsImr1vB_OPa0CcQ8590y6y8jE4M6PYyn6y_BzmF5wr8uToew-m0so_1zSBIYUQg1gtxNAphc3iVZMG_OKdXmgH82ihVWVKEKyWzjtmcZvlkzw%3D%3D&a_bogus=xj4VgHt7EZRVPV%2FS8cBt9l3lH9DlNPuy13T2SYoTyNKvPwzGjmPPOcG6GoLcvkk-bSBhwq57efTAbnxb8UUzZC9pomhfSoXb5t%2F5I6fL0qNgGUG%2FENRpe0gFuwsC0QJNlACnilkRWs0x2VxRnH52AB%2FGt5z95cEgbrp5p2SyjDC8pByTV9%2F7e-hD&verifyFp=verify_mkza1y3w_BssDMxBB_ts4H_4IAZ_8E6V_jkFSXMpq4wYX&fp=verify_mkza1y3w_BssDMxBB_ts4H_4IAZ_8E6V_jkFSXMpq4wYX×tamp=1769681008&x-secsdk-web-signature=35459cca9b59c6163483716753a9dc66`, { "headers": { "accept": "application/json, text/plain, */*", "accept-language": "zh-CN,zh;q=0.9", @@ -137,7 +141,7 @@ async function getFavorite() { "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "uifid": "5a0fbbb49c6c57acd77ca86d66dd2e8e2f1fcf7b3fa6b8a56e480f684bd08589553786161c459bb4fde00266efba4bd4c7d71cbbbad2aa259a57d98088e17aa732fcd7470f39fc1ad8e6c4dabca3df6cd6bb2981b17d2ca74fda32cce67b70cd3e751397bddfe28b867839d4bdadac332514874de9aa707e360bddc17cff6bc614830247bd64b3e8636de32f8ad3980392acb5339b9ebd0a1769462c4804352394b3d1bae7b1145706962cd2283c7dd332300ece35b337ec699cd4539ff4b521", - "cookie": "__ac_nonce=0697b2e3600104b1bd7f; __ac_signature=_02B4Z6wo00f01yUC1zQAAIDC-lkke770FA8lItOAAKBF8b; enter_pc_once=1; UIFID_TEMP=5a0fbbb49c6c57acd77ca86d66dd2e8e2f1fcf7b3fa6b8a56e480f684bd08589553786161c459bb4fde00266efba4bd4c7d71cbbbad2aa259a57d98088e17aa7a4fb5f307eb559957b59bc456d25171caa34ffb196da703781bff979c74a99b9644f7279a9765a1bdbc942ce138d28af; x-web-secsdk-uid=a13f9c68-00b8-4c59-9dde-415f7195cabe; douyin.com; s_v_web_id=verify_mkza1y3w_BssDMxBB_ts4H_4IAZ_8E6V_jkFSXMpq4wYX; device_web_cpu_core=8; device_web_memory_size=8; architecture=amd64; dy_swidth=1536; dy_sheight=864; stream_recommend_feed_params=%22%7B%5C%22cookie_enabled%5C%22%3Atrue%2C%5C%22screen_width%5C%22%3A1536%2C%5C%22screen_height%5C%22%3A864%2C%5C%22browser_online%5C%22%3Atrue%2C%5C%22cpu_core_num%5C%22%3A8%2C%5C%22device_memory%5C%22%3A8%2C%5C%22downlink%5C%22%3A10%2C%5C%22effective_type%5C%22%3A%5C%224g%5C%22%2C%5C%22round_trip_time%5C%22%3A50%7D%22; strategyABtestKey=%221769680465.383%22; volume_info=%7B%22isUserMute%22%3Afalse%2C%22isMute%22%3Afalse%2C%22volume%22%3A0.5%7D; passport_csrf_token=7909c48cfe09c5641464f32f4ad1db63; passport_csrf_token_default=7909c48cfe09c5641464f32f4ad1db63; record_force_login=%7B%22timestamp%22%3A1769680481014%2C%22force_login_video%22%3A1%2C%22force_login_live%22%3A0%2C%22force_login_direct_video%22%3A0%7D; ttwid=1%7C_avd_ZbQ2atFZh5vU2oo6KN3lAXD6TPZx5Nh-uDA2VA%7C1769680480%7C4d6ec4cb4c148f9b6f552d9e469bce7e77d9671f5c900165cc39aefb815afc6e; bd_ticket_guard_client_web_domain=2; fpk1=U2FsdGVkX18t6chzVlpgMpv8/TJ3FL3QKYGqd4DUz1XS5XIdEBWPtrKEsSU0hOTYjm37QWhYl+a+CsS4G9J9kg==; fpk2=41770e408d453f0e18b6cf535e220c84; download_guide=%221%2F20260129%2F0%22; passport_mfa_token=CjfNowCrjYLiaToF2RyBl4dqr661QMRPuOabkGnRUOllvS2kFCiuXQTp1AxsRs4gNisQKm4lae%2BxGkoKPAAAAAAAAAAAAABQAnxrshca46OV0tjbdAwLtdbfKtTUWa%2ByJkuKObq55oVimWfmJmvY%2BCvJDb0zOUObcBDgmogOGPax0WwgAiIBA8sD3dc%3D; d_ticket=7225a12d2871fbb23768eb2a1d242df1a62b5; passport_assist_user=CkFCM1T6Xx1bta82xsIAEvvO21irEfgKyUQbFsnCQsaH_rsR_Hopws0JvcGqQ79wLqbqJayTTwtmTQtLSdwofOFVDhpKCjwAAAAAAAAAAAAAUAJAtdXErkSDF5475Fihw1AH3Z3KTWZ9Tk8Op5mhTioxyEHTnJIjbTlbvgnhWqkooA0Q95qIDhiJr9ZUIAEiAQMKHjOe; n_mh=ymir6J68APSe1AA9Cf4Vf_pxmRkozlGIIo7-BV1-SHY; sid_guard=a9194ad0336f922c7faffbd3c5545aa2%7C1769680539%7C5183999%7CMon%2C+30-Mar-2026+09%3A55%3A38+GMT; uid_tt=20804682d9fb2c07d27f9dc6f419dfbb; uid_tt_ss=20804682d9fb2c07d27f9dc6f419dfbb; sid_tt=a9194ad0336f922c7faffbd3c5545aa2; sessionid=a9194ad0336f922c7faffbd3c5545aa2; sessionid_ss=a9194ad0336f922c7faffbd3c5545aa2; session_tlb_tag=sttt%7C4%7CqRlK0DNvkix_r_vTxVRaov_________ANYVDx3-cuYVwhe4zbhqT88SXuDh669amwKZ-t_gUeX4%3D; is_staff_user=false; sid_ucp_v1=1.0.0-KDJlZDFkN2E5NTlmMmY5MTllY2ZkNjFiODIwNWFmYmU4YmNiZDE4ZDYKIQjdpcCdo431AxCb3ezLBhjvMSAMMNL3jJUGOAdA9AdIBBoCbGYiIGE5MTk0YWQwMzM2ZjkyMmM3ZmFmZmJkM2M1NTQ1YWEy; ssid_ucp_v1=1.0.0-KDJlZDFkN2E5NTlmMmY5MTllY2ZkNjFiODIwNWFmYmU4YmNiZDE4ZDYKIQjdpcCdo431AxCb3ezLBhjvMSAMMNL3jJUGOAdA9AdIBBoCbGYiIGE5MTk0YWQwMzM2ZjkyMmM3ZmFmZmJkM2M1NTQ1YWEy; _bd_ticket_crypt_cookie=8052f80bff578e796e6fb453dd34ee44; __security_mc_1_s_sdk_sign_data_key_web_protect=d6696f11-4504-9c78; __security_mc_1_s_sdk_cert_key=4501ea5d-4027-9da3; __security_mc_1_s_sdk_crypt_sdk=d1905fd9-4998-ad6c; __security_server_data_status=1; login_time=1769680539868; publish_badge_show_info=%220%2C0%2C0%2C1769680541011%22; UIFID=5a0fbbb49c6c57acd77ca86d66dd2e8e2f1fcf7b3fa6b8a56e480f684bd08589553786161c459bb4fde00266efba4bd4c7d71cbbbad2aa259a57d98088e17aa732fcd7470f39fc1ad8e6c4dabca3df6cd6bb2981b17d2ca74fda32cce67b70cd3e751397bddfe28b867839d4bdadac332514874de9aa707e360bddc17cff6bc614830247bd64b3e8636de32f8ad3980392acb5339b9ebd0a1769462c4804352394b3d1bae7b1145706962cd2283c7dd332300ece35b337ec699cd4539ff4b521; IsDouyinActive=true; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtcmVlLXB1YmxpYy1rZXkiOiJCREZTamYxSUhEQytSd21la0RHN2hYNklpN3l5bzFWVk1pNnZscnhZc0lZQ0JMZ2gycVhyemNMdStqRTRvbFZhOHpIMmxHRDFjQi82MTZpck1mU0d1MWc9IiwiYmQtdGlja2V0LWd1YXJkLXdlYi12ZXJzaW9uIjoyfQ%3D%3D; home_can_add_dy_2_desktop=%221%22; odin_tt=b2eddb1200090cc10b834cf1ef139760b2cba46639f08d06ad3376dab0ae14d90cbe2aebb0207fccdb6ae40d9190c58f05117bb6b259f7e5323ebf308dc17591; biz_trace_id=e395aa6c; stream_player_status_params=%22%7B%5C%22is_auto_play%5C%22%3A0%2C%5C%22is_full_screen%5C%22%3A0%2C%5C%22is_full_webscreen%5C%22%3A0%2C%5C%22is_mute%5C%22%3A0%2C%5C%22is_speed%5C%22%3A1%2C%5C%22is_visible%5C%22%3A1%7D%22; sdk_source_info=7e276470716a68645a606960273f276364697660272927676c715a6d6069756077273f276364697660272927666d776a68605a607d71606b766c6a6b5a7666776c7571273f275e5927666d776a686028607d71606b766c6a6b3f2a2a646063606d616d61666c6c606a66646e636a677564646a696d6c756e667562662a666a6b71606b715a7666776c7571762a666a757c2b6f76592758272927666a6b766a69605a696c6061273f27636469766027292762696a6764695a7364776c6467696076273f275e582729277672715a646971273f2763646976602729277f6b5a666475273f2763646976602729276d6a6e5a6b6a716c273f2763646976602729276c6b6f5a7f6367273f27636469766027292771273f2730323d313c3c353d333c333234272927676c715a75776a716a666a69273f2763646976602778; bit_env=WHB4DmWK7cEw4NeVjD_uA0u4KFaiuj8Ms1c7O-6RRfsXTxvPLdhVV4VLxg6peKbOAZPCWgLckVULO7IXJS8ax_J7esd3FHGuNkaqgpO6AcsnwJ_2d5t4syLDaPU0lHbAz5LD6lYWut1v211JJlXY1vnCOSkNUY2Jxl5najSEjVgRq_GCX8yGZoHsDuKrkeqQj_pPT9gNR1zLRGzVIxPvV-YalBRIKPr9kOFrKm58m4pyjHXfT_Z-CiJfqddBemPZOSPzvtkbNAMzUuse-HrzJI3YDv_Tn4_LEWVYw8H9Nc1MKV830M9PGWy1JuEiV35o6KXCUiUG5LE5KVi5bunBI4ecdFYOuj453x4ajZM-TxLYkOIcp0kslX9B7HIoHWTC2VmeDuDU5KTcuINlbZVDFheBzKH-EEOJcgqB49IF45_0SqzvmO1gzd_AftIBI11R6KyY87DaDzdSz2Dmrav5BjLHjk1hdi6W96706jAHP_hPyRUVXNrffPt12VAhRDAV; gulu_source_res=eyJwX2luIjoiMGFlMWE3M2ZhMmUzMjFiMWEzNDkxZGU4MDQ1ZTY3ZTk1N2ExNDAzNmVkYjc3ZmY5YTk5ZTQ2Yjg0NDdjYWM5ZCJ9; passport_auth_mix_state=jhu02zd2aztdpyyvmb17i7sj6ibmwjef; SelfTabRedDotControl=%5B%7B%22id%22%3A%227574683742594140160%22%2C%22u%22%3A38%2C%22c%22%3A38%7D%2C%7B%22id%22%3A%227056013361556752397%22%2C%22u%22%3A196%2C%22c%22%3A196%7D%2C%7B%22id%22%3A%227555445702927927346%22%2C%22u%22%3A19%2C%22c%22%3A19%7D%2C%7B%22id%22%3A%227579535671182755880%22%2C%22u%22%3A74%2C%22c%22%3A74%7D%2C%7B%22id%22%3A%227484548117287667748%22%2C%22u%22%3A36%2C%22c%22%3A36%7D%2C%7B%22id%22%3A%227572829434814679082%22%2C%22u%22%3A23%2C%22c%22%3A23%7D%2C%7B%22id%22%3A%227519198993897752626%22%2C%22u%22%3A48%2C%22c%22%3A48%7D%2C%7B%22id%22%3A%227522860615451297831%22%2C%22u%22%3A24%2C%22c%22%3A24%7D%2C%7B%22id%22%3A%227579541484920113203%22%2C%22u%22%3A14%2C%22c%22%3A14%7D%2C%7B%22id%22%3A%227346029101657884726%22%2C%22u%22%3A28%2C%22c%22%3A28%7D%2C%7B%22id%22%3A%227586546512528672768%22%2C%22u%22%3A15%2C%22c%22%3A15%7D%2C%7B%22id%22%3A%227569955270361614388%22%2C%22u%22%3A6%2C%22c%22%3A6%7D%2C%7B%22id%22%3A%227201745525119387685%22%2C%22u%22%3A189%2C%22c%22%3A189%7D%2C%7B%22id%22%3A%227420037769667282985%22%2C%22u%22%3A8%2C%22c%22%3A8%7D%5D; bd_ticket_guard_client_data_v2=eyJyZWVfcHVibGljX2tleSI6IkJERlNqZjFJSERDK1J3bWVrREc3aFg2SWk3eXlvMVZWTWk2dmxyeFlzSVlDQkxnaDJxWHJ6Y0x1K2pFNG9sVmE4ekgybEdEMWNCLzYxNmlyTWZTR3UxZz0iLCJ0c19zaWduIjoidHMuMi4wOWM4MGUxZTI0ZWU0OTRlZDhkMDUwY2FiNDRiNjdhNjFmMTAwMzIxNWY1M2Y1NTdjMGQ2YjdhNDAyZDU0YTI1YzRmYmU4N2QyMzE5Y2YwNTMxODYyNGNlZGExNDkxMWNhNDA2ZGVkYmViZWRkYjJlMzBmY2U4ZDRmYTAyNTc1ZCIsInJlcV9jb250ZW50Ijoic2VjX3RzIiwicmVxX3NpZ24iOiJ2N2hMRkRzKzg0aGZORmJLTnZQbU9UdzN5d2FVUWtnK2lHalF6aDh3b1I4PSIsInNlY190cyI6IiNIT3M3ZUNYTnFma0tzOGJPN1o2ZE1wNEdoNTZsZDloWjU1NjlPcDE1MXVENHVkbkZUdE1MVnlNeDNZSngifQ%3D%3D; my_rd=2", + "cookie": cookie, "Referer": "https://www.douyin.com/user/self?from_tab_name=main&showTab=like", "Referrer-Policy": "no-referrer-when-downgrade" }, @@ -149,7 +153,9 @@ async function getFavorite() { throw new Error(`HTTP error! status: ${response.status}`); } - const data = await response.json(); + const text = await response.text(); + if (!text) throw new Error(`Empty response (HTTP ${response.status})`); + const data = JSON.parse(text); return data; } catch (error) { console.error('Error fetching favorite list:', error); @@ -224,7 +230,9 @@ async function unFavorites(ids) { throw new Error(`HTTP error! status: ${response.status}`); } - const data = await response.json(); + const text = await response.text(); + if (!text) throw new Error(`Empty response (HTTP ${response.status})`); + const data = JSON.parse(text); console.log('Unfavorite result:', data); return data; } catch (error) { @@ -239,12 +247,4 @@ async function test() { } // 导出函数供 CLI 调用 -export { getAndUnFavorite, getAndUnCollection, getFavorite, getCollection }; - -// 直接运行时执行默认行为(循环取消点赞) -const isMain = process.argv[1] && (process.argv[1].includes("index.js") || process.argv[1].includes("cli.js")); -if (isMain && !process.argv.includes("--export")) { - console.log("启动循环模式:每10秒检查并取消点赞..."); - test(); - setInterval(() => { test(); }, 10 * 1000); -} +export { getAndUnFavorite, getAndUnCollection, getFavorite, getCollection, test };