39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import { hashText } from "./mvp-db";
|
|
import {
|
|
extractPublishUrl,
|
|
extractXhsPublishUrl,
|
|
platformFromPublishUrl,
|
|
safeHttpUrl,
|
|
type SupportedPlatform,
|
|
} from "./publish-url";
|
|
|
|
export { extractXhsPublishUrl } from "./publish-url";
|
|
|
|
export function accountFromPublishLink(
|
|
input: string,
|
|
expectedPlatform?: SupportedPlatform,
|
|
) {
|
|
const extracted = expectedPlatform
|
|
? extractPublishUrl(input, expectedPlatform)
|
|
: extractXhsPublishUrl(input) || extractPublishUrl(input, "抖音");
|
|
const url = safeHttpUrl(extracted);
|
|
if (!url) return null;
|
|
const platform = platformFromPublishUrl(url.toString());
|
|
if (!platform || (expectedPlatform && platform !== expectedPlatform)) return null;
|
|
const noteId =
|
|
platform === "抖音"
|
|
? url.pathname.match(/\/(?:video|note)\/([A-Za-z0-9_-]{8,80})/)?.[1] ?? ""
|
|
: url.pathname.match(
|
|
/\/(?:discovery\/item|explore)\/([A-Za-z0-9_-]{8,80})/,
|
|
)?.[1] ?? "";
|
|
const platformUid = `pending-${hashText(
|
|
noteId || `${url.origin}${url.pathname}`,
|
|
)}`;
|
|
return {
|
|
platform,
|
|
platformUid,
|
|
nickname: "待识别账号",
|
|
profileUrl: "",
|
|
};
|
|
}
|