| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #!/usr/bin/env node
- /** 尝试多种参数名解析抖音分享短链 */
- const fs = require('fs');
- const path = require('path');
- const os = require('os');
- const https = require('https');
- const TOKEN = JSON.parse(fs.readFileSync(
- path.join(os.homedir(), '.openclaw', 'skills', 'xiaohongshu-search-notes', 'api-config.json'),
- 'utf-8'
- )).endpoint.headers.Authorization.replace(/^Bearer\s+/, '');
- function req(hostname, pathUrl) {
- return new Promise((resolve) => {
- const r = https.request({
- hostname, path: pathUrl, method: 'GET',
- headers: { Authorization: `Bearer ${TOKEN}`, Accept: 'application/json' },
- }, (res) => {
- const chunks = [];
- res.on('data', (c) => chunks.push(c));
- res.on('end', () => resolve({ status: res.statusCode, body: Buffer.concat(chunks).toString('utf-8') }));
- });
- r.on('error', (e) => resolve({ status: 0, body: e.message }));
- r.setTimeout(30000, () => { r.destroy(); resolve({ status: 0, body: 'timeout' }); });
- r.end();
- });
- }
- const shareUrl = 'https://v.douyin.com/BMklXPTyiUM/';
- const shareCode = 'BMklXPTyiUM';
- const tries = [
- // fetch_share_info_by_share_code
- `/api/v1/douyin/app/v3/fetch_share_info_by_share_code?share_code=${shareCode}`,
- `/api/v1/douyin/app/v3/fetch_share_info_by_share_code?url=${encodeURIComponent(shareUrl)}`,
- `/api/v1/douyin/app/v3/fetch_share_info_by_share_code?share_url=${encodeURIComponent(shareUrl)}`,
- // fetch_one_video_by_share_url with variants
- `/api/v1/douyin/app/v3/fetch_one_video_by_share_url?url=${encodeURIComponent(shareUrl)}`,
- `/api/v1/douyin/app/v3/fetch_one_video_by_share_url?share_url=${encodeURIComponent(shareUrl)}`,
- `/api/v1/douyin/app/v3/fetch_one_video_by_share_url?aweme_id=${shareCode}`,
- // v1/v2 variations
- `/api/v1/douyin/app/v1/fetch_one_video_by_share_url?url=${encodeURIComponent(shareUrl)}`,
- `/api/v1/douyin/web/fetch_one_video_by_share_url?url=${encodeURIComponent(shareUrl)}`,
- // web variants
- `/api/v1/douyin/web/fetch_share_info_by_share_code?share_code=${shareCode}`,
- `/api/v1/douyin/web/fetch_share_info_by_share_code?url=${encodeURIComponent(shareUrl)}`,
- // alternative common names
- `/api/v1/douyin/app/v3/fetch_video_info_by_share_url?url=${encodeURIComponent(shareUrl)}`,
- `/api/v1/douyin/app/v3/fetch_share_video?share_url=${encodeURIComponent(shareUrl)}`,
- ];
- (async () => {
- for (const p of tries) {
- const r = await req('api.tikhub.io', p);
- let brief;
- try {
- const j = JSON.parse(r.body);
- if (j.code === 200) {
- const d = j.data || {};
- const keys = Object.keys(d).slice(0, 8).join(',');
- brief = `OK keys=[${keys}]`;
- if (d.aweme_detail?.aweme_id) brief += ` aweme_id=${d.aweme_detail.aweme_id}`;
- else if (d.aweme_info?.aweme_id) brief += ` aweme_id=${d.aweme_info.aweme_id}`;
- else if (d.aweme_id) brief += ` aweme_id=${d.aweme_id}`;
- } else if (j.detail?.message_zh) {
- brief = `ERR(${j.detail.code}) ${j.detail.message_zh.slice(0, 60)}`;
- } else if (j.message_zh) {
- brief = `ERR ${j.message_zh.slice(0, 60)}`;
- } else {
- brief = r.body.slice(0, 100);
- }
- } catch (e) {
- brief = `PARSE ${e.message} body=${r.body.slice(0, 80)}`;
- }
- const flag = brief.startsWith('OK') ? '✅' : (r.status === 200 ? '⚠' : '✗');
- console.log(`${flag} [${r.status}] ${p.slice(0, 90)}`);
- console.log(` → ${brief}`);
- await new Promise((r) => setTimeout(r, 500));
- }
- })();
|