Skip to content

Commit 88d6c28

Browse files
committed
add post api
Signed-off-by: ふぁ <yuki@yuki0311.com>
1 parent 6cfd48c commit 88d6c28

File tree

2 files changed

+184
-29
lines changed

2 files changed

+184
-29
lines changed

twitter-openapi-typescript/src/apis/postApi.ts

Lines changed: 141 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,36 @@ import { DefaultFlag } from '@/types';
33
import { buildHeader, entriesCursor } from '@/models/api';
44
import { TwitterApiUtilsResponse } from '@/types/response';
55

6+
type Response<T> = Promise<TwitterApiUtilsResponse<T>>;
7+
68
type PostCreateTweetParam = {
79
tweetText: string;
10+
extraParam?: { [key: string]: any };
11+
};
12+
13+
type PostDeleteTweetParam = {
14+
tweetId: string;
15+
extraParam?: { [key: string]: any };
16+
};
17+
18+
type PostCreateRetweetParam = {
19+
tweetId: string;
20+
extraParam?: { [key: string]: any };
21+
};
22+
23+
type PostDeleteRetweetParam = {
24+
sourceTweetId: string;
25+
extraParam?: { [key: string]: any };
26+
};
27+
28+
type PostFavoriteTweetParam = {
29+
tweetId: string;
30+
extraParam?: { [key: string]: any };
31+
};
32+
33+
type PostUnfavoriteTweetParam = {
34+
tweetId: string;
35+
extraParam?: { [key: string]: any };
836
};
937

