@the-convocation/twitter-scraper 0.1.5 → 0.3.0

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.
Files changed (66) hide show
  1. package/dist/_module.d.ts +1 -1
  2. package/dist/_module.d.ts.map +1 -1
  3. package/dist/api.d.ts +19 -3
  4. package/dist/api.d.ts.map +1 -1
  5. package/dist/api.js +61 -45
  6. package/dist/api.js.map +1 -1
  7. package/dist/auth-user.d.ts +2 -3
  8. package/dist/auth-user.d.ts.map +1 -1
  9. package/dist/auth-user.js +176 -176
  10. package/dist/auth-user.js.map +1 -1
  11. package/dist/auth.d.ts +4 -7
  12. package/dist/auth.d.ts.map +1 -1
  13. package/dist/auth.js +44 -48
  14. package/dist/auth.js.map +1 -1
  15. package/dist/errors.d.ts +3 -4
  16. package/dist/errors.d.ts.map +1 -1
  17. package/dist/errors.js.map +1 -1
  18. package/dist/profile.d.ts.map +1 -1
  19. package/dist/profile.js +56 -67
  20. package/dist/profile.js.map +1 -1
  21. package/dist/requests.d.ts +9 -0
  22. package/dist/requests.d.ts.map +1 -0
  23. package/dist/requests.js +26 -0
  24. package/dist/requests.js.map +1 -0
  25. package/dist/scraper.d.ts +13 -13
  26. package/dist/scraper.d.ts.map +1 -1
  27. package/dist/scraper.js +49 -69
  28. package/dist/scraper.js.map +1 -1
  29. package/dist/search.d.ts +4 -4
  30. package/dist/search.d.ts.map +1 -1
  31. package/dist/search.js +62 -62
  32. package/dist/search.js.map +1 -1
  33. package/dist/timeline-async.d.ts +2 -2
  34. package/dist/timeline-async.d.ts.map +1 -1
  35. package/dist/timeline-async.js +34 -50
  36. package/dist/timeline-async.js.map +1 -1
  37. package/dist/timeline-search.d.ts +20 -0
  38. package/dist/timeline-search.d.ts.map +1 -0
  39. package/dist/timeline-search.js +75 -0
  40. package/dist/timeline-search.js.map +1 -0
  41. package/dist/timeline-tweet-util.d.ts +9 -0
  42. package/dist/timeline-tweet-util.d.ts.map +1 -0
  43. package/dist/timeline-tweet-util.js +102 -0
  44. package/dist/timeline-tweet-util.js.map +1 -0
  45. package/dist/{timeline.d.ts → timeline-v1.d.ts} +36 -9
  46. package/dist/timeline-v1.d.ts.map +1 -0
  47. package/dist/timeline-v1.js +181 -0
  48. package/dist/timeline-v1.js.map +1 -0
  49. package/dist/timeline-v2.d.ts +61 -0
  50. package/dist/timeline-v2.d.ts.map +1 -0
  51. package/dist/timeline-v2.js +194 -0
  52. package/dist/timeline-v2.js.map +1 -0
  53. package/dist/trends.js +31 -42
  54. package/dist/trends.js.map +1 -1
  55. package/dist/tweets.d.ts +12 -6
  56. package/dist/tweets.d.ts.map +1 -1
  57. package/dist/tweets.js +79 -86
  58. package/dist/tweets.js.map +1 -1
  59. package/dist/type-util.d.ts +6 -0
  60. package/dist/type-util.d.ts.map +1 -0
  61. package/dist/type-util.js +14 -0
  62. package/dist/type-util.js.map +1 -0
  63. package/package.json +11 -2
  64. package/dist/timeline.d.ts.map +0 -1
  65. package/dist/timeline.js +0 -280
  66. package/dist/timeline.js.map +0 -1
package/dist/scraper.js CHANGED
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.Scraper = void 0;
13
4
  const api_1 = require("./api");
