test_task_61.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. #!/usr/bin/env node
  2. /**
  3. * 测试发布任务 #61
  4. * - 测试代理对微信视频号的可用性
  5. * - 测试账号 Cookie 有效性
  6. */
  7. const http = require('http');
  8. // 配置
  9. const PYTHON_API = 'http://localhost:5005';
  10. const TASK_ID = 61;
  11. const ACCOUNT_ID = 24;
  12. // 从数据库获取的代理配置
  13. const PROXY_CONFIG = {
  14. city: "上海",
  15. enabled: true,
  16. provider: "shenlong",
  17. regionCode: "310000",
  18. regionName: "市辖区",
  19. regionPath: ["31", "310000"]
  20. };
  21. // 测试代理
  22. async function testProxy() {
  23. return new Promise((resolve, reject) => {
  24. console.log('\n=== 1️⃣ 测试代理配置 ===');
  25. console.log('代理配置:', JSON.stringify(PROXY_CONFIG, null, 2));
  26. const postData = JSON.stringify({
  27. ...PROXY_CONFIG,
  28. platform: 'weixin' // 测试对微信平台的可用性
  29. });
  30. const req = http.request(`${PYTHON_API}/proxy/test`, {
  31. method: 'POST',
  32. headers: {
  33. 'Content-Type': 'application/json',
  34. 'Content-Length': Buffer.byteLength(postData)
  35. }
  36. }, (res) => {
  37. let data = '';
  38. res.on('data', chunk => data += chunk);
  39. res.on('end', () => {
  40. try {
  41. const result = JSON.parse(data);
  42. console.log('\n代理测试结果:', JSON.stringify(result, null, 2));
  43. resolve(result);
  44. } catch (e) {
  45. reject(e);
  46. }
  47. });
  48. });
  49. req.on('error', (e) => {
  50. console.error('❌ 代理测试失败:', e.message);
  51. reject(e);
  52. });
  53. req.write(postData);
  54. req.end();
  55. });
  56. }
  57. // 测试发布(带代理)
  58. async function testPublish() {
  59. return new Promise((resolve, reject) => {
  60. console.log('\n=== 2️⃣ 测试发布 ===');
  61. console.log('任务ID:', TASK_ID);
  62. console.log('账号ID:', ACCOUNT_ID);
  63. // 从 Node.js API 获取完整任务信息
  64. http.get(`http://localhost:3000/api/publish/tasks/${TASK_ID}`, (res) => {
  65. let data = '';
  66. res.on('data', chunk => data += chunk);
  67. res.on('end', async () => {
  68. try {
  69. const taskData = JSON.parse(data);
  70. if (!taskData.success) {
  71. throw new Error(taskData.error || '获取任务失败');
  72. }
  73. console.log('\n任务信息:', JSON.stringify({
  74. id: taskData.data.id,
  75. title: taskData.data.title,
  76. status: taskData.data.status,
  77. video_path: taskData.data.video_path,
  78. proxy: taskData.data.publish_proxy
  79. }, null, 2));
  80. // 调用 Python AI 发布接口
  81. console.log('\n开始测试发布...');
  82. const publishData = JSON.stringify({
  83. platform: 'weixin',
  84. cookie: '', // 需要从数据库获取
  85. title: taskData.data.title,
  86. description: taskData.data.description,
  87. video_path: `E:\\Workspace\\multi-platform-media-manage${taskData.data.video_path}`,
  88. headless: false, // 显示浏览器
  89. return_screenshot: true,
  90. proxy: taskData.data.publish_proxy,
  91. user_id: taskData.data.user_id,
  92. publish_task_id: taskData.data.id,
  93. publish_account_id: ACCOUNT_ID
  94. });
  95. const publishReq = http.request(`${PYTHON_API}/publish/ai-assisted`, {
  96. method: 'POST',
  97. headers: {
  98. 'Content-Type': 'application/json',
  99. 'Content-Length': Buffer.byteLength(publishData)
  100. }
  101. }, (publishRes) => {
  102. let publishResult = '';
  103. publishRes.on('data', chunk => publishResult += chunk);
  104. publishRes.on('end', () => {
  105. try {
  106. const result = JSON.parse(publishResult);
  107. console.log('\n发布结果:', JSON.stringify({
  108. success: result.success,
  109. status: result.status,
  110. error: result.error,
  111. need_captcha: result.need_captcha,
  112. captcha_type: result.captcha_type
  113. }, null, 2));
  114. resolve(result);
  115. } catch (e) {
  116. reject(e);
  117. }
  118. });
  119. });
  120. publishReq.on('error', (e) => {
  121. console.error('❌ 发布请求失败:', e.message);
  122. reject(e);
  123. });
  124. publishReq.write(publishData);
  125. publishReq.end();
  126. } catch (e) {
  127. reject(e);
  128. }
  129. });
  130. }).on('error', reject);
  131. });
  132. }
  133. // 主函数
  134. async function main() {
  135. try {
  136. console.log('🔍 开始测试发布任务 #' + TASK_ID);
  137. console.log('=' .repeat(60));
  138. // 1. 测试代理
  139. const proxyResult = await testProxy();
  140. if (!proxyResult.success) {
  141. console.log('\n❌ 代理测试失败,请检查代理配置');
  142. return;
  143. }
  144. // 2. 测试发布
  145. // await testPublish(); // 暂时跳过,需要获取 Cookie
  146. console.log('\n✅ 测试完成');
  147. } catch (error) {
  148. console.error('\n❌ 测试失败:', error);
  149. }
  150. }
  151. main();