1038
export class PostApiUtils {
@@ -16,39 +44,126 @@ export class PostApiUtils {
1644
this.flag = flag;
1745
}
1846

19-
mergeDefaultValue<T>(defaultValue: T | undefined, value: T | undefined): T {
20-
if (value == undefined) return defaultValue;
21-
if (defaultValue == undefined) return value;
22-
if (typeof defaultValue === 'object') {
23-
if (Array.isArray(value)) {
24-
return value.map((v) => this.mergeDefaultValue(defaultValue[0], v)) as T;
25-
} else {
26-
const key = [...Object.keys(defaultValue), ...Object.keys(value)];
27-
return key.reduce((v, k) => ({ ...v, [k]: this.mergeDefaultValue(defaultValue[k], value[k]) }), <T>{});
28-
}
29-
}
30-
return value;
47+
async postCreateTweet(param: PostCreateTweetParam): Promise<TwitterApiUtilsResponse<i.CreateTweetResponse>> {
48+
const args = {
49+
tweetText: param.tweetText,
50+
...param.extraParam,
51+
};
52+
const queryId = 'CreateTweet';
53+
const features = i.PostCreateTweetRequestFeaturesFromJSON(this.flag[queryId]['features']);
54+
const variables = i.PostCreateTweetRequestVariablesFromJSON(this.flag[queryId]['variables']);
55+
const response = await this.api.postCreateTweetRaw({
56+
postCreateTweetRequest: {
57+
queryId: queryId,
58+
features: features,
59+
variables: { ...variables, ...args },
60+
},
61+
});
62+
return {
63+
raw: { response: response.raw },
64+
header: buildHeader(response.raw.headers),
65+
data: await response.value(),
66+
};
3167
}
3268

33-
async postCreateTweet(param: PostCreateTweetParam): Promise<TwitterApiUtilsResponse<i.CreateTweetResponse>> {
34-
const value = this.mergeDefaultValue(i.PostCreateTweetRequestFromJSON(this.flag.CreateTweet), {
35-
variables: {
36-
tweetText: param.tweetText,
37-
darkRequest: undefined,
38-
media: undefined,
39-
semanticAnnotationIds: undefined,
69+
async postDeleteTweet(param: PostDeleteTweetParam): Promise<TwitterApiUtilsResponse<i.DeleteTweetResponse>> {
70+
const args = {
71+
tweetId: param.tweetId,
72+
...param.extraParam,
73+
};
74+
const queryId = 'DeleteTweet';
75+
const variables = i.PostDeleteTweetRequestVariablesFromJSON(this.flag[queryId]['variables']);
76+
const response = await this.api.postDeleteTweetRaw({
77+
postDeleteTweetRequest: {
78+
queryId: queryId,
79+
variables: { ...variables, ...args },
4080
},
41-
features: undefined,
42-
queryId: undefined,
4381
});
44-
const response = await this.api.postCreateTweetRaw({
45-
postCreateTweetRequest: value,
82+
return {
83+
raw: { response: response.raw },
84+
header: buildHeader(response.raw.headers),
85+
data: await response.value(),
86+
};
87+
}
88+
89+
async postCreateRetweet(param: PostCreateRetweetParam): Promise<TwitterApiUtilsResponse<i.CreateRetweetResponse>> {
90+
const args = {
91+
tweetId: param.tweetId,
92+
...param.extraParam,
93+
};
94+
const queryId = 'CreateRetweet';
95+
const variables = i.PostCreateTweetRequestVariablesFromJSON(this.flag[queryId]['variables']);
96+
const response = await this.api.postCreateRetweetRaw({
97+
postCreateRetweetRequest: {
98+
queryId: queryId,
99+
variables: { ...variables, ...args },
100+
},
101+
});
102+
return {
103+
raw: { response: response.raw },
104+
header: buildHeader(response.raw.headers),
105+
data: await response.value(),
106+
};
107+
}
108+
async postDeleteRetweet(param: PostDeleteRetweetParam): Promise<TwitterApiUtilsResponse<i.DeleteRetweetResponse>> {
109+
const args = {
110+
sourceTweetId: param.sourceTweetId,
111+
...param.extraParam,
112+
};
113+
const queryId = 'DeleteRetweet';
114+
const variables = i.PostDeleteRetweetRequestVariablesFromJSON(this.flag[queryId]['variables']);
115+
const response = await this.api.postDeleteRetweetRaw({
116+
postDeleteRetweetRequest: {
117+
queryId: queryId,
118+
variables: { ...variables, ...args },
119+
},
120+
});
121+
return {
122+
raw: { response: response.raw },
123+
header: buildHeader(response.raw.headers),
124+
data: await response.value(),
125+
};
126+
}
127+
128+
async postFavoriteTweet(
129+
param: PostFavoriteTweetParam,
130+
): Promise<TwitterApiUtilsResponse<i.FavoriteTweetResponseData>> {
131+
const args = {
132+
tweetId: param.tweetId,
133+
...param.extraParam,
134+
};
135+
const queryId = 'FavoriteTweet';
136+
const variables = i.PostDeleteTweetRequestVariablesFromJSON(this.flag[queryId]['variables']);
137+
const response = await this.api.postFavoriteTweetRaw({
138+
postFavoriteTweetRequest: {
139+
queryId: queryId,
140+
variables: { ...variables, ...args },
141+
},
46142
});
47-
const raw = {
48-
response: response.raw,
143+
return {
144+
raw: { response: response.raw },
145+
header: buildHeader(response.raw.headers),
146+
data: await response.value(),
49147
};
148+
}
149+
150+
async postUnfavoriteTweet(
151+
param: PostUnfavoriteTweetParam,
152+
): Promise<TwitterApiUtilsResponse<i.UnfavoriteTweetResponseData>> {
153+
const args = {
154+
tweetId: param.tweetId,
155+
...param.extraParam,
156+
};
157+
const queryId = 'UnfavoriteTweet';
158+
const variables = i.PostDeleteTweetRequestVariablesFromJSON(this.flag[queryId]['variables']);
159+
const response = await this.api.postUnfavoriteTweetRaw({
160+
postUnfavoriteTweetRequest: {
161+
queryId: queryId,
162+
variables: { ...variables, ...args },
163+
},
164+
});
50165
return {
51-
raw: raw,
166+
raw: { response: response.raw },
52167
header: buildHeader(response.raw.headers),
53168
data: await response.value(),
54169
};

twitter-openapi-typescript/test/api/postApi.test.ts

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,47 @@ test('postCreateTweet', async () => {
44
logger.log('postCreateTweet');
55
const client = await getClient();
66
const time = new Date().toISOString();
7-
const text = `Tweets from twitter-openapi-typescript🎉\n${time}`;
8-
const response = await client.getPostApi().postCreateTweet({ tweetText: text });
9-
expect(0).toBe(0);
7+
const response = await client.getPostApi().postCreateTweet({ tweetText: `Test[${time}]` });
8+
expect(response.raw.response.ok).toBe(true);
9+
});
10+
11+
test('postDeleteTweet', async () => {
12+
logger.log('postDeleteTweet');
13+
const client = await getClient();
14+
const time = new Date().toISOString();
15+
const response = await client.getPostApi().postCreateTweet({ tweetText: `Test[${time}]` });
16+
expect(response.raw.response.ok).toBe(true);
17+
const tweetId = response.data.data.createTweet.tweetResults.result.restId;
18+
logger.log(tweetId);
19+
20+
const response2 = await client.getPostApi().postDeleteTweet({ tweetId: tweetId });
21+
expect(response2.raw.response.ok).toBe(true);
22+
});
23+
24+
test('postCreateRetweet', async () => {
25+
logger.log('postCreateRetweet');
26+
const client = await getClient();
27+
const response = await client.getPostApi().postCreateRetweet({ tweetId: '1349129669258448897' });
28+
expect(response.raw.response.ok).toBe(true);
29+
});
30+
31+
test('postDeleteRetweet', async () => {
32+
logger.log('postDeleteRetweet');
33+
const client = await getClient();
34+
const response = await client.getPostApi().postDeleteRetweet({ sourceTweetId: '1349129669258448897' });
35+
expect(response.raw.response.ok).toBe(true);
36+
});
37+
38+
test('postFavoriteTweet', async () => {
39+
logger.log('postFavoriteTweet');
40+
const client = await getClient();
41+
const response = await client.getPostApi().postFavoriteTweet({ tweetId: '1349129669258448897' });
42+
expect(response.raw.response.ok).toBe(true);
43+
});
44+
45+
test('postUnfavoriteTweet', async () => {
46+
logger.log('postUnfavoriteTweet');
47+
const client = await getClient();
48+
const response = await client.getPostApi().postUnfavoriteTweet({ tweetId: '1349129669258448897' });
49+
expect(response.raw.response.ok).toBe(true);
1050
});

0 commit comments

Comments
 (0)