@@ -36,22 +27,18 @@ class Scraper {
36
27
  * @param username The Twitter username of the profile to fetch, without an `@` at the beginning.
37
28
  * @returns The requested profile.
38
29
  */
39
- getProfile(username) {
40
- return __awaiter(this, void 0, void 0, function* () {
41
- const res = yield (0, profile_1.getProfile)(username, this.auth);
42
- return this.handleResponse(res);
43
- });
30
+ async getProfile(username) {
31
+ const res = await (0, profile_1.getProfile)(username, this.auth);
32
+ return this.handleResponse(res);
44
33
  }
45
34
  /**
46
35
  * Fetches the user ID corresponding to the provided screen name.
47
36
  * @param screenName The Twitter screen name of the profile to fetch.
48
37
  * @returns The ID of the corresponding account.
49
38
  */
50
- getUserIdByScreenName(screenName) {
51
- return __awaiter(this, void 0, void 0, function* () {
52
- const res = yield (0, profile_1.getUserIdByScreenName)(screenName, this.auth);
53
- return this.handleResponse(res);
54
- });
39
+ async getUserIdByScreenName(screenName) {
40
+ const res = await (0, profile_1.getUserIdByScreenName)(screenName, this.auth);
41
+ return this.handleResponse(res);
55
42
  }
56
43
  /**
57
44
  * Fetches tweets from Twitter.
@@ -61,8 +48,8 @@ class Scraper {
61
48
  * @param searchMode The category filter to apply to the search. Defaults to `Top`.
62
49
  * @returns An async generator of tweets matching the provided filters.
63
50
  */
64
- searchTweets(query, maxTweets, includeReplies, searchMode = search_1.SearchMode.Top) {
65
- return (0, search_1.searchTweets)(query, maxTweets, includeReplies, searchMode, this.auth);
51
+ searchTweets(query, maxTweets, searchMode = search_1.SearchMode.Top) {
52
+ return (0, search_1.searchTweets)(query, maxTweets, searchMode, this.auth);
66
53
  }
67
54
  /**
68
55
  * Fetches profiles from Twitter.
@@ -82,8 +69,8 @@ class Scraper {
82
69
  * @param cursor The search cursor, which can be passed into further requests for more results.
83
70
  * @returns A page of results, containing a cursor that can be used in further requests.
84
71
  */
85
- fetchSearchTweets(query, maxTweets, includeReplies, searchMode, cursor) {
86
- return (0, search_1.fetchSearchTweets)(query, maxTweets, includeReplies, searchMode, this.auth, cursor);
72
+ fetchSearchTweets(query, maxTweets, searchMode, cursor) {
73
+ return (0, search_1.fetchSearchTweets)(query, maxTweets, searchMode, this.auth, cursor);
87
74
  }
88
75
  /**
89
76
  * Fetches profiles from Twitter.
@@ -106,40 +93,36 @@ class Scraper {
106
93
  * Fetches tweets from a Twitter user.
107
94
  * @param user The user whose tweets should be returned.
108
95
  * @param maxTweets The maximum number of tweets to return.
109
- * @param includeReplies Whether or not to include tweet replies.
110
96
  * @returns An async generator of tweets from the provided user.
111
97
  */
112
- getTweets(user, maxTweets, includeReplies) {
113
- return (0, tweets_1.getTweets)(user, maxTweets, includeReplies, this.auth);
98
+ getTweets(user, maxTweets) {
99
+ return (0, tweets_1.getTweets)(user, maxTweets, this.auth);
114
100
  }
115
101
  /**
116
102
  * Fetches tweets from a Twitter user using their ID.
117
103
  * @param userId The user whose tweets should be returned.
118
104
  * @param maxTweets The maximum number of tweets to return.
119
- * @param includeReplies Whether or not to include tweet replies.
120
105
  * @returns An async generator of tweets from the provided user.
121
106
  */
122
- getTweetsByUserId(userId, maxTweets, includeReplies) {
123
- return (0, tweets_1.getTweetsByUserId)(userId, maxTweets, includeReplies, this.auth);
107
+ getTweetsByUserId(userId, maxTweets) {
108
+ return (0, tweets_1.getTweetsByUserId)(userId, maxTweets, this.auth);
124
109
  }
125
110
  /**
126
111
  * Fetches the most recent tweet from a Twitter user.
127
112
  * @param user The user whose latest tweet should be returned.
128
- * @param includeReplies Whether or not to include tweet replies.
129
113
  * @param includeRetweets Whether or not to include retweets.
130
- * @returns The {@link Tweet} object or `null` if it couldn't be fetched.
114
+ * @returns The {@link Tweet} object or `null`/`undefined` if it couldn't be fetched.
131
115
  */
132
- getLatestTweet(user, includeReplies, includeRetweets) {
133
- return (0, tweets_1.getLatestTweet)(user, includeReplies, includeRetweets, this.auth);
116
+ getLatestTweet(user, includeRetweets) {
117
+ return (0, tweets_1.getLatestTweet)(user, includeRetweets, this.auth);
134
118
  }
135
119
  /**
136
120
  * Fetches a single tweet.
137
121
  * @param id The ID of the tweet to fetch.
138
- * @param includeReplies Whether or not to include tweet replies.
139
122
  * @returns The request tweet, or `null` if it couldn't be fetched.
140
123
  */
141
- getTweet(id, includeReplies) {
142
- return (0, tweets_1.getTweet)(id, includeReplies, this.auth);
124
+ getTweet(id) {
125
+ return (0, tweets_1.getTweet)(id, this.auth);
143
126
  }
144
127
  /**
145
128
  * Returns if the scraper has a guest token. The token may not be valid.
@@ -152,10 +135,8 @@ class Scraper {
152
135
  * Returns if the scraper is logged in as a real user.
153
136
  * @returns `true` if the scraper is logged in with a real user account; otherwise `false`.
154
137
  */
155
- isLoggedIn() {
156
- return __awaiter(this, void 0, void 0, function* () {
157
- return ((yield this.auth.isLoggedIn()) && (yield this.authTrends.isLoggedIn()));
158
- });
138
+ async isLoggedIn() {
139
+ return ((await this.auth.isLoggedIn()) && (await this.authTrends.isLoggedIn()));
159
140
  }
160
141
  /**
161
142
  * Login to Twitter as a real Twitter account. This enables running
@@ -164,49 +145,48 @@ class Scraper {
164
145
  * @param password The password of the Twitter account to login with.
165
146
  * @param email The password to log in with, if you have email confirmation enabled.
166
147
  */
167
- login(username, password, email) {
168
- return __awaiter(this, void 0, void 0, function* () {
169
- // Swap in a real authorizer for all requests
170
- const userAuth = new auth_user_1.TwitterUserAuth(api_1.bearerToken2);
171
- yield userAuth.login(username, password, email);
172
- this.auth = userAuth;
173
- this.authTrends = userAuth;
174
- });
148
+ async login(username, password, email) {
149
+ // Swap in a real authorizer for all requests
150
+ const userAuth = new auth_user_1.TwitterUserAuth(api_1.bearerToken2);
151
+ await userAuth.login(username, password, email);
152
+ this.auth = userAuth;
153
+ this.authTrends = userAuth;
175
154
  }
176
155
  /**
177
156
  * Log out of Twitter.
178
157
  */
179
- logout() {
180
- return __awaiter(this, void 0, void 0, function* () {
181
- yield this.auth.logout();
182
- yield this.authTrends.logout();
183
- // Swap in guest authorizers for all requests
184
- this.auth = new auth_1.TwitterGuestAuth(api_1.bearerToken);
185
- this.authTrends = new auth_1.TwitterGuestAuth(api_1.bearerToken2);
186
- });
158
+ async logout() {
159
+ await this.auth.logout();
160
+ await this.authTrends.logout();
161
+ // Swap in guest authorizers for all requests
162
+ this.auth = new auth_1.TwitterGuestAuth(api_1.bearerToken);
163
+ this.authTrends = new auth_1.TwitterGuestAuth(api_1.bearerToken2);
187
164
  }
188
165
  /**
189
166
  * Retrieves all cookies for the current session.
190
167
  * @returns All cookies for the current session.
191
168
  */
192
- getCookies() {
193
- return __awaiter(this, void 0, void 0, function* () {
194
- return yield this.authTrends.cookieJar().getCookies(twUrl);
195
- });
169
+ async getCookies() {
170
+ return await this.authTrends.cookieJar().getCookies(twUrl);
196
171
  }
197
172
  /**
198
173
  * Set cookies for the current session.
199
174
  * @param cookies The cookies to set for the current session.
200
175
  */
201
- setCookies(cookies) {
202
- return __awaiter(this, void 0, void 0, function* () {
203
- const userAuth = new auth_user_1.TwitterUserAuth(api_1.bearerToken2);
204
- for (const cookie of cookies) {
205
- yield userAuth.cookieJar().setCookie(cookie, twUrl);
206
- }
207
- this.auth = userAuth;
208
- this.authTrends = userAuth;
209
- });
176
+ async setCookies(cookies) {
177
+ const userAuth = new auth_user_1.TwitterUserAuth(api_1.bearerToken2);
178
+ for (const cookie of cookies) {
179
+ await userAuth.cookieJar().setCookie(cookie, twUrl);
180
+ }
181
+ this.auth = userAuth;
182
+ this.authTrends = userAuth;
183
+ }
184
+ /**
185
+ * Clear all cookies for the current session.
186
+ */
187
+ async clearCookies() {
188
+ await this.auth.cookieJar().removeAllCookies();
189
+ await this.authTrends.cookieJar().removeAllCookies();
210
190
  }
211
191
  /**
212
192
  * Sets the optional cookie to be used in requests.
@@ -1 +1 @@
1
- {"version":3,"file":"scraper.js","sourceRoot":"","sources":["../src/scraper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scraper.js","sourceRoot":"","sources":["../src/scraper.ts"],"names":[],"mappings":"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"}
package/dist/search.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { TwitterAuth } from './auth';
2
2
  import { Profile } from './profile';
3
- import { QueryProfilesResponse, QueryTweetsResponse } from './timeline';
3
+ import { QueryProfilesResponse, QueryTweetsResponse } from './timeline-v1';
4
4
  import { Tweet } from './tweets';
5
5
  /**
6
6
  * The categories that can be used in Twitter searches.
@@ -12,8 +12,8 @@ export declare enum SearchMode {
12
12
  Videos = 3,
13
13
  Users = 4
14
14
  }
15
- export declare function searchTweets(query: string, maxTweets: number, includeReplies: boolean, searchMode: SearchMode, auth: TwitterAuth): AsyncGenerator<Tweet>;
16
- export declare function searchProfiles(query: string, maxProfiles: number, auth: TwitterAuth): AsyncGenerator<Profile>;
17
- export declare function fetchSearchTweets(query: string, maxTweets: number, includeReplies: boolean, searchMode: SearchMode, auth: TwitterAuth, cursor?: string): Promise<QueryTweetsResponse>;
15
+ export declare function searchTweets(query: string, maxTweets: number, searchMode: SearchMode, auth: TwitterAuth): AsyncGenerator<Tweet, void>;
16
+ export declare function searchProfiles(query: string, maxProfiles: number, auth: TwitterAuth): AsyncGenerator<Profile, void>;
17
+ export declare function fetchSearchTweets(query: string, maxTweets: number, searchMode: SearchMode, auth: TwitterAuth, cursor?: string): Promise<QueryTweetsResponse>;
18
18
  export declare function fetchSearchProfiles(query: string, maxProfiles: number, auth: TwitterAuth, cursor?: string): Promise<QueryProfilesResponse>;
19
19
  //# sourceMappingURL=search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAGL,qBAAqB,EACrB,mBAAmB,EAEpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC;;GAEG;AACH,oBAAY,UAAU;IACpB,GAAG,IAAA;IACH,MAAM,IAAA;IACN,MAAM,IAAA;IACN,MAAM,IAAA;IACN,KAAK,IAAA;CACN;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,OAAO,EACvB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,WAAW,GAChB,cAAc,CAAC,KAAK,CAAC,CAIvB;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,GAChB,cAAc,CAAC,OAAO,CAAC,CAIzB;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,OAAO,EACvB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,CAAC,CAW9B;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC,CAWhC"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE3E,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAQjC;;GAEG;AACH,oBAAY,UAAU;IACpB,GAAG,IAAA;IACH,MAAM,IAAA;IACN,MAAM,IAAA;IACN,MAAM,IAAA;IACN,KAAK,IAAA;CACN;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,WAAW,GAChB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAI7B;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,GAChB,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAI/B;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,CAAC,CAU9B;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,CAAC,CAUhC"}
package/dist/search.js CHANGED
@@ -1,18 +1,13 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
4
  };
11
5
  Object.defineProperty(exports, "__esModule", { value: true });
12
6
  exports.fetchSearchProfiles = exports.fetchSearchTweets = exports.searchProfiles = exports.searchTweets = exports.SearchMode = void 0;
13
7
  const api_1 = require("./api");
14
- const timeline_1 = require("./timeline");
15
8
  const timeline_async_1 = require("./timeline-async");
9
+ const timeline_search_1 = require("./timeline-search");
10
+ const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
16
11
  /**
17
12
  * The categories that can be used in Twitter searches.
18
13
  */
@@ -24,9 +19,9 @@ var SearchMode;
24
19
  SearchMode[SearchMode["Videos"] = 3] = "Videos";
25
20
  SearchMode[SearchMode["Users"] = 4] = "Users";
26
21
  })(SearchMode = exports.SearchMode || (exports.SearchMode = {}));
27
- function searchTweets(query, maxTweets, includeReplies, searchMode, auth) {
22
+ function searchTweets(query, maxTweets, searchMode, auth) {
28
23
  return (0, timeline_async_1.getTweetTimeline)(query, maxTweets, (q, mt, c) => {
29
- return fetchSearchTweets(q, mt, includeReplies, searchMode, auth, c);
24
+ return fetchSearchTweets(q, mt, searchMode, auth, c);
30
25
  });
31
26
  }
32
27
  exports.searchTweets = searchTweets;
@@ -36,61 +31,66 @@ function searchProfiles(query, maxProfiles, auth) {
36
31
  });
37
32
  }
38
33
  exports.searchProfiles = searchProfiles;
39
- function fetchSearchTweets(query, maxTweets, includeReplies, searchMode, auth, cursor) {
40
- return __awaiter(this, void 0, void 0, function* () {
41
- const timeline = yield getSearchTimeline(query, maxTweets, includeReplies, searchMode, auth, cursor);
42
- return (0, timeline_1.parseTweets)(timeline);
43
- });
34
+ async function fetchSearchTweets(query, maxTweets, searchMode, auth, cursor) {
35
+ const timeline = await getSearchTimeline(query, maxTweets, searchMode, auth, cursor);
36
+ return (0, timeline_search_1.parseSearchTimelineTweets)(timeline);
44
37
  }
45
38
  exports.fetchSearchTweets = fetchSearchTweets;
46
- function fetchSearchProfiles(query, maxProfiles, auth, cursor) {
47
- return __awaiter(this, void 0, void 0, function* () {
48
- const timeline = yield getSearchTimeline(query, maxProfiles, false, SearchMode.Users, auth, cursor);
49
- return (0, timeline_1.parseUsers)(timeline);
50
- });
39
+ async function fetchSearchProfiles(query, maxProfiles, auth, cursor) {
40
+ const timeline = await getSearchTimeline(query, maxProfiles, SearchMode.Users, auth, cursor);
41
+ return (0, timeline_search_1.parseSearchTimelineUsers)(timeline);
51
42
  }
52
43
  exports.fetchSearchProfiles = fetchSearchProfiles;
53
- function getSearchTimeline(query, maxItems, includeReplies, searchMode, auth, cursor) {
54
- return __awaiter(this, void 0, void 0, function* () {
55
- if (!auth.isLoggedIn()) {
56
- throw new Error('Scraper is not logged-in for search.');
57
- }
58
- if (maxItems > 50) {
59
- maxItems = 50;
60
- }
61
- const params = new URLSearchParams();
62
- (0, api_1.addApiParams)(params, includeReplies);
63
- params.set('q', query);
64
- params.set('count', `${maxItems}`);
65
- params.set('query_source', 'typed_query');
66
- params.set('pc', '1');
67
- params.set('requestContext', 'launch');
68
- params.set('spelling_corrections', '1');
69
- params.set('include_ext_edit_control', 'true');
70
- if (cursor != null && cursor != '') {
71
- params.set('cursor', cursor);
72
- }
73
- switch (searchMode) {
74
- case SearchMode.Latest:
75
- params.set('tweet_search_mode', 'live');
76
- break;
77
- case SearchMode.Photos:
78
- params.set('result_filter', 'image');
79
- break;
80
- case SearchMode.Videos:
81
- params.set('result_filter', 'video');
82
- break;
83
- case SearchMode.Users:
84
- params.set('result_filter', 'user');
85
- break;
86
- default:
87
- break;
88
- }
89
- const res = yield (0, api_1.requestApi)(`https://twitter.com/i/api/2/search/adaptive.json?${params.toString()}`, auth);
90
- if (!res.success) {
91
- throw res.err;
92
- }
93
- return res.value;
44
+ async function getSearchTimeline(query, maxItems, searchMode, auth, cursor) {
45
+ if (!auth.isLoggedIn()) {
46
+ throw new Error('Scraper is not logged-in for search.');
47
+ }
48
+ if (maxItems > 50) {
49
+ maxItems = 50;
50
+ }
51
+ const variables = {
52
+ rawQuery: query,
53
+ count: maxItems,
54
+ querySource: 'typed_query',
55
+ product: 'Top',
56
+ };
57
+ const features = (0, api_1.addApiFeatures)({
58
+ longform_notetweets_inline_media_enabled: true,
59
+ responsive_web_enhance_cards_enabled: false,
60
+ responsive_web_media_download_video_enabled: false,
61
+ responsive_web_twitter_article_tweet_consumption_enabled: false,
62
+ tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled: true,
94
63
  });
64
+ const fieldToggles = {
65
+ withArticleRichContentState: false,
66
+ };
67
+ if (cursor != null && cursor != '') {
68
+ variables['cursor'] = cursor;
69
+ }
70
+ switch (searchMode) {
71
+ case SearchMode.Latest:
72
+ variables.product = 'Latest';
73
+ break;
74
+ case SearchMode.Photos:
75
+ variables.product = 'Photos';
76
+ break;
77
+ case SearchMode.Videos:
78
+ variables.product = 'Videos';
79
+ break;
80
+ case SearchMode.Users:
81
+ variables.product = 'People';
82
+ break;
83
+ default:
84
+ break;
85
+ }
86
+ const params = new URLSearchParams();
87
+ params.set('features', (0, json_stable_stringify_1.default)(features));
88
+ params.set('fieldToggles', (0, json_stable_stringify_1.default)(fieldToggles));
89
+ params.set('variables', (0, json_stable_stringify_1.default)(variables));
90
+ const res = await (0, api_1.requestApi)(`https://twitter.com/i/api/graphql/nK1dw4oV3k4w5TdtcAdSww/SearchTimeline?${params.toString()}`, auth);
91
+ if (!res.success) {
92
+ throw res.err;
93
+ }
94
+ return res.value;
95
95
  }
96
96
  //# sourceMappingURL=search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,6 @@ export interface FetchTweetsResponse {
10
10
  next?: string;
11
11
  }
12
12
  export type FetchTweets = (query: string, maxTweets: number, cursor: string | undefined) => Promise<FetchTweetsResponse>;
13
- export declare function getUserTimeline(query: string, maxProfiles: number, fetchFunc: FetchProfiles): AsyncGenerator<Profile>;
14
- export declare function getTweetTimeline(query: string, maxTweets: number, fetchFunc: FetchTweets): AsyncGenerator<Tweet>;
13
+ export declare function getUserTimeline(query: string, maxProfiles: number, fetchFunc: FetchProfiles): AsyncGenerator<Profile, void>;
14
+ export declare function getTweetTimeline(query: string, maxTweets: number, fetchFunc: FetchTweets): AsyncGenerator<Tweet, void>;
15
15
  //# sourceMappingURL=timeline-async.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-async.d.ts","sourceRoot":"","sources":["../src/timeline-async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GAAG,SAAS,KACvB,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAEpC,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,WAAW,GAAG,CACxB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,SAAS,KACvB,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAElC,wBAAuB,eAAe,CACpC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,GACvB,cAAc,CAAC,OAAO,CAAC,CA2BzB;AAED,wBAAuB,gBAAgB,CACrC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,WAAW,GACrB,cAAc,CAAC,KAAK,CAAC,CA2BvB"}
1
+ {"version":3,"file":"timeline-async.d.ts","sourceRoot":"","sources":["../src/timeline-async.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEjC,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GAAG,SAAS,KACvB,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAEpC,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,WAAW,GAAG,CACxB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,SAAS,KACvB,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAElC,wBAAuB,eAAe,CACpC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,aAAa,GACvB,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CA2B/B;AAED,wBAAuB,gBAAgB,CACrC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,WAAW,GACrB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CA2B7B"}
@@ -1,64 +1,48 @@
1
1
  "use strict";
2
- var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }
3
- var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) {
4
- if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
5
- var g = generator.apply(thisArg, _arguments || []), i, q = [];
6
- return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
7
- function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
8
- function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
9
- function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
10
- function fulfill(value) { resume("next", value); }
11
- function reject(value) { resume("throw", value); }
12
- function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
13
- };
14
2
  Object.defineProperty(exports, "__esModule", { value: true });
15
3
  exports.getTweetTimeline = exports.getUserTimeline = void 0;
16
- function getUserTimeline(query, maxProfiles, fetchFunc) {
17
- return __asyncGenerator(this, arguments, function* getUserTimeline_1() {
18
- let nProfiles = 0;
19
- let cursor = undefined;
20
- while (nProfiles < maxProfiles) {
21
- const batch = yield __await(fetchFunc(query, maxProfiles, cursor));
22
- const { profiles, next } = batch;
23
- if (profiles.length === 0) {
24
- break;
4
+ async function* getUserTimeline(query, maxProfiles, fetchFunc) {
5
+ let nProfiles = 0;
6
+ let cursor = undefined;
7
+ while (nProfiles < maxProfiles) {
8
+ const batch = await fetchFunc(query, maxProfiles, cursor);
9
+ const { profiles, next } = batch;
10
+ if (profiles.length === 0) {
11
+ break;
12
+ }
13
+ for (const profile of profiles) {
14
+ if (nProfiles < maxProfiles) {
15
+ cursor = next;
16
+ yield profile;
25
17
  }
26
- for (const profile of profiles) {
27
- if (nProfiles < maxProfiles) {
28
- cursor = next;
29
- yield yield __await(profile);
30
- }
31
- else {
32
- break;
33
- }
34
- nProfiles++;
18
+ else {
19
+ break;
35
20
  }
21
+ nProfiles++;
36
22
  }
37
- });
23
+ }
38
24
  }
39
25
  exports.getUserTimeline = getUserTimeline;
40
- function getTweetTimeline(query, maxTweets, fetchFunc) {
41
- return __asyncGenerator(this, arguments, function* getTweetTimeline_1() {
42
- let nTweets = 0;
43
- let cursor = undefined;
44
- while (nTweets < maxTweets) {
45
- const batch = yield __await(fetchFunc(query, maxTweets, cursor));
46
- const { tweets, next } = batch;
47
- if (tweets.length === 0) {
48
- break;
26
+ async function* getTweetTimeline(query, maxTweets, fetchFunc) {
27
+ let nTweets = 0;
28
+ let cursor = undefined;
29
+ while (nTweets < maxTweets) {
30
+ const batch = await fetchFunc(query, maxTweets, cursor);
31
+ const { tweets, next } = batch;
32
+ if (tweets.length === 0) {
33
+ break;
34
+ }
35
+ for (const tweet of tweets) {
36
+ if (nTweets < maxTweets) {
37
+ cursor = next;
38
+ yield tweet;
49
39
  }
50
- for (const tweet of tweets) {
51
- if (nTweets < maxTweets) {
52
- cursor = next;
53
- yield yield __await(tweet);
54
- }
55
- else {
56
- break;
57
- }
58
- nTweets++;
40
+ else {
41
+ break;
59
42
  }
43
+ nTweets++;
60
44
  }
61
- });
45
+ }
62
46
  }
63
47
  exports.getTweetTimeline = getTweetTimeline;
64
48
  //# sourceMappingURL=timeline-async.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"timeline-async.js","sourceRoot":"","sources":["../src/timeline-async.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAyBA,SAAuB,eAAe,CACpC,KAAa,EACb,WAAmB,EACnB,SAAwB;;QAExB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,MAAM,GAAuB,SAAS,CAAC;QAC3C,OAAO,SAAS,GAAG,WAAW,EAAE;YAC9B,MAAM,KAAK,GAA0B,cAAM,SAAS,CAClD,KAAK,EACL,WAAW,EACX,MAAM,CACP,CAAA,CAAC;YAEF,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;YAEjC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBACzB,MAAM;aACP;YAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC9B,IAAI,SAAS,GAAG,WAAW,EAAE;oBAC3B,MAAM,GAAG,IAAI,CAAC;oBACd,oBAAM,OAAO,CAAA,CAAC;iBACf;qBAAM;oBACL,MAAM;iBACP;gBAED,SAAS,EAAE,CAAC;aACb;SACF;IACH,CAAC;CAAA;AA/BD,0CA+BC;AAED,SAAuB,gBAAgB,CACrC,KAAa,EACb,SAAiB,EACjB,SAAsB;;QAEtB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,MAAM,GAAuB,SAAS,CAAC;QAC3C,OAAO,OAAO,GAAG,SAAS,EAAE;YAC1B,MAAM,KAAK,GAAwB,cAAM,SAAS,CAChD,KAAK,EACL,SAAS,EACT,MAAM,CACP,CAAA,CAAC;YAEF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;YAE/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBACvB,MAAM;aACP;YAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,IAAI,OAAO,GAAG,SAAS,EAAE;oBACvB,MAAM,GAAG,IAAI,CAAC;oBACd,oBAAM,KAAK,CAAA,CAAC;iBACb;qBAAM;oBACL,MAAM;iBACP;gBAED,OAAO,EAAE,CAAC;aACX;SACF;IACH,CAAC;CAAA;AA/BD,4CA+BC"}
1
+ {"version":3,"file":"timeline-async.js","sourceRoot":"","sources":["../src/timeline-async.ts"],"names":[],"mappings":";;;AAyBO,KAAK,SAAS,CAAC,CAAC,eAAe,CACpC,KAAa,EACb,WAAmB,EACnB,SAAwB;IAExB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,MAAM,GAAuB,SAAS,CAAC;IAC3C,OAAO,SAAS,GAAG,WAAW,EAAE;QAC9B,MAAM,KAAK,GAA0B,MAAM,SAAS,CAClD,KAAK,EACL,WAAW,EACX,MAAM,CACP,CAAC;QAEF,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QAEjC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,MAAM;SACP;QAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,IAAI,SAAS,GAAG,WAAW,EAAE;gBAC3B,MAAM,GAAG,IAAI,CAAC;gBACd,MAAM,OAAO,CAAC;aACf;iBAAM;gBACL,MAAM;aACP;YAED,SAAS,EAAE,CAAC;SACb;KACF;AACH,CAAC;AA/BD,0CA+BC;AAEM,KAAK,SAAS,CAAC,CAAC,gBAAgB,CACrC,KAAa,EACb,SAAiB,EACjB,SAAsB;IAEtB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,MAAM,GAAuB,SAAS,CAAC;IAC3C,OAAO,OAAO,GAAG,SAAS,EAAE;QAC1B,MAAM,KAAK,GAAwB,MAAM,SAAS,CAChD,KAAK,EACL,SAAS,EACT,MAAM,CACP,CAAC;QAEF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;QAE/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,MAAM;SACP;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,IAAI,OAAO,GAAG,SAAS,EAAE;gBACvB,MAAM,GAAG,IAAI,CAAC;gBACd,MAAM,KAAK,CAAC;aACb;iBAAM;gBACL,MAAM;aACP;YAED,OAAO,EAAE,CAAC;SACX;KACF;AACH,CAAC;AA/BD,4CA+BC"}
@@ -0,0 +1,20 @@
1
+ import { QueryProfilesResponse, QueryTweetsResponse } from './timeline-v1';
2
+ import { TimelineEntryRaw } from './timeline-v2';
3
+ export interface SearchTimeline {
4
+ data?: {
5
+ search_by_raw_query?: {
6
+ search_timeline?: {
7
+ timeline?: {
8
+ instructions?: {
9
+ entries?: TimelineEntryRaw[];
10
+ entry?: TimelineEntryRaw;
11
+ type?: string;
12
+ }[];
13
+ };
14
+ };
15
+ };
16
+ };
17
+ }
18
+ export declare function parseSearchTimelineTweets(timeline: SearchTimeline): QueryTweetsResponse;
19
+ export declare function parseSearchTimelineUsers(timeline: SearchTimeline): QueryProfilesResponse;
20
+ //# sourceMappingURL=timeline-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-search.d.ts","sourceRoot":"","sources":["../src/timeline-search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAoB,MAAM,eAAe,CAAC;AAGnE,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE;QACL,mBAAmB,CAAC,EAAE;YACpB,eAAe,CAAC,EAAE;gBAChB,QAAQ,CAAC,EAAE;oBACT,YAAY,CAAC,EAAE;wBACb,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;wBAC7B,KAAK,CAAC,EAAE,gBAAgB,CAAC;wBACzB,IAAI,CAAC,EAAE,MAAM,CAAC;qBACf,EAAE,CAAC;iBACL,CAAC;aACH,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,cAAc,GACvB,mBAAmB,CA0CrB;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,cAAc,GACvB,qBAAqB,CAoCvB"}