Files
geo/apps/browser-extension/src/adapters/toutiaohao.ts
T

65 lines
1.7 KiB
TypeScript
Raw Normal View History

import {
fetchToutiaoMediaSnapshot,
publishToutiaoArticle,
} from "../../../../packages/publisher-platforms/src/toutiao";
import type { StoredPlatformState } from "../platforms";
import {
connectedPlatform,
disconnectedPlatform,
fetchImageBlob,
fetchJson,
manageUrlResult,
normalizeArticleHtml,
uploadHtmlImages,
} from "./common";
import type { AdapterContext, PlatformAdapter } from "./types";
async function detectToutiaohao(platform: StoredPlatformState): Promise<StoredPlatformState> {
try {
const media = await fetchToutiaoMediaSnapshot(fetchJson);
if (!media?.platformUid || !media.screenName) {
return disconnectedPlatform(platform, "未检测到头条号登录态");
}
return connectedPlatform(platform, media.platformUid, media.screenName, media.avatarUrl);
} catch (error) {
return disconnectedPlatform(platform, error instanceof Error ? error.message : "头条号登录检测失败");
}
}
async function publishToutiaohao(context: AdapterContext) {
const result = await publishToutiaoArticle(
{
title: context.article.title,
html: normalizeArticleHtml(context.article),
coverAssetUrl: context.article.cover_asset_url,
publishType: context.article.publish_type,
},
{
fetchJson,
fetchImageBlob,
uploadHtmlImages,
},
);
if (!result.success) {
throw new Error(result.message);
}
return manageUrlResult(
true,
result.status,
result.articleId,
result.externalManageUrl,
result.message,
result.externalArticleUrl,
);
}
export const toutiaohaoAdapter: PlatformAdapter = {
platformId: "toutiaohao",
detect: detectToutiaohao,
publish: publishToutiaohao,
};