twitter-snap 0.0.15 → 0.0.17
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 +43 -54
- package/bin/dev.cmd +3 -0
- package/bin/dev.js +5 -0
- package/bin/run.cmd +3 -0
- package/bin/run.js +5 -0
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +13 -35
- package/dist/cli.js.map +1 -1
- package/dist/commands/index.d.ts +24 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +99 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/core/core.d.ts +29 -0
- package/dist/core/core.d.ts.map +1 -0
- package/dist/core/core.js +133 -0
- package/dist/core/core.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/fonts.d.ts +0 -4
- package/dist/utils/fonts.d.ts.map +1 -1
- package/dist/utils/fonts.js +26 -12
- package/dist/utils/fonts.js.map +1 -1
- package/dist/utils/logger.d.ts +21 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +130 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/types.d.ts +8 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +4 -0
- package/dist/utils/types.js.map +1 -0
- package/oclif.manifest.json +133 -0
- package/package.json +67 -21
- package/.eslintrc.json +0 -4
- package/.vscode/settings.json +0 -3
- package/dist/app/api/twitter/route.d.ts +0 -3
- package/dist/app/api/twitter/route.d.ts.map +0 -1
- package/dist/app/api/twitter/route.js +0 -19
- package/dist/app/api/twitter/route.js.map +0 -1
- package/dist/app/layout.d.ts +0 -7
- package/dist/app/layout.d.ts.map +0 -1
- package/dist/app/layout.js +0 -11
- package/dist/app/layout.js.map +0 -1
- package/dist/app/page.d.ts +0 -2
- package/dist/app/page.d.ts.map +0 -1
- package/dist/app/page.js +0 -22
- package/dist/app/page.js.map +0 -1
- package/dist/core/twitterSnap.d.ts +0 -49
- package/dist/core/twitterSnap.d.ts.map +0 -1
- package/dist/core/twitterSnap.js +0 -62
- package/dist/core/twitterSnap.js.map +0 -1
- package/dist/theme/normal.d.ts +0 -4
- package/dist/theme/normal.d.ts.map +0 -1
- package/dist/theme/normal.js +0 -52
- package/dist/theme/normal.js.map +0 -1
- package/dist/theme/normalComponent.d.ts +0 -4
- package/dist/theme/normalComponent.d.ts.map +0 -1
- package/dist/theme/normalComponent.js +0 -257
- package/dist/theme/normalComponent.js.map +0 -1
- package/dist/theme/normalUtils.d.ts +0 -19
- package/dist/theme/normalUtils.d.ts.map +0 -1
- package/dist/theme/normalUtils.js +0 -114
- package/dist/theme/normalUtils.js.map +0 -1
- package/dist/utils/cookies.d.ts +0 -2
- package/dist/utils/cookies.d.ts.map +0 -1
- package/dist/utils/cookies.js +0 -12
- package/dist/utils/cookies.js.map +0 -1
- package/docs/img/output.png +0 -0
- package/next-env.d.ts +0 -5
- package/next.config.cjs +0 -5
- package/test/test.ps1 +0 -21
- package/tsconfig.build.json +0 -25
- package/tsconfig.json +0 -40
package/README.md
CHANGED
|
@@ -16,61 +16,50 @@ npx twitter-snap 1518623997054918657
|
|
|
16
16
|
## Arguments
|
|
17
17
|
|
|
18
18
|
```shell
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
--
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
"theme": "normal",
|
|
62
|
-
"lang": "ja-JP"
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
"data": "NotoSansJP-Bold.ttf",
|
|
66
|
-
"name": "Noto Sans JP",
|
|
67
|
-
"weight": 700,
|
|
68
|
-
"theme": "normal",
|
|
69
|
-
"lang": "ja-JP"
|
|
70
|
-
}
|
|
71
|
-
]
|
|
19
|
+
$ bin/run --help
|
|
20
|
+
Create beautiful Tweet images fast
|
|
21
|
+
|
|
22
|
+
USAGE
|
|
23
|
+
$ twitter-snap ID [--api
|
|
24
|
+
getTweetResultByRestId|getTweetDetail|getSearchTimeline|getHomeTimeline|getHomeLatestTimeline|getListLatestTweetsTimeline|getUserTweets|getUserTweetsAndReplies|getUserMedia|getLikes|ge
|
|
25
|
+
tBookmarks] [--theme RenderBasic] [-o <value>] [--cleanup] [--max <value>] [--debug] [--sleep <value>] [--session_type <value>] [--cookies_file <value>] [--browser_profile <value>]
|
|
26
|
+
[--browser_headless]
|
|
27
|
+
|
|
28
|
+
ARGUMENTS
|
|
29
|
+
ID Twitter status id
|
|
30
|
+
|
|
31
|
+
FLAGS
|
|
32
|
+
-o, --output=<value> [default: {id}.{if-photo:png:mp4}] Output file name
|
|
33
|
+
--api=<option> [default: getTweetResultByRestId] API type
|
|
34
|
+
<options: getTweetResultByRestId|getTweetDetail|getSearchTimeline|getHomeTimeline|getHomeLatestTimeline|getListLatestTweetsTimeline|getUserTweets|getUserTw
|
|
35
|
+
eetsAndReplies|getUserMedia|getLikes|getBookmarks>
|
|
36
|
+
--browser_headless Browser headless
|
|
37
|
+
--browser_profile=<value> [default: C:\Users\yuki/.cache/twitter-snap/profiles] Browser profile
|
|
38
|
+
--cleanup Cleanup
|
|
39
|
+
--cookies_file=<value> [default: cookies.json] Cookies file
|
|
40
|
+
--debug Debug
|
|
41
|
+
--max=<value> [default: 30] Max count
|
|
42
|
+
--session_type=<value> [default: guest] Session type
|
|
43
|
+
--sleep=<value> Sleep (ms)
|
|
44
|
+
--theme=<option> [default: RenderBasic] Theme type
|
|
45
|
+
<options: RenderBasic>
|
|
46
|
+
|
|
47
|
+
DESCRIPTION
|
|
48
|
+
Create beautiful Tweet images fast
|
|
49
|
+
https://github.com/fa0311/twitter-snap
|
|
50
|
+
|
|
51
|
+
EXAMPLES
|
|
52
|
+
$ twitter-snap 1765415187161464972
|
|
53
|
+
|
|
54
|
+
$ twitter-snap 1765415187161464972 --session_type browser
|
|
55
|
+
|
|
56
|
+
$ twitter-snap 1765415187161464972 --session_type file --cookies_file cookies.json
|
|
57
|
+
|
|
58
|
+
$ twitter-snap 44196397 --api getUserTweets --max 10
|
|
59
|
+
|
|
60
|
+
$ twitter-snap 44196397 --api getUserTweets --output "data/{user-screen-name}/{id}.{if-photo:png:mp4}"
|
|
72
61
|
```
|
|
73
62
|
|
|
74
63
|
## Dependence
|
|
75
64
|
|
|
76
|
-
- [ffmpeg](https://ffmpeg.org/) (for video)
|
|
65
|
+
- [ffmpeg](https://ffmpeg.org/) (for video)
|
package/bin/dev.cmd
ADDED
package/bin/dev.js
ADDED
package/bin/run.cmd
ADDED
package/bin/run.js
ADDED
package/dist/cli.d.ts
CHANGED
package/dist/cli.js
CHANGED
|
@@ -1,38 +1,16 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
.option("-h, --height <number>", "image height")
|
|
15
|
-
.option("-t, --theme <string>", Object.keys(TwitterSnap.themes).join())
|
|
16
|
-
.option("--margin <number>", "margin")
|
|
17
|
-
.option("--fonts <path>", "font config file path .json")
|
|
18
|
-
.option("--emoji <string>", `emoji type ${emoji}`, "twemoji")
|
|
19
|
-
.option("--cookies <path>", "net escape cookie file path .txt")
|
|
20
|
-
.option("--auto-photo", "if the tweet is not a video, save it as an image")
|
|
21
|
-
.option("--no-remove-temp", "no remove temp file")
|
|
22
|
-
.action(async (text, param) => {
|
|
23
|
-
const id = isNaN(text) ? text.split("/").pop() : text;
|
|
24
|
-
const twitterSnap = new TwitterSnap({
|
|
25
|
-
width: parseInt(param.width),
|
|
26
|
-
height: param.height ? parseInt(param.height) : undefined,
|
|
27
|
-
client: param.cookies ? await getClient(param.cookies) : undefined,
|
|
28
|
-
themeName: param.theme,
|
|
29
|
-
fonts: param.fonts ? await getFonts(param.fonts) : undefined,
|
|
30
|
-
emoji: param.emoji ? param.emoji : undefined,
|
|
31
|
-
autoPhoto: param.autoPhoto ? true : false,
|
|
32
|
-
removeTemp: param.removeTemp ? true : false,
|
|
1
|
+
// #!/usr/bin/env node
|
|
2
|
+
import { twitterSnapPuppeteer } from './core/core';
|
|
3
|
+
const snap = await twitterSnapPuppeteer();
|
|
4
|
+
await snap({ id: '900282258736545792', type: 'getLikes', max: 100 }, async (render) => {
|
|
5
|
+
const finalize = await render({
|
|
6
|
+
themeName: 'RenderBasic',
|
|
7
|
+
themeParam: {
|
|
8
|
+
width: 600,
|
|
9
|
+
},
|
|
10
|
+
output: 'temp/{id}.png',
|
|
11
|
+
});
|
|
12
|
+
await finalize({
|
|
13
|
+
cleanup: true,
|
|
33
14
|
});
|
|
34
|
-
await twitterSnap.render({ output: param.output, id });
|
|
35
|
-
process.exit(0);
|
|
36
15
|
});
|
|
37
|
-
program.parse(process.argv);
|
|
38
16
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAA;AAEhD,MAAM,IAAI,GAAG,MAAM,oBAAoB,EAAE,CAAA;AACzC,MAAM,IAAI,CAAC,EAAC,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAClF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;QAC5B,SAAS,EAAE,aAAa;QACxB,UAAU,EAAE;YACV,KAAK,EAAE,GAAG;SACX;QACD,MAAM,EAAE,eAAe;KACxB,CAAC,CAAA;IACF,MAAM,QAAQ,CAAC;QACb,OAAO,EAAE,IAAI;KACd,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
export default class Default extends Command {
|
|
3
|
+
static args: {
|
|
4
|
+
id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
|
|
5
|
+
};
|
|
6
|
+
static description: string;
|
|
7
|
+
static examples: string[];
|
|
8
|
+
static browser_profile: string;
|
|
9
|
+
static flags: {
|
|
10
|
+
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
|
+
theme: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<"RenderBasic", import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
12
|
+
output: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
13
|
+
cleanup: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
14
|
+
max: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
15
|
+
debug: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
16
|
+
sleep: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
17
|
+
session_type: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<"guest" | "browser" | "file", import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
18
|
+
cookies_file: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
19
|
+
browser_profile: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
|
|
20
|
+
browser_headless: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
|
|
21
|
+
};
|
|
22
|
+
run(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,OAAO,EAAQ,MAAM,aAAa,CAAA;AAwBhD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAC,IAAI;;MAEV;IAED,MAAM,CAAC,WAAW,SAA8F;IAChH,MAAM,CAAC,QAAQ,WAMd;IAED,MAAM,CAAC,eAAe,SAAiD;IAEvE,MAAM,CAAC,KAAK;;;;;;;;;;;;MAYX;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwD3B"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import { Args, Command, Flags } from '@oclif/core';
|
|
3
|
+
import os from 'os';
|
|
4
|
+
import { themeList } from 'twitter-snap-core';
|
|
5
|
+
import { twitterSnapCookies, twitterSnapGuest, twitterSnapPuppeteer } from '../core/core.js';
|
|
6
|
+
import { Logger } from '../utils/logger.js';
|
|
7
|
+
import { getTweetList } from './../utils/types.js';
|
|
8
|
+
const apiFlag = Flags.custom({
|
|
9
|
+
description: 'API type',
|
|
10
|
+
options: ['getTweetResultByRestId', ...getTweetList],
|
|
11
|
+
default: 'getTweetResultByRestId',
|
|
12
|
+
});
|
|
13
|
+
const themeNameFlag = Flags.custom({
|
|
14
|
+
description: 'Theme type',
|
|
15
|
+
options: Object.keys(themeList),
|
|
16
|
+
default: 'RenderBasic',
|
|
17
|
+
});
|
|
18
|
+
const sessionType = Flags.custom({
|
|
19
|
+
description: 'Session type',
|
|
20
|
+
default: 'guest',
|
|
21
|
+
});
|
|
22
|
+
class Default extends Command {
|
|
23
|
+
async run() {
|
|
24
|
+
const { args, flags } = await this.parse(_a);
|
|
25
|
+
const logger = new Logger();
|
|
26
|
+
console.log = flags.debug ? logger.log.bind(logger) : (_) => { };
|
|
27
|
+
const getClient = (() => {
|
|
28
|
+
switch (flags.session_type) {
|
|
29
|
+
case 'guest':
|
|
30
|
+
return twitterSnapGuest();
|
|
31
|
+
case 'browser':
|
|
32
|
+
return twitterSnapPuppeteer(flags.browser_headless, flags.browser_profile);
|
|
33
|
+
case 'file':
|
|
34
|
+
return twitterSnapCookies(flags.cookies_file);
|
|
35
|
+
}
|
|
36
|
+
})();
|
|
37
|
+
const client = await logger.guard({ text: 'Loading Client' }, getClient);
|
|
38
|
+
const logHandler = async ({ type, user, id }) => {
|
|
39
|
+
switch (type) {
|
|
40
|
+
case 'start':
|
|
41
|
+
return logger.update(`Rendering tweet ${user}/${id}`);
|
|
42
|
+
case 'image':
|
|
43
|
+
return logger.update(`Rendering image ${user}/${id}`);
|
|
44
|
+
case 'video':
|
|
45
|
+
return logger.update(`Rendering video ${user}/${id}`);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const sleep = async (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
49
|
+
const render = client({ id: args.id, type: flags.api, max: flags.max }, async (render) => {
|
|
50
|
+
try {
|
|
51
|
+
const finalize = await render({
|
|
52
|
+
themeName: flags.theme,
|
|
53
|
+
themeParam: {
|
|
54
|
+
width: 600,
|
|
55
|
+
},
|
|
56
|
+
output: flags.output,
|
|
57
|
+
handler: logHandler,
|
|
58
|
+
});
|
|
59
|
+
await finalize({
|
|
60
|
+
cleanup: true,
|
|
61
|
+
});
|
|
62
|
+
logger.succeed();
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
logger.error(e);
|
|
66
|
+
}
|
|
67
|
+
await sleep(flags.sleep);
|
|
68
|
+
});
|
|
69
|
+
await logger.guardProgress({ text: 'Rendering tweet', max: flags.max }, render);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
_a = Default;
|
|
73
|
+
Default.args = {
|
|
74
|
+
id: Args.string({ description: 'Twitter status id', required: true }),
|
|
75
|
+
};
|
|
76
|
+
Default.description = ['Create beautiful Tweet images fast', 'https://github.com/fa0311/twitter-snap'].join('\n');
|
|
77
|
+
Default.examples = [
|
|
78
|
+
'twitter-snap 1765415187161464972',
|
|
79
|
+
'twitter-snap 1765415187161464972 --session_type browser',
|
|
80
|
+
'twitter-snap 1765415187161464972 --session_type file --cookies_file cookies.json',
|
|
81
|
+
'twitter-snap 44196397 --api getUserTweets --max 10',
|
|
82
|
+
'twitter-snap 44196397 --api getUserTweets --output "data/{user-screen-name}/{id}.{if-photo:png:mp4}"',
|
|
83
|
+
];
|
|
84
|
+
Default.browser_profile = `${os.homedir()}/.cache/twitter-snap/profiles`;
|
|
85
|
+
Default.flags = {
|
|
86
|
+
api: apiFlag(),
|
|
87
|
+
theme: themeNameFlag(),
|
|
88
|
+
output: Flags.string({ char: 'o', description: 'Output file name', default: '{id}.{if-photo:png:mp4}' }),
|
|
89
|
+
cleanup: Flags.boolean({ description: 'Cleanup', default: true }),
|
|
90
|
+
max: Flags.integer({ description: 'Max count', default: 30 }),
|
|
91
|
+
debug: Flags.boolean({ description: 'Debug', default: false }),
|
|
92
|
+
sleep: Flags.integer({ description: 'Sleep (ms)', default: 0 }),
|
|
93
|
+
session_type: sessionType(),
|
|
94
|
+
cookies_file: Flags.file({ description: 'Cookies file', default: 'cookies.json' }),
|
|
95
|
+
browser_profile: Flags.string({ description: 'Browser profile', default: _a.browser_profile }),
|
|
96
|
+
browser_headless: Flags.boolean({ description: 'Browser headless', default: false }),
|
|
97
|
+
};
|
|
98
|
+
export default Default;
|
|
99
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { TweetApiUtilsData } from 'twitter-openapi-typescript';
|
|
2
|
+
import { ThemeNameType } from 'twitter-snap-core';
|
|
3
|
+
import { GetTweetApi, ThemeParamType } from '../utils/types.js';
|
|
4
|
+
export declare const twitterSnapGuest: () => Promise<({ id, type, max }: tweetApiSnapParam, handler: (e: ReturnType<typeof twitterRender>) => Promise<void>) => Promise<void>>;
|
|
5
|
+
export declare const twitterSnapPuppeteer: (headless?: boolean, userDataDir?: string) => Promise<({ id, type, max }: tweetApiSnapParam, handler: (e: ReturnType<typeof twitterRender>) => Promise<void>) => Promise<void>>;
|
|
6
|
+
export declare const twitterSnapCookies: (path: string) => Promise<({ id, type, max }: tweetApiSnapParam, handler: (e: ReturnType<typeof twitterRender>) => Promise<void>) => Promise<void>>;
|
|
7
|
+
type tweetApiSnapParam = {
|
|
8
|
+
id: string;
|
|
9
|
+
type?: 'getTweetResultByRestId' | keyof GetTweetApi;
|
|
10
|
+
max: number;
|
|
11
|
+
};
|
|
12
|
+
type HandlerTypeLiteral = 'start' | 'image' | 'video';
|
|
13
|
+
export type HandlerType = {
|
|
14
|
+
type: HandlerTypeLiteral;
|
|
15
|
+
user: string;
|
|
16
|
+
id: string;
|
|
17
|
+
};
|
|
18
|
+
type twitterRenderParam = {
|
|
19
|
+
themeName: ThemeNameType;
|
|
20
|
+
themeParam: ThemeParamType;
|
|
21
|
+
output: string;
|
|
22
|
+
handler?: (e: HandlerType) => void;
|
|
23
|
+
};
|
|
24
|
+
declare const twitterRender: (data: TweetApiUtilsData) => ({ themeName, themeParam, output, handler }: twitterRenderParam) => Promise<({ cleanup }: FinalizeParam) => Promise<void>>;
|
|
25
|
+
type FinalizeParam = {
|
|
26
|
+
cleanup: boolean;
|
|
27
|
+
};
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,iBAAiB,EAAuC,MAAM,4BAA4B,CAAA;AAGlG,OAAO,EAAC,aAAa,EAAY,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAC,WAAW,EAAE,cAAc,EAAe,MAAM,mBAAmB,CAAA;AAE3E,eAAO,MAAM,gBAAgB,oCA4CR,iBAAiB,eACrB,WAAW,oBAAoB,CAAC,KAAK,QAAQ,IAAI,CAAC,mBAzClE,CAAA;AAED,eAAO,MAAM,oBAAoB,cAAqB,OAAO,gBAAgB,MAAM,iCAsC9D,iBAAiB,eACrB,WAAW,oBAAoB,CAAC,KAAK,QAAQ,IAAI,CAAC,mBAnBlE,CAAA;AAED,eAAO,MAAM,kBAAkB,SAAgB,MAAM,iCAgBhC,iBAAiB,eACrB,WAAW,oBAAoB,CAAC,KAAK,QAAQ,IAAI,CAAC,mBAXlE,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,wBAAwB,GAAG,MAAM,WAAW,CAAA;IACnD,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AA4CD,KAAK,kBAAkB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AACrD,MAAM,MAAM,WAAW,GAAG;IAAC,IAAI,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC,CAAA;AAE9E,KAAK,kBAAkB,GAAG;IACxB,SAAS,EAAE,aAAa,CAAA;IACxB,UAAU,EAAE,cAAc,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;CACnC,CAAA;AAED,QAAA,MAAM,aAAa,SAAU,iBAAiB,kDAKY,kBAAkB,2BAsDjD,aAAa,mBANvC,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { ImageResponse } from '@vercel/og';
|
|
2
|
+
import { promises as fs } from 'fs';
|
|
3
|
+
import { TwitterOpenApi } from 'twitter-openapi-typescript';
|
|
4
|
+
import puppeteer from 'puppeteer';
|
|
5
|
+
import { themeList } from 'twitter-snap-core';
|
|
6
|
+
import { getTweetList } from '../utils/types.js';
|
|
7
|
+
export const twitterSnapGuest = async () => {
|
|
8
|
+
const twitter = new TwitterOpenApi();
|
|
9
|
+
const api = await twitter.getGuestClient();
|
|
10
|
+
return tweetApiSnap(api);
|
|
11
|
+
};
|
|
12
|
+
export const twitterSnapPuppeteer = async (headless, userDataDir) => {
|
|
13
|
+
const browser = await puppeteer.launch({
|
|
14
|
+
headless: headless,
|
|
15
|
+
timeout: 0,
|
|
16
|
+
userDataDir: userDataDir,
|
|
17
|
+
});
|
|
18
|
+
const [page] = await browser.pages();
|
|
19
|
+
await page.goto('https://twitter.com/login');
|
|
20
|
+
page.setDefaultNavigationTimeout(0);
|
|
21
|
+
page.setDefaultTimeout(0);
|
|
22
|
+
await page.waitForResponse((res) => {
|
|
23
|
+
return RegExp('https://twitter.com/i/api/graphql/[a-zA-Z0-9_-]+/HomeTimeline?.*').test(res.url());
|
|
24
|
+
});
|
|
25
|
+
const cookies = await page.cookies();
|
|
26
|
+
await browser.close();
|
|
27
|
+
const twitter = new TwitterOpenApi();
|
|
28
|
+
const api = await twitter.getClientFromCookies(cookies.reduce((acc, e) => ({ ...acc, [e.name]: e.value }), {}));
|
|
29
|
+
return tweetApiSnap(api);
|
|
30
|
+
};
|
|
31
|
+
export const twitterSnapCookies = async (path) => {
|
|
32
|
+
const data = await fs.readFile(path, 'utf-8');
|
|
33
|
+
const cookies = JSON.parse(data);
|
|
34
|
+
const twitter = new TwitterOpenApi();
|
|
35
|
+
const api = await twitter.getClientFromCookies(cookies.reduce((acc, e) => ({ ...acc, [e.name]: e.value }), {}));
|
|
36
|
+
return tweetApiSnap(api);
|
|
37
|
+
};
|
|
38
|
+
const tweetApiSnap = (client) => {
|
|
39
|
+
return async ({ id, type, max }, handler) => {
|
|
40
|
+
const key = getTweetList.find((k) => k == type);
|
|
41
|
+
if (key) {
|
|
42
|
+
const that = client.getTweetApi();
|
|
43
|
+
const api = that[key].bind(that);
|
|
44
|
+
let count = 0;
|
|
45
|
+
const cursor = [];
|
|
46
|
+
while (count < max) {
|
|
47
|
+
const res = await api({
|
|
48
|
+
focalTweetId: id,
|
|
49
|
+
rawQuery: id,
|
|
50
|
+
listId: id,
|
|
51
|
+
userId: id,
|
|
52
|
+
cursor: cursor.length ? cursor.pop() : undefined,
|
|
53
|
+
});
|
|
54
|
+
for (const e of res.data.data) {
|
|
55
|
+
if (e.promotedMetadata)
|
|
56
|
+
continue;
|
|
57
|
+
if (count >= max)
|
|
58
|
+
return;
|
|
59
|
+
await handler(twitterRender(e));
|
|
60
|
+
count++;
|
|
61
|
+
}
|
|
62
|
+
if (res.data.cursor.bottom) {
|
|
63
|
+
cursor.push(res.data.cursor.bottom?.value);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
const res = await client.getDefaultApi().getTweetResultByRestId({
|
|
72
|
+
tweetId: id,
|
|
73
|
+
});
|
|
74
|
+
if (res.data)
|
|
75
|
+
await handler(twitterRender(res.data));
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
const twitterRender = (data) => {
|
|
80
|
+
const extEntities = data.tweet.legacy?.extendedEntities;
|
|
81
|
+
const extMedia = extEntities?.media ?? [];
|
|
82
|
+
const isVideoData = !!extMedia.find((e) => e.type !== 'photo');
|
|
83
|
+
return async ({ themeName, themeParam, output, handler }) => {
|
|
84
|
+
handler && handler({ type: 'start', user: data.user.legacy.screenName, id: data.tweet.restId });
|
|
85
|
+
const theme = Object.entries(themeList).find(([k, _]) => k == themeName)?.[1];
|
|
86
|
+
const replacData = [
|
|
87
|
+
['{id}', data.tweet.restId],
|
|
88
|
+
['{user-screen-name}', data.user.legacy.screenName],
|
|
89
|
+
['{if-photo:(?<true>.+?):(?<false>.+?)}', isVideoData ? '$2' : '$1'],
|
|
90
|
+
];
|
|
91
|
+
const repOutput = replacData.reduce((acc, [k, v]) => acc.replace(new RegExp(k, 'g'), v), output);
|
|
92
|
+
const video = repOutput.split('.').pop() != 'png';
|
|
93
|
+
const pngOutput = video ? repOutput.replace(/\.\w+$/, '.png') : repOutput;
|
|
94
|
+
const render = new theme({
|
|
95
|
+
...themeParam,
|
|
96
|
+
video: video,
|
|
97
|
+
});
|
|
98
|
+
handler && handler({ type: 'image', user: data.user.legacy.screenName, id: data.tweet.restId });
|
|
99
|
+
const element = render.imageRender({
|
|
100
|
+
data: data,
|
|
101
|
+
});
|
|
102
|
+
const img = new ImageResponse(element, {
|
|
103
|
+
width: themeParam.width,
|
|
104
|
+
height: undefined,
|
|
105
|
+
emoji: 'twemoji',
|
|
106
|
+
});
|
|
107
|
+
const png = Buffer.from(await img.arrayBuffer());
|
|
108
|
+
if (pngOutput.split('/').length > 1) {
|
|
109
|
+
await fs.mkdir(pngOutput.split('/').slice(0, -1).join('/'), { recursive: true });
|
|
110
|
+
}
|
|
111
|
+
await fs.writeFile(pngOutput, png);
|
|
112
|
+
if (video) {
|
|
113
|
+
handler && handler({ type: 'video', user: data.user.legacy.screenName, id: data.tweet.restId });
|
|
114
|
+
const res = await render.videoRender({
|
|
115
|
+
data: data,
|
|
116
|
+
image: pngOutput,
|
|
117
|
+
output: repOutput,
|
|
118
|
+
});
|
|
119
|
+
return finalize(res.temp);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
return finalize([]);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
const finalize = async (temp) => {
|
|
127
|
+
return async ({ cleanup }) => {
|
|
128
|
+
if (cleanup) {
|
|
129
|
+
temp.forEach(async (e) => await fs.unlink(e));
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAA"}
|