twitter-snap 0.0.27 → 0.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -10
- package/bin/run.js +1 -1
- package/dist/commands/index.d.ts +5 -2
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +40 -5
- package/dist/commands/index.js.map +1 -1
- package/dist/core/core.d.ts +6 -1
- package/dist/core/core.d.ts.map +1 -1
- package/dist/core/core.js +68 -32
- package/dist/core/core.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +5 -2
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/sleep.d.ts +3 -0
- package/dist/utils/sleep.d.ts.map +1 -0
- package/dist/utils/sleep.js +10 -0
- package/dist/utils/sleep.js.map +1 -0
- package/oclif.manifest.json +41 -4
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -4,14 +4,15 @@ Create beautiful Tweet images fast.
|
|
|
4
4
|
Fast, good design, Browser is not a dependency.
|
|
5
5
|
|
|
6
6
|
```shell
|
|
7
|
-
npx twitter-snap@latest https://twitter.com/elonmusk/status/
|
|
7
|
+
npx twitter-snap@latest https://twitter.com/elonmusk/status/1770222178279252062
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
<p float="left">
|
|
11
|
+
<img src="./docs/img/output-1.png" width="49%" />
|
|
12
|
+
<img src="./docs/img/output-2.png" width="49%" />
|
|
13
|
+
<img src="./docs/img/output-3.png" width="49%" />
|
|
14
|
+
<img src="./docs/img/output-4.png" width="49%" />
|
|
15
|
+
</p>
|
|
15
16
|
|
|
16
17
|
## Install
|
|
17
18
|
|
|
@@ -24,8 +25,10 @@ $ bin/run --help
|
|
|
24
25
|
Create beautiful Tweet images fast
|
|
25
26
|
|
|
26
27
|
USAGE
|
|
27
|
-
$ twitter-snap ID [--api getTweetResultByRestId|getTweetDetail|getSearchTimeline|getHomeTimeline|getHomeLatestTimeline|getListLatestTweetsTimeline|getUserTweets|getUserTweetsAndReplies|getUserMedia|getLikes|getBookmarks] [--browserHeadless] [--browserProfile <value>]
|
|
28
|
-
<value>] [--debug] [--
|
|
28
|
+
$ twitter-snap ID [--api getTweetResultByRestId|getTweetDetail|getSearchTimeline|getHomeTimeline|getHomeLatestTimeline|getListLatestTweetsTimeline|getUserTweets|getUserTweetsAndReplies|getUserMedia|getLikes|getBookmarks] [--browserHeadless] [--browserProfile <value>]
|
|
29
|
+
[--cookiesFile <value>] [--debug] [--ffmpegAdditonalOption <value>] [--ffmpegPath <value>] [--ffprobePath <value>] [--fontPath <value>] [--limit <value>] [--noCleanup] [-o <value>] [--sessionType <value>] [--simpleLog] [--sleep <value>] [--theme
|
|
30
|
+
RenderOceanBlueColor|RenderOceanBlueDarkColor|RenderSunsetGardenColor|RenderSunsetGardenDarkColor|RenderDawnBlossomColor|RenderDawnBlossomDarkColor|RenderFierySunsetColor|RenderFierySunsetDarkColor|RenderTwilightSkyColor|RenderTwilightSkyDarkColor|RenderPlainColor|RenderPlainDarkColor|RenderTransp
|
|
31
|
+
arent|RenderTransparentDark|RenderTransparentShadow|RenderTransparentDarkShadow|RenderMakeItAQuote]
|
|
29
32
|
|
|
30
33
|
ARGUMENTS
|
|
31
34
|
ID Twitter status id
|
|
@@ -41,13 +44,15 @@ FLAGS
|
|
|
41
44
|
--ffmpegAdditonalOption=<value> FFmpeg additonal option
|
|
42
45
|
--ffmpegPath=<value> [default: ffmpeg] FFmpeg path
|
|
43
46
|
--ffprobePath=<value> [default: ffprobe] FFprobe path
|
|
47
|
+
--fontPath=<value> [default: C:\Users\yuki/.cache/twitter-snap/fonts] Font path
|
|
44
48
|
--limit=<value> [default: 30] Limit count
|
|
45
49
|
--noCleanup Cleanup
|
|
46
50
|
--sessionType=<value> [default: guest] Session type
|
|
47
51
|
--simpleLog Simple log
|
|
48
52
|
--sleep=<value> Sleep (ms)
|
|
49
|
-
--theme=<option> [default:
|
|
50
|
-
<options:
|
|
53
|
+
--theme=<option> [default: RenderOceanBlueColor] Theme type
|
|
54
|
+
<options: RenderOceanBlueColor|RenderOceanBlueDarkColor|RenderSunsetGardenColor|RenderSunsetGardenDarkColor|RenderDawnBlossomColor|RenderDawnBlossomDarkColor|RenderFierySunsetColor|RenderFierySunsetDarkColor|RenderTwilightSkyColor|RenderTwilightSkyDarkColor|Rende
|
|
55
|
+
rPlainColor|RenderPlainDarkColor|RenderTransparent|RenderTransparentDark|RenderTransparentShadow|RenderTransparentDarkShadow|RenderMakeItAQuote>
|
|
51
56
|
|
|
52
57
|
DESCRIPTION
|
|
53
58
|
Create beautiful Tweet images fast
|
|
@@ -56,6 +61,8 @@ DESCRIPTION
|
|
|
56
61
|
EXAMPLES
|
|
57
62
|
$ twitter-snap 1349129669258448897
|
|
58
63
|
|
|
64
|
+
$ twitter-snap 1349129669258448897 --theme RenderMakeItAQuote
|
|
65
|
+
|
|
59
66
|
$ twitter-snap 1349129669258448897 --session-type browser
|
|
60
67
|
|
|
61
68
|
$ twitter-snap 1349129669258448897 --session-type file --cookies-file cookies.json
|
package/bin/run.js
CHANGED
package/dist/commands/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export default class Default extends Command {
|
|
|
6
6
|
static browserProfile: string;
|
|
7
7
|
static description: string;
|
|
8
8
|
static examples: string[];
|
|
9
|
+
static fontPath: string;
|
|
9
10
|
static flags: {
|
|
10
11
|
api: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<"getTweetDetail" | "getSearchTimeline" | "getHomeTimeline" | "getHomeLatestTimeline" | "getListLatestTweetsTimeline" | "getUserTweets" | "getUserTweetsAndReplies" | "getUserMedia" | "getLikes" | "getBookmarks" | "getTweetResultByRestId", import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
11
12
|
browserHeadless: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
@@ -15,13 +16,15 @@ export default class Default extends Command {
|
|
|
15
16
|
ffmpegAdditonalOption: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
16
17
|
ffmpegPath: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
17
18
|
ffprobePath: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
19
|
+
fontPath: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
18
20
|
limit: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
19
21
|
noCleanup: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
20
22
|
output: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
21
|
-
sessionType: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<"
|
|
23
|
+
sessionType: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<"file" | "browser" | "guest", import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
22
24
|
simpleLog: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
23
25
|
sleep: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
24
|
-
theme: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<"
|
|
26
|
+
theme: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<"RenderOceanBlueColor" | "RenderOceanBlueDarkColor" | "RenderSunsetGardenColor" | "RenderSunsetGardenDarkColor" | "RenderDawnBlossomColor" | "RenderDawnBlossomDarkColor" | "RenderFierySunsetColor" | "RenderFierySunsetDarkColor" | "RenderTwilightSkyColor" | "RenderTwilightSkyDarkColor" | "RenderPlainColor" | "RenderPlainDarkColor" | "RenderTransparent" | "RenderTransparentDark" | "RenderTransparentShadow" | "RenderTransparentDarkShadow" | "RenderMakeItAQuote", import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
27
|
+
width: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
25
28
|
};
|
|
26
29
|
main(): Promise<void>;
|
|
27
30
|
run(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,OAAO,EAAQ,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,OAAO,EAAQ,MAAM,aAAa,CAAA;AAWhD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAC,IAAI;;MAEV;IAED,MAAM,CAAC,cAAc,SAAiD;IAEtE,MAAM,CAAC,WAAW,SAA8F;IAEhH,MAAM,CAAC,QAAQ,WAWd;IAED,MAAM,CAAC,QAAQ,SAA8C;IAG7D,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;MAiFX;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwGrB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAa3B"}
|
package/dist/commands/index.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
var _a;
|
|
2
2
|
import { Args, Command, Flags } from '@oclif/core';
|
|
3
3
|
import os from 'node:os';
|
|
4
|
+
import { TwitterOpenApi } from 'twitter-openapi-typescript';
|
|
4
5
|
import { FFmpegInfrastructure, themeList } from 'twitter-snap-core';
|
|
5
|
-
import { twitterSnapCookies, twitterSnapGuest, twitterSnapPuppeteer } from '../core/core.js';
|
|
6
|
+
import { getFonts, twitterSnapCookies, twitterSnapGuest, twitterSnapPuppeteer } from '../core/core.js';
|
|
6
7
|
import { Logger, LoggerSimple } from '../utils/logger.js';
|
|
8
|
+
import { sleepLoop } from '../utils/sleep.js';
|
|
7
9
|
import { twitterUrlConvert } from '../utils/url.js';
|
|
8
10
|
import { getTweetList } from './../utils/types.js';
|
|
9
11
|
class Default extends Command {
|
|
@@ -14,6 +16,24 @@ class Default extends Command {
|
|
|
14
16
|
console.debug = flags.debug ? logger.log.bind(logger) : (_) => { };
|
|
15
17
|
console.warn = logger.warn.bind(logger);
|
|
16
18
|
console.error = logger.error.bind(logger);
|
|
19
|
+
TwitterOpenApi.fetchApi = async (...args) => {
|
|
20
|
+
let res;
|
|
21
|
+
while (res === undefined || res.status === 429) {
|
|
22
|
+
if (res?.status === 429) {
|
|
23
|
+
const wait = Number(res.headers.get('X-Rate-Limit-Reset')) * 1000 - Date.now();
|
|
24
|
+
await sleepLoop(wait, async (count) => {
|
|
25
|
+
logger.update(`Rate limit exceeded, wait ${count} seconds`);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
console.debug(`http request: ${args[0]}`);
|
|
29
|
+
res = await fetch(...args);
|
|
30
|
+
console.debug(`http response: ${res.status}`);
|
|
31
|
+
if (!res.ok) {
|
|
32
|
+
console.error(`Return http status: ${res.status}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return res;
|
|
36
|
+
};
|
|
17
37
|
const getClient = (() => {
|
|
18
38
|
switch (flags.sessionType) {
|
|
19
39
|
case 'guest':
|
|
@@ -47,7 +67,7 @@ class Default extends Command {
|
|
|
47
67
|
return logger.update(`Rendering video ${user}/${id}`);
|
|
48
68
|
}
|
|
49
69
|
};
|
|
50
|
-
const
|
|
70
|
+
const fonts = await getFonts(flags.fontPath);
|
|
51
71
|
const render = client({ id, limit: flags.limit, type }, async (render) => {
|
|
52
72
|
try {
|
|
53
73
|
const finalize = await render({
|
|
@@ -60,7 +80,8 @@ class Default extends Command {
|
|
|
60
80
|
ffprobePath: flags.ffprobePath,
|
|
61
81
|
}),
|
|
62
82
|
ffmpegAdditonalOption: flags.ffmpegAdditonalOption?.split(' ') ?? [],
|
|
63
|
-
|
|
83
|
+
fonts,
|
|
84
|
+
width: flags.width,
|
|
64
85
|
},
|
|
65
86
|
});
|
|
66
87
|
await finalize({
|
|
@@ -71,7 +92,9 @@ class Default extends Command {
|
|
|
71
92
|
catch (error) {
|
|
72
93
|
logger.catchFail(error);
|
|
73
94
|
}
|
|
74
|
-
await
|
|
95
|
+
await sleepLoop(flags.sleep, async (count) => {
|
|
96
|
+
logger.update(`Sleeping ${count} seconds`);
|
|
97
|
+
});
|
|
75
98
|
});
|
|
76
99
|
await logger.guardProgress({ max: flags.limit, text: 'Rendering tweet' }, render);
|
|
77
100
|
}
|
|
@@ -100,6 +123,7 @@ Default.browserProfile = `${os.homedir()}/.cache/twitter-snap/profiles`;
|
|
|
100
123
|
Default.description = ['Create beautiful Tweet images fast', 'https://github.com/fa0311/twitter-snap'].join('\n');
|
|
101
124
|
Default.examples = [
|
|
102
125
|
'twitter-snap 1349129669258448897',
|
|
126
|
+
'twitter-snap 1349129669258448897 --theme RenderMakeItAQuote',
|
|
103
127
|
'twitter-snap 1349129669258448897 --session-type browser',
|
|
104
128
|
'twitter-snap 1349129669258448897 --session-type file --cookies-file cookies.json',
|
|
105
129
|
'twitter-snap 44196397 --api getUserTweets --limit 10',
|
|
@@ -109,6 +133,8 @@ Default.examples = [
|
|
|
109
133
|
'twitter-snap 44196397 --api getUserTweets -o "{user-screen-name}/{count}.png"',
|
|
110
134
|
'twitter-snap 44196397 --api getUserTweets -o "{time-tweet-yyyy}-{time-tweet-mm}-{time-tweet-dd}/{id}.png"',
|
|
111
135
|
];
|
|
136
|
+
Default.fontPath = `${os.homedir()}/.cache/twitter-snap/fonts`;
|
|
137
|
+
// eslint-disable-next-line perfectionist/sort-classes
|
|
112
138
|
Default.flags = {
|
|
113
139
|
api: Flags.custom({
|
|
114
140
|
default: 'getTweetResultByRestId',
|
|
@@ -148,6 +174,11 @@ Default.flags = {
|
|
|
148
174
|
default: 'ffprobe',
|
|
149
175
|
description: 'FFprobe path',
|
|
150
176
|
}),
|
|
177
|
+
fontPath: Flags.string({
|
|
178
|
+
aliases: ['font-path'],
|
|
179
|
+
default: _a.fontPath,
|
|
180
|
+
description: 'Font path',
|
|
181
|
+
}),
|
|
151
182
|
limit: Flags.integer({
|
|
152
183
|
default: 30,
|
|
153
184
|
description: 'Limit count',
|
|
@@ -177,10 +208,14 @@ Default.flags = {
|
|
|
177
208
|
description: 'Sleep (ms)',
|
|
178
209
|
}),
|
|
179
210
|
theme: Flags.custom({
|
|
180
|
-
default: '
|
|
211
|
+
default: 'RenderOceanBlueColor',
|
|
181
212
|
description: 'Theme type',
|
|
182
213
|
options: Object.keys(themeList),
|
|
183
214
|
})(),
|
|
215
|
+
width: Flags.integer({
|
|
216
|
+
default: 650,
|
|
217
|
+
description: 'Width',
|
|
218
|
+
}),
|
|
184
219
|
};
|
|
185
220
|
export default Default;
|
|
186
221
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAC,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAC,oBAAoB,EAAiB,SAAS,EAAC,MAAM,mBAAmB,CAAA;AAEhF,OAAO,EAAc,kBAAkB,EAAE,gBAAgB,EAAE,oBAAoB,EAAC,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
|
package/dist/core/core.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
import { ImageResponse } from '@vercel/og';
|
|
1
2
|
import { TweetApiUtilsData, TwitterOpenApiClient } from 'twitter-openapi-typescript';
|
|
2
3
|
import { ThemeNameType } from 'twitter-snap-core';
|
|
3
4
|
import { GetTweetApi, ThemeParamType } from '../utils/types.js';
|
|
4
5
|
export declare const twitterSnapGuest: () => Promise<readonly [({ id, limit, type }: tweetApiSnapParam, handler: handlerType) => Promise<void>, TwitterOpenApiClient]>;
|
|
5
6
|
export declare const twitterSnapPuppeteer: (headless?: boolean, userDataDir?: string) => Promise<readonly [({ id, limit, type }: tweetApiSnapParam, handler: handlerType) => Promise<void>, TwitterOpenApiClient]>;
|
|
6
7
|
export declare const twitterSnapCookies: (path: string) => Promise<readonly [({ id, limit, type }: tweetApiSnapParam, handler: handlerType) => Promise<void>, TwitterOpenApiClient]>;
|
|
8
|
+
type Fonts = NonNullable<NonNullable<ConstructorParameters<typeof ImageResponse>[1]>['fonts']>[0];
|
|
9
|
+
export declare const getFonts: (fontPath: string) => Promise<Fonts[]>;
|
|
7
10
|
type tweetApiSnapParam = {
|
|
8
11
|
id: string;
|
|
9
12
|
limit: number;
|
|
@@ -20,7 +23,9 @@ type twitterRenderParam = {
|
|
|
20
23
|
handler?: (e: HandlerType) => void;
|
|
21
24
|
output: string;
|
|
22
25
|
themeName: ThemeNameType;
|
|
23
|
-
themeParam: ThemeParamType
|
|
26
|
+
themeParam: ThemeParamType & {
|
|
27
|
+
fonts: Fonts[];
|
|
28
|
+
};
|
|
24
29
|
};
|
|
25
30
|
declare const twitterRender: (data: TweetApiUtilsData, count: number) => ({ handler, output, themeName, themeParam }: twitterRenderParam) => Promise<({ cleanup }: FinalizeParam) => Promise<void>>;
|
|
26
31
|
type FinalizeParam = {
|
package/dist/core/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAA;AAGxC,OAAO,EAAC,iBAAiB,EAAkB,oBAAoB,EAAC,MAAM,4BAA4B,CAAA;AAClG,OAAO,EAAC,aAAa,EAAY,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EAAC,WAAW,EAAE,cAAc,EAAe,MAAM,mBAAmB,CAAA;AAE3E,eAAO,MAAM,gBAAgB,gDA4EM,iBAAiB,WAAW,WAAW,0CAxEzE,CAAA;AAED,eAAO,MAAM,oBAAoB,cAAqB,OAAO,gBAAgB,MAAM,6CAsEhD,iBAAiB,WAAW,WAAW,0CAlDzE,CAAA;AAED,eAAO,MAAM,kBAAkB,SAAgB,MAAM,6CAgDlB,iBAAiB,WAAW,WAAW,0CA1CzE,CAAA;AAED,KAAK,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,qBAAqB,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAEjG,eAAO,MAAM,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,EAAE,CA2B3D,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,wBAAwB,GAAG,MAAM,WAAW,CAAA;CACpD,CAAA;AAED,KAAK,WAAW,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAgDzE,KAAK,kBAAkB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AACrD,MAAM,MAAM,WAAW,GAAG;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,CAAA;AAE9E,KAAK,kBAAkB,GAAG;IACxB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,aAAa,CAAA;IACxB,UAAU,EAAE,cAAc,GAAG;QAAC,KAAK,EAAE,KAAK,EAAE,CAAA;KAAC,CAAA;CAC9C,CAAA;AAED,QAAA,MAAM,aAAa,SAAU,iBAAiB,SAAS,MAAM,kDAMH,kBAAkB,2BA0EjD,aAAa,mBANvC,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA"}
|
package/dist/core/core.js
CHANGED
|
@@ -34,6 +34,31 @@ export const twitterSnapCookies = async (path) => {
|
|
|
34
34
|
const api = await twitter.getClientFromCookies(Object.fromEntries(cookies.map((e) => [e.name, e.value])));
|
|
35
35
|
return [tweetApiSnap(api), api];
|
|
36
36
|
};
|
|
37
|
+
export const getFonts = async (fontPath) => {
|
|
38
|
+
const base = 'https://github.com/fa0311/twitter-snap-core/releases/download/assets-fonts/';
|
|
39
|
+
const list = [
|
|
40
|
+
['SEGOEUISL.TTF', 'segoeui', 500, 'normal'],
|
|
41
|
+
['SEGOEUIB.TTF', 'segoeui', 700, 'normal'],
|
|
42
|
+
['SEGUISLI.TTF', 'segoeui', 500, 'italic'],
|
|
43
|
+
['SEGOEUIZ.TTF', 'segoeui', 700, 'italic'],
|
|
44
|
+
];
|
|
45
|
+
fs.mkdir(fontPath, { recursive: true });
|
|
46
|
+
const fonts = list.map(async ([file, name, weight, style]) => {
|
|
47
|
+
const path = `${fontPath}/${file}`;
|
|
48
|
+
try {
|
|
49
|
+
const data = await fs.readFile(path);
|
|
50
|
+
return { data, name, style, weight };
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
const url = `${base}${file}`;
|
|
54
|
+
const res = await fetch(url);
|
|
55
|
+
const data = await res.arrayBuffer();
|
|
56
|
+
await fs.writeFile(path, Buffer.from(data));
|
|
57
|
+
return { data, name, style, weight };
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
return Promise.all(fonts);
|
|
61
|
+
};
|
|
37
62
|
const tweetApiSnap = (client) => {
|
|
38
63
|
return async ({ id, limit, type }, handler) => {
|
|
39
64
|
const key = getTweetList.find((k) => k === type);
|
|
@@ -41,10 +66,10 @@ const tweetApiSnap = (client) => {
|
|
|
41
66
|
const that = client.getTweetApi();
|
|
42
67
|
const api = that[key].bind(that);
|
|
43
68
|
let count = 0;
|
|
44
|
-
|
|
69
|
+
let cursor;
|
|
45
70
|
while (count < limit) {
|
|
46
71
|
const res = await api({
|
|
47
|
-
cursor
|
|
72
|
+
cursor,
|
|
48
73
|
focalTweetId: id,
|
|
49
74
|
listId: id,
|
|
50
75
|
rawQuery: id,
|
|
@@ -58,8 +83,11 @@ const tweetApiSnap = (client) => {
|
|
|
58
83
|
await handler(twitterRender(e, count));
|
|
59
84
|
count++;
|
|
60
85
|
}
|
|
86
|
+
if (res.data.data.length === 0) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
61
89
|
if (res.data.cursor.bottom) {
|
|
62
|
-
cursor
|
|
90
|
+
cursor = res.data.cursor.bottom.value;
|
|
63
91
|
}
|
|
64
92
|
else {
|
|
65
93
|
return;
|
|
@@ -70,8 +98,9 @@ const tweetApiSnap = (client) => {
|
|
|
70
98
|
const res = await client.getDefaultApi().getTweetResultByRestId({
|
|
71
99
|
tweetId: id,
|
|
72
100
|
});
|
|
73
|
-
if (res.data)
|
|
101
|
+
if (res.data) {
|
|
74
102
|
await handler(twitterRender(res.data, 0));
|
|
103
|
+
}
|
|
75
104
|
}
|
|
76
105
|
};
|
|
77
106
|
};
|
|
@@ -79,41 +108,46 @@ const twitterRender = (data, count) => {
|
|
|
79
108
|
const legacy = data.tweet.legacy;
|
|
80
109
|
const extEntities = data.tweet.legacy?.extendedEntities;
|
|
81
110
|
const extMedia = extEntities?.media ?? [];
|
|
82
|
-
const
|
|
111
|
+
const isVideo = extMedia.some((e) => e.type !== 'photo');
|
|
83
112
|
return async ({ handler, output, themeName, themeParam }) => {
|
|
84
113
|
handler && handler({ id: data.tweet.restId, type: 'start', user: data.user.legacy.screenName });
|
|
85
114
|
const Theme = Object.entries(themeList).find(([k, _]) => k === themeName)[1];
|
|
86
|
-
const
|
|
87
|
-
[
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
115
|
+
const getFileName = (isVideo) => {
|
|
116
|
+
const replaceData = [
|
|
117
|
+
['{id}', data.tweet.restId],
|
|
118
|
+
['{user-screen-name}', data.user.legacy.screenName],
|
|
119
|
+
['{if-photo:(?<true>.+?):(?<false>.+?)}', isVideo ? '$2' : '$1'],
|
|
120
|
+
['{count}', count.toString()],
|
|
121
|
+
['{time-now-yyyy}', new Date().getFullYear().toString().padStart(4, '0')],
|
|
122
|
+
['{time-now-mm}', (new Date().getMonth() + 1).toString().padStart(2, '0')],
|
|
123
|
+
['{time-now-dd}', new Date().getDate().toString().padStart(2, '0')],
|
|
124
|
+
['{time-now-hh}', new Date().getHours().toString().padStart(2, '0')],
|
|
125
|
+
['{time-now-mi}', new Date().getMinutes().toString().padStart(2, '0')],
|
|
126
|
+
['{time-now-ss}', new Date().getSeconds().toString().padStart(2, '0')],
|
|
127
|
+
['{time-tweet-yyyy}', new Date(legacy.createdAt).getFullYear().toString().padStart(4, '0')],
|
|
128
|
+
['{time-tweet-mm}', (new Date(legacy.createdAt).getMonth() + 1).toString().padStart(2, '0')],
|
|
129
|
+
['{time-tweet-dd}', new Date(legacy.createdAt).getDate().toString().padStart(2, '0')],
|
|
130
|
+
['{time-tweet-hh}', new Date(legacy.createdAt).getHours().toString().padStart(2, '0')],
|
|
131
|
+
['{time-tweet-mi}', new Date(legacy.createdAt).getMinutes().toString().padStart(2, '0')],
|
|
132
|
+
['{time-tweet-ss}', new Date(legacy.createdAt).getSeconds().toString().padStart(2, '0')],
|
|
133
|
+
];
|
|
134
|
+
const repOutput = replaceData.reduce((acc, [k, v]) => acc.replaceAll(new RegExp(k, 'g'), v), output);
|
|
135
|
+
const video = repOutput.split('.').pop() !== 'png';
|
|
136
|
+
const pngOutput = video ? repOutput.split('.').slice(0, -1).join('.') + '.png' : repOutput;
|
|
137
|
+
return { pngOutput, repOutput, video };
|
|
138
|
+
};
|
|
107
139
|
const render = new Theme({
|
|
108
140
|
...themeParam,
|
|
109
|
-
video,
|
|
141
|
+
video: getFileName(isVideo).video,
|
|
110
142
|
});
|
|
143
|
+
const { pngOutput, repOutput, video } = getFileName(isVideo && render.videoRender !== undefined);
|
|
111
144
|
handler && handler({ id: data.tweet.restId, type: 'image', user: data.user.legacy.screenName });
|
|
112
145
|
const element = render.imageRender({
|
|
113
146
|
data,
|
|
114
147
|
});
|
|
115
148
|
const img = new ImageResponse(element, {
|
|
116
149
|
emoji: 'twemoji',
|
|
150
|
+
fonts: themeParam.fonts,
|
|
117
151
|
height: undefined,
|
|
118
152
|
width: themeParam.width,
|
|
119
153
|
});
|
|
@@ -129,14 +163,16 @@ const twitterRender = (data, count) => {
|
|
|
129
163
|
image: pngOutput,
|
|
130
164
|
output: repOutput,
|
|
131
165
|
});
|
|
132
|
-
return finalize(res.temp);
|
|
166
|
+
return finalize([pngOutput, ...res.temp]);
|
|
133
167
|
}
|
|
134
168
|
return finalize([]);
|
|
135
169
|
};
|
|
136
170
|
};
|
|
137
|
-
const finalize = async (temp) =>
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
171
|
+
const finalize = async (temp) => {
|
|
172
|
+
return async ({ cleanup }) => {
|
|
173
|
+
if (cleanup) {
|
|
174
|
+
await Promise.all(temp.map((e) => fs.rm(e)));
|
|
175
|
+
}
|
|
176
|
+
};
|
|
141
177
|
};
|
|
142
178
|
//# sourceMappingURL=core.js.map
|
package/dist/core/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAA;AACxC,OAAO,EAAC,QAAQ,IAAI,EAAE,EAAC,MAAM,SAAS,CAAA;AACtC,OAAO,EAAS,MAAM,EAAC,MAAM,WAAW,CAAA;AACxC,OAAO,EAAoB,cAAc,EAAuB,MAAM,4BAA4B,CAAA;AAClG,OAAO,EAAgB,SAAS,EAAC,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EAA8B,YAAY,EAAC,MAAM,mBAAmB,CAAA;AAE3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;IACzC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;IACpC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAA;IAC1C,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,CAAU,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,QAAkB,EAAE,WAAoB,EAAE,EAAE;IACrF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC;QAC3B,QAAQ;QACR,OAAO,EAAE,CAAC;QACV,WAAW;KACZ,CAAC,CAAA;IACF,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;IACpC,MAAM,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;IAE5C,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAA;IACnC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAA;IAEzB,MAAM,OAAO,GAAG,kEAAkE,CAAA;IAElF,MAAM,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACxE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;IACpC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;IACrB,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;IACpC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACzG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,CAAU,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IACvD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAA;IAC5C,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;IACpC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACzG,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,GAAG,CAAU,CAAA;AAC1C,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":"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"}
|