| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- const models = require('../models');
- const fetch = require('node-fetch');
- const fs = require('fs');
- const { tags } = require('../config/tag');
- let apiKey = require('process').env.ARK_API_KEY;
- const url = "https://ark.cn-beijing.volces.com/api/v3/chat/completions";
- let headers = {
- 'Authorization': `Bearer ${apiKey}`,
- 'Content-Type': 'application/json'
- }
- /**
- * 豆包对话API
- * @param {*} text
- */
- async function fetchMetaByTxtFromDoubao(text) {
- let data = {
- "model": "ep-20250206115552-7qg5c", // Doubao-1.5...ion-pro-32k 当前最新,贵,响应慢,效果好
- // "model": "ep-20250204231910-4phb8", // Doubao-vision-lite-32k 便宜点,相应速度快
- "messages": [
- { "role": "user", "content": text }
- ]
- }
- console.log(data);
- const jsonData = JSON.stringify(data);
- const response = await fetch(url, { method: 'POST', headers, body: jsonData });
- let responseJson = await response.json();
- console.log(responseJson);
- return responseJson.choices[0].message.content;
- }
- async function runTagMetaToDB() {
- let done = 0;
- let duration = 0;
- let hour, minute, second;
- let start = Date.now();
- let total = tags.length;
- console.log('total:', total);
- if (total <= 0) return;
- for (let tag of tags) {
- console.log(`process tag ${tag.tag}`);
- console.time(tag.tag);
- let doc = await models.TagSeo.findOne({ tag: tag.tag });
- if (!doc) {
- doc = new models.TagSeo({ tag: tag.tag });
- } else {
- console.log(`已经有${tag.tag}的seo信息,直接跳过`);
- continue;
- }
- try {
- 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: ''}`;
- let metaInfo = await fetchMetaByTxtFromDoubao(text);
- console.log(metaInfo);
- let metaInfoJson = JSON.parse(metaInfo);
- let titleJson = metaInfoJson.title;
- let descJson = metaInfoJson.description;
- let title = JSON.stringify(titleJson);
- let desc = JSON.stringify(descJson);
- doc.seoTitle = title;
- doc.seoDescription = desc;
- await doc.save();
- } catch (e) {
- console.error(e.message);
- }
- console.timeEnd(tag.tag);
- done++;
- duration = (Date.now() - start) / 1000;
- hour = (Math.floor(duration / 60 / 60)).toString().padStart(2, '0');
- minute = (Math.floor(duration / 60) % 60).toString().padStart(2, '0');
- second = (Math.floor(duration) % 60).toString().padStart(2, '0');
- console.log('progress: ' + Math.floor((100 * done / total)) + '% used time: ' + hour + ':' + minute + ':' + second);
- }
- }
- async function runTagMetaToFile() {
- let done = 0;
- let duration = 0;
- let hour, minute, second;
- let start = Date.now();
- let total = tags.length;
- console.log('total:', total);
- if (total <= 0) return;
- for (let tag of tags) {
- console.log(`process tag ${tag.tag}`);
- console.time(tag.tag);
- if (tag.seoTitle.en.length > 0) {
- console.log(`已经有${tag.tag}的seo信息,直接跳过`);
- continue;
- }
- try {
- let text = `生成 ${tag.title.en} 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: ''}`;
- let metaInfo = await fetchMetaByTxtFromDoubao(text);
- console.log(metaInfo);
- let metaInfoJson = JSON.parse(metaInfo);
- tag.seoTitle = metaInfoJson.title;
- tag.seoDescription = metaInfoJson.description;;
- } catch (e) {
- console.error(e.message);
- }
- // write to file
- let text = JSON.stringify(tags);
- fs.writeFileSync('tags.json', text);
- console.timeEnd(tag.tag);
- done++;
- duration = (Date.now() - start) / 1000;
- hour = (Math.floor(duration / 60 / 60)).toString().padStart(2, '0');
- minute = (Math.floor(duration / 60) % 60).toString().padStart(2, '0');
- second = (Math.floor(duration) % 60).toString().padStart(2, '0');
- console.log('progress: ' + Math.floor((100 * done / total)) + '% used time: ' + hour + ':' + minute + ':' + second);
- }
- }
- async function run() {
- await runTagMetaToFile();
- }
- async function test() {
- let metaInfo = await fetchMetaByImageFromDoubao("https://color.jccytech.cn/thumbs/v2/work/640/67a254ec4f9d65537938e5c5.png");
- console.log(metaInfo);
- let metaInfoJson = JSON.parse(metaInfo);
- let titleJson = metaInfoJson.title;
- let descJson = metaInfoJson.copy;
- let title = JSON.stringify(titleJson);
- let desc = JSON.stringify(descJson);
- console.log(title);
- console.log(desc);
- }
- module.exports = { run }
- if (require.main == module) {
- run();
- }
|