init-tagseo.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. const models = require('../models');
  2. const fetch = require('node-fetch');
  3. const { tags } = require('../config/tag');
  4. let apiKey = require('process').env.ARK_API_KEY;
  5. const url = "https://ark.cn-beijing.volces.com/api/v3/chat/completions";
  6. let headers = {
  7. 'Authorization': `Bearer ${apiKey}`,
  8. 'Content-Type': 'application/json'
  9. }
  10. /**
  11. * 豆包对话API
  12. * @param {*} text
  13. */
  14. async function fetchMetaByTxtFromDoubao(text) {
  15. let data = {
  16. "model": "ep-20250206115552-7qg5c", // Doubao-1.5...ion-pro-32k 当前最新,贵,响应慢,效果好
  17. // "model": "ep-20250204231910-4phb8", // Doubao-vision-lite-32k 便宜点,相应速度快
  18. "messages": [
  19. { "role": "user", "content": text }
  20. ]
  21. }
  22. console.log(data);
  23. const jsonData = JSON.stringify(data);
  24. const response = await fetch(url, { method: 'POST', headers, body: jsonData });
  25. let responseJson = await response.json();
  26. console.log(responseJson);
  27. return responseJson.choices[0].message.content;
  28. }
  29. async function runTagMeta() {
  30. let done = 0;
  31. let duration = 0;
  32. let hour, minute, second;
  33. let start = Date.now();
  34. let total = tags.length;
  35. console.log('total:', total);
  36. if (total <= 0) return;
  37. for (let tag of tags) {
  38. console.log(`process tag ${tag.tag}`);
  39. console.time(tag.tag);
  40. let doc = await models.TagSeo.findOne({ tag: tag.tag });
  41. if (!doc) {
  42. doc = new models.TagSeo({ tag: tag.tag });
  43. } else {
  44. console.log(`已经有${tag.tag}的seo信息,直接跳过`);
  45. continue;
  46. }
  47. try {
  48. let text = `生成 ${tag.tag} coloring pages 的SEO title(60个字符以内) 和 description(160个字符以内), 以json格式输出,支持语言中文(zh)、英语(en)、西班牙语(es)、葡萄牙语(pt)、日语(ja),形如: { title: {zh:'', en:'', es: '', pt: '', ja: ''}, description: {zh:'', en:'', es: '', pt: '', ja: ''}`;
  49. let metaInfo = await fetchMetaByTxtFromDoubao(text);
  50. console.log(metaInfo);
  51. let metaInfoJson = JSON.parse(metaInfo);
  52. let titleJson = metaInfoJson.title;
  53. let descJson = metaInfoJson.description;
  54. let title = JSON.stringify(titleJson);
  55. let desc = JSON.stringify(descJson);
  56. doc.seoTitle = title;
  57. doc.seoDescription = desc;
  58. await doc.save();
  59. } catch (e) {
  60. console.error(e.message);
  61. }
  62. console.timeEnd(tag.tag);
  63. done++;
  64. duration = (Date.now() - start) / 1000;
  65. hour = (Math.floor(duration / 60 / 60)).toString().padStart(2, '0');
  66. minute = (Math.floor(duration / 60) % 60).toString().padStart(2, '0');
  67. second = (Math.floor(duration) % 60).toString().padStart(2, '0');
  68. console.log('progress: ' + Math.floor((100 * done / total)) + '% used time: ' + hour + ':' + minute + ':' + second);
  69. }
  70. }
  71. async function run() {
  72. await runTagMeta();
  73. }
  74. async function test() {
  75. let metaInfo = await fetchMetaByImageFromDoubao("https://color.jccytech.cn/thumbs/v2/work/640/67a254ec4f9d65537938e5c5.png");
  76. console.log(metaInfo);
  77. let metaInfoJson = JSON.parse(metaInfo);
  78. let titleJson = metaInfoJson.title;
  79. let descJson = metaInfoJson.copy;
  80. let title = JSON.stringify(titleJson);
  81. let desc = JSON.stringify(descJson);
  82. console.log(title);
  83. console.log(desc);
  84. }
  85. module.exports = { run }
  86. if (require.main == module) {
  87. run();
  88. }