apick-api 4.1.0 → 4.2.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.
- package/CHANGELOG.md +7 -0
- package/README.md +10 -0
- package/docs/guide.en.md +12 -0
- package/docs/guide.ko.md +12 -0
- package/package.json +1 -1
- package/src/index.cjs +89 -0
- package/src/index.d.ts +153 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
# 4.2.0
|
|
2
|
+
|
|
3
|
+
- Add `amazonProduct`, `xProfile` and `xPost`, and collection jobs `createInstagramPostsJob`, `createInstagramCommentsJob`, `createTiktokSearchJob`, `createTiktokVideoJob`, `createTiktokCommentsJob`, `createAmazonReviewsJob` with `getScrapeJob` and `waitForScrapeJob`, all with typed results.
|
|
4
|
+
- Collection jobs reserve `maxResults` × unit price and charge only the results actually returned; failures are fully refunded and results are kept for 72 hours.
|
|
5
|
+
- 아마존 상품, X 프로필·게시물 조회와 인스타그램 게시물 목록·댓글, 틱톡 키워드 검색·영상·댓글, 아마존 리뷰 수집 작업 메서드, 작업 조회·대기 메서드와 결과 타입을 추가했습니다.
|
|
6
|
+
- 수집 작업은 `maxResults` × 단가를 예약하고 실제 결과 건수만 차감합니다. 실패는 전액 환불, 결과는 72시간 보관합니다.
|
|
7
|
+
|
|
1
8
|
# 4.1.0
|
|
2
9
|
|
|
3
10
|
- Add YouTube methods: `youtubeSearch`, `youtubeChannel`, `youtubePlaylist`, `youtubeHashtag`, `youtubeFormats`, `youtubeComments`, `downloadYoutubeVideo` and `downloadYoutubeAudio`. Downloads return a download link valid for 1 hour and are billed as a base fee plus 2 points per 10MB.
|
package/README.md
CHANGED
|
@@ -90,6 +90,16 @@ Leave the allowed-IP list blank for unrestricted access. To restrict access, reg
|
|
|
90
90
|
| `instagramProfile(usernameOrUrl)` | 인스타그램 공개 프로필 / Instagram public profile | JSON |
|
|
91
91
|
| `instagramPost(url)` | 인스타그램 게시물·릴스 / Instagram post or reel | JSON |
|
|
92
92
|
| `tiktokProfile(usernameOrUrl)` | 틱톡 공개 프로필 / TikTok public profile | JSON |
|
|
93
|
+
| `amazonProduct(urlOrAsin)` | 아마존 상품 정보 / Amazon product | JSON |
|
|
94
|
+
| `xProfile(usernameOrUrl)` | X 공개 프로필·최근 게시물 / X public profile and recent posts | JSON |
|
|
95
|
+
| `xPost(url)` | X 게시물 / X post | JSON |
|
|
96
|
+
| `createInstagramPostsJob(usernameOrUrl, options)` | 인스타그램 게시물 목록 수집 접수(최대 100) / Instagram posts job | JSON |
|
|
97
|
+
| `createInstagramCommentsJob(url, options)` | 인스타그램 댓글 수집 접수(최대 15) / Instagram comments job | JSON |
|
|
98
|
+
| `createTiktokSearchJob(keyword, options)` | 틱톡 키워드 영상 검색 접수(최대 50) / TikTok keyword search job | JSON |
|
|
99
|
+
| `createTiktokVideoJob(url, options)` | 틱톡 영상 정보 접수 / TikTok video job | JSON |
|
|
100
|
+
| `createTiktokCommentsJob(url, options)` | 틱톡 댓글 수집 접수(최대 100) / TikTok comments job | JSON |
|
|
101
|
+
| `createAmazonReviewsJob(urlOrAsin, options)` | 아마존 리뷰 수집 접수(최대 100) / Amazon reviews job | JSON |
|
|
102
|
+
| `getScrapeJob(jobId)` / `waitForScrapeJob(jobId, options)` | 수집 작업 상태·결과(무료, 결과 건수로 정산) / Collection job status and results | JSON |
|
|
93
103
|
| `createTtsJob(text, options)` | 한국어 내레이션 작업 접수 / Create TTS job | JSON |
|
|
94
104
|
| `getTtsJob(jobId)` | TTS 작업 상태 / TTS job status | JSON |
|
|
95
105
|
| `cancelTtsJob(jobId)` | 대기·생성 중 TTS 작업 취소 / Cancel waiting or processing TTS job | JSON |
|
package/docs/guide.en.md
CHANGED
|
@@ -82,6 +82,18 @@ Only public information from public accounts is returned. Lookups usually take 2
|
|
|
82
82
|
const instagram = await client.instagramProfile('natgeo');
|
|
83
83
|
const post = await client.instagramPost('https://www.instagram.com/p/DeHufcWDCjf/');
|
|
84
84
|
const tiktok = await client.tiktokProfile('https://www.tiktok.com/@tiktok');
|
|
85
|
+
const product = await client.amazonProduct('B0BDHWDR12');
|
|
86
|
+
const x = await client.xProfile('NASA');
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Collection jobs (lists, comments, search, reviews)
|
|
90
|
+
|
|
91
|
+
Products that collect many items return a `job_id` immediately. Submitting reserves `maxResults` × unit price; when you read the result, only the results actually returned are charged and the rest is refunded. Failed jobs and missing targets are fully refunded, and results are kept for 72 hours. Comment and review authors are public usernames only.
|
|
92
|
+
|
|
93
|
+
```js
|
|
94
|
+
const job = await client.createTiktokSearchJob('camping recipes', { maxResults: 10, idempotencyKey: 'camping-0001' });
|
|
95
|
+
const done = await client.waitForScrapeJob(job.data.job_id); // every 10 s, up to 10 min
|
|
96
|
+
console.log(done.data.status, done.data.charged_point, done.data.items);
|
|
85
97
|
```
|
|
86
98
|
|
|
87
99
|
## OCR
|
package/docs/guide.ko.md
CHANGED
|
@@ -82,6 +82,18 @@ const rank = await client.googleRankCheck('주소 검색 API', 'apick.app'); //
|
|
|
82
82
|
const instagram = await client.instagramProfile('natgeo');
|
|
83
83
|
const post = await client.instagramPost('https://www.instagram.com/p/DeHufcWDCjf/');
|
|
84
84
|
const tiktok = await client.tiktokProfile('https://www.tiktok.com/@tiktok');
|
|
85
|
+
const product = await client.amazonProduct('B0BDHWDR12');
|
|
86
|
+
const x = await client.xProfile('NASA');
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### 수집 작업(목록·댓글·검색·리뷰)
|
|
90
|
+
|
|
91
|
+
여러 건을 모으는 상품은 접수 즉시 `job_id` 를 돌려줍니다. 접수 때 `maxResults` × 단가를 예약하고, 결과를 받을 때 실제 결과 건수만 차감한 뒤 나머지는 돌려드립니다. 실패하거나 대상이 없으면 전액 환불되며 결과는 72시간 보관합니다. 댓글·리뷰 작성자는 공개 사용자명만 제공합니다.
|
|
92
|
+
|
|
93
|
+
```js
|
|
94
|
+
const job = await client.createTiktokSearchJob('캠핑 요리', { maxResults: 10, idempotencyKey: 'camping-0001' });
|
|
95
|
+
const done = await client.waitForScrapeJob(job.data.job_id); // 기본 10초 간격, 최대 10분
|
|
96
|
+
console.log(done.data.status, done.data.charged_point, done.data.items);
|
|
85
97
|
```
|
|
86
98
|
|
|
87
99
|
## OCR
|
package/package.json
CHANGED
package/src/index.cjs
CHANGED
|
@@ -44,6 +44,10 @@ const SERVICE_DEFINITIONS = Object.freeze({
|
|
|
44
44
|
instagramProfile: { endpoint: '/rest/instagram_profile', timeoutMs: 110_000, output: 'json' },
|
|
45
45
|
instagramPost: { endpoint: '/rest/instagram_post', timeoutMs: 110_000, output: 'json' },
|
|
46
46
|
tiktokProfile: { endpoint: '/rest/tiktok_profile', timeoutMs: 110_000, output: 'json' },
|
|
47
|
+
amazonProduct: { endpoint: '/rest/amazon_product', timeoutMs: 110_000, output: 'json' },
|
|
48
|
+
xProfile: { endpoint: '/rest/x_profile', timeoutMs: 110_000, output: 'json' },
|
|
49
|
+
xPost: { endpoint: '/rest/x_post', timeoutMs: 110_000, output: 'json' },
|
|
50
|
+
getScrapeJob: { endpoint: '/rest/scrape_jobs', timeoutMs: 35_000, output: 'json' },
|
|
47
51
|
screenshot: { endpoint: '/rest/url_screenshot', timeoutMs: 75_000, output: 'binary', filename: 'screenshot.jpeg' },
|
|
48
52
|
youtubeMetadata: { endpoint: '/rest/youtube_metadata', timeoutMs: 60_000, output: 'json' },
|
|
49
53
|
youtubeThumbnail: { endpoint: '/rest/youtube_thumbnail', timeoutMs: 60_000, output: 'binary', filename: 'thumbnail.jpg' },
|
|
@@ -93,6 +97,29 @@ function profileInput(value) {
|
|
|
93
97
|
return /^https?:\/\//i.test(text) ? { url: text } : { username: text.replace(/^@/, '') };
|
|
94
98
|
}
|
|
95
99
|
|
|
100
|
+
// 아마존 상품 입력: 주소면 url, 10자리 ASIN 이면 asin 으로 보낸다.
|
|
101
|
+
function amazonInput(value) {
|
|
102
|
+
const text = requiredString('urlOrAsin', value, 2048);
|
|
103
|
+
return /^https?:\/\//i.test(text) ? { url: text } : { asin: text.toUpperCase() };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const SCRAPE_JOB_PRODUCTS = Object.freeze({ instagram_posts: 100, instagram_comments: 15, tiktok_search: 50, tiktok_video: 1, tiktok_comments: 100, amazon_reviews: 100 });
|
|
107
|
+
|
|
108
|
+
// 수집 작업 공통 옵션: maxResults(상품별 상한), idempotencyKey(응답을 못 받아 다시 보낼 때 같은 접수로 처리).
|
|
109
|
+
function scrapeJobOptions(product, payload, options) {
|
|
110
|
+
const config = options || {};
|
|
111
|
+
if (config.maxResults !== undefined && SCRAPE_JOB_PRODUCTS[product] > 1) {
|
|
112
|
+
const max = Number(config.maxResults);
|
|
113
|
+
if (!Number.isInteger(max) || max < 1 || max > SCRAPE_JOB_PRODUCTS[product]) throw new RangeError(`maxResults must be an integer from 1 to ${SCRAPE_JOB_PRODUCTS[product]}.`);
|
|
114
|
+
payload.max_results = max;
|
|
115
|
+
}
|
|
116
|
+
if (config.idempotencyKey !== undefined) {
|
|
117
|
+
if (typeof config.idempotencyKey !== 'string' || !/^[A-Za-z0-9_.:-]{8,128}$/.test(config.idempotencyKey)) throw new TypeError('idempotencyKey must be 8-128 characters of letters, digits, and . _ : -');
|
|
118
|
+
payload.idempotency_key = config.idempotencyKey;
|
|
119
|
+
}
|
|
120
|
+
return payload;
|
|
121
|
+
}
|
|
122
|
+
|
|
96
123
|
function requiredString(name, value, maxLength) {
|
|
97
124
|
if (typeof value !== 'string' || !value.trim()) {
|
|
98
125
|
throw new TypeError(`${name} must be a non-empty string.`);
|
|
@@ -639,6 +666,68 @@ class ApickClient {
|
|
|
639
666
|
return this._call('tiktokProfile', profileInput(usernameOrUrl));
|
|
640
667
|
}
|
|
641
668
|
|
|
669
|
+
// 상품 주소(/dp/ASIN) 또는 10자리 ASIN(미국 아마존).
|
|
670
|
+
amazonProduct(urlOrAsin) {
|
|
671
|
+
return this._call('amazonProduct', amazonInput(urlOrAsin));
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
xProfile(usernameOrUrl) {
|
|
675
|
+
return this._call('xProfile', profileInput(usernameOrUrl));
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
xPost(url) {
|
|
679
|
+
return this._call('xPost', { url: requiredString('url', url, 2048) });
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
// 수집 작업: 접수 즉시 job_id 를 돌려준다. maxResults × 단가를 예약하고 결과를 받을 때 실제 건수만 차감한다.
|
|
683
|
+
_createScrapeJob(product, payload, options) {
|
|
684
|
+
return this._call('getScrapeJob', scrapeJobOptions(product, payload, options), null, { endpoint: '/rest/' + product + '/jobs', json: true });
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
createInstagramPostsJob(usernameOrUrl, options) {
|
|
688
|
+
return this._createScrapeJob('instagram_posts', profileInput(usernameOrUrl), options);
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
createInstagramCommentsJob(url, options) {
|
|
692
|
+
return this._createScrapeJob('instagram_comments', { url: requiredString('url', url, 2048) }, options);
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
createTiktokSearchJob(keyword, options) {
|
|
696
|
+
return this._createScrapeJob('tiktok_search', { keyword: requiredString('keyword', keyword, 100) }, options);
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
createTiktokVideoJob(url, options) {
|
|
700
|
+
return this._createScrapeJob('tiktok_video', { url: requiredString('url', url, 2048) }, options);
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
createTiktokCommentsJob(url, options) {
|
|
704
|
+
return this._createScrapeJob('tiktok_comments', { url: requiredString('url', url, 2048) }, options);
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
createAmazonReviewsJob(urlOrAsin, options) {
|
|
708
|
+
return this._createScrapeJob('amazon_reviews', amazonInput(urlOrAsin), options);
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
// 상태·결과 조회(무료). 끝난 작업은 실제 결과 건수로 정산돼 있다.
|
|
712
|
+
getScrapeJob(jobId) {
|
|
713
|
+
if (typeof jobId !== 'string' || !/^[a-f0-9]{32}$/.test(jobId)) throw new TypeError('jobId must be a 32-character job ID.');
|
|
714
|
+
return this._call('getScrapeJob', null, null, { endpoint: '/rest/scrape_jobs/' + jobId, method: 'GET', timeoutMs: 70_000 });
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
// completed 또는 failed 가 될 때까지 조회한다. 기본 10초 간격, 최대 10분.
|
|
718
|
+
async waitForScrapeJob(jobId, options) {
|
|
719
|
+
const config = options || {};
|
|
720
|
+
const intervalMs = Math.max(3_000, positiveInteger('intervalMs', config.intervalMs, 10_000));
|
|
721
|
+
const deadline = Date.now() + positiveInteger('timeoutMs', config.timeoutMs, 600_000);
|
|
722
|
+
for (;;) {
|
|
723
|
+
const result = await this.getScrapeJob(jobId);
|
|
724
|
+
const status = result && result.data && result.data.status;
|
|
725
|
+
if (status === 'completed' || status === 'failed') return result;
|
|
726
|
+
if (Date.now() + intervalMs > deadline) throw new ApickApiError('Scrape job did not finish in time.', { code: 'APICK_TIMEOUT' });
|
|
727
|
+
await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
|
|
642
731
|
screenshot(url) {
|
|
643
732
|
return this._call('screenshot', { url: normalizeUrl(url) });
|
|
644
733
|
}
|
package/src/index.d.ts
CHANGED
|
@@ -79,6 +79,148 @@ export interface RankCheck {
|
|
|
79
79
|
readonly unchecked_ranks: readonly string[];
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
export interface AmazonProduct {
|
|
83
|
+
readonly asin: string;
|
|
84
|
+
readonly url: string;
|
|
85
|
+
readonly title: string;
|
|
86
|
+
readonly brand: string;
|
|
87
|
+
readonly price: number | null;
|
|
88
|
+
readonly original_price: number | null;
|
|
89
|
+
readonly currency: string;
|
|
90
|
+
readonly rating: number | null;
|
|
91
|
+
readonly reviews_count: number | null;
|
|
92
|
+
readonly availability: string;
|
|
93
|
+
readonly is_available: boolean;
|
|
94
|
+
readonly bought_past_month: number | null;
|
|
95
|
+
readonly seller_name: string;
|
|
96
|
+
readonly categories: readonly string[];
|
|
97
|
+
readonly features: readonly string[];
|
|
98
|
+
readonly customers_say: string;
|
|
99
|
+
readonly image_url: string;
|
|
100
|
+
readonly image_urls: readonly string[];
|
|
101
|
+
readonly date_first_available: string;
|
|
102
|
+
readonly model_number: string;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export interface XPostSummary {
|
|
106
|
+
readonly post_id: string;
|
|
107
|
+
readonly url: string;
|
|
108
|
+
readonly text: string;
|
|
109
|
+
readonly posted_at: string;
|
|
110
|
+
readonly likes: number | null;
|
|
111
|
+
readonly reposts: number | null;
|
|
112
|
+
readonly replies: number | null;
|
|
113
|
+
readonly views: number | null;
|
|
114
|
+
readonly hashtags: readonly string[];
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export interface XProfile {
|
|
118
|
+
readonly username: string;
|
|
119
|
+
readonly name: string;
|
|
120
|
+
readonly biography: string;
|
|
121
|
+
readonly followers: number | null;
|
|
122
|
+
readonly following: number | null;
|
|
123
|
+
readonly posts_count: number | null;
|
|
124
|
+
readonly is_verified: boolean;
|
|
125
|
+
readonly is_business_account: boolean;
|
|
126
|
+
readonly is_government_account: boolean;
|
|
127
|
+
readonly location: string;
|
|
128
|
+
readonly website: string;
|
|
129
|
+
readonly joined_at: string;
|
|
130
|
+
readonly profile_image_url: string;
|
|
131
|
+
readonly banner_image_url: string;
|
|
132
|
+
readonly profile_url: string;
|
|
133
|
+
readonly recent_posts: readonly XPostSummary[];
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export interface XPost {
|
|
137
|
+
readonly post_id: string;
|
|
138
|
+
readonly url: string;
|
|
139
|
+
readonly username: string;
|
|
140
|
+
readonly name: string;
|
|
141
|
+
readonly text: string;
|
|
142
|
+
readonly posted_at: string;
|
|
143
|
+
readonly likes: number | null;
|
|
144
|
+
readonly reposts: number | null;
|
|
145
|
+
readonly replies: number | null;
|
|
146
|
+
readonly quotes: number | null;
|
|
147
|
+
readonly views: number | null;
|
|
148
|
+
readonly bookmarks: number | null;
|
|
149
|
+
readonly hashtags: readonly string[];
|
|
150
|
+
readonly is_repost: boolean;
|
|
151
|
+
readonly photo_urls: readonly string[];
|
|
152
|
+
readonly video_urls: readonly string[];
|
|
153
|
+
readonly author: { readonly followers: number | null; readonly is_verified: boolean };
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export interface TiktokVideo {
|
|
157
|
+
readonly video_id: string;
|
|
158
|
+
readonly url: string;
|
|
159
|
+
readonly username: string;
|
|
160
|
+
readonly description: string;
|
|
161
|
+
readonly posted_at: string;
|
|
162
|
+
readonly views: number | null;
|
|
163
|
+
readonly likes: number | null;
|
|
164
|
+
readonly comments: number | null;
|
|
165
|
+
readonly shares: number | null;
|
|
166
|
+
readonly saves: number | null;
|
|
167
|
+
readonly duration_sec: number | null;
|
|
168
|
+
readonly hashtags: readonly string[];
|
|
169
|
+
readonly region: string;
|
|
170
|
+
readonly cover_image_url: string;
|
|
171
|
+
readonly author: { readonly followers: number | null; readonly is_verified: boolean };
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/** 댓글 작성자는 공개 사용자명만 제공한다. */
|
|
175
|
+
export interface SocialComment {
|
|
176
|
+
readonly comment_id: string;
|
|
177
|
+
readonly username: string;
|
|
178
|
+
readonly text: string;
|
|
179
|
+
readonly posted_at: string;
|
|
180
|
+
readonly likes: number | null;
|
|
181
|
+
readonly replies: number | null;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export interface AmazonReview {
|
|
185
|
+
readonly review_id: string;
|
|
186
|
+
readonly rating: number | null;
|
|
187
|
+
readonly title: string;
|
|
188
|
+
readonly text: string;
|
|
189
|
+
readonly author: string;
|
|
190
|
+
readonly posted_at: string;
|
|
191
|
+
readonly country: string;
|
|
192
|
+
readonly is_verified_purchase: boolean;
|
|
193
|
+
readonly helpful_count: number | null;
|
|
194
|
+
readonly variant: string;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
export type ScrapeJobProduct = "instagram_posts" | "instagram_comments" | "tiktok_search" | "tiktok_video" | "tiktok_comments" | "amazon_reviews";
|
|
198
|
+
|
|
199
|
+
export interface ScrapeJobOptions {
|
|
200
|
+
/** 최대 결과 수. 이 수 × 단가를 예약하고 실제 결과 건수만 차감한다(instagram_comments 15, tiktok_search 50, 그 밖 100). */
|
|
201
|
+
readonly maxResults?: number;
|
|
202
|
+
/** 응답을 못 받아 다시 보낼 때 같은 접수로 처리할 키(8~128자). */
|
|
203
|
+
readonly idempotencyKey?: string;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export interface ScrapeJob<T = unknown> {
|
|
207
|
+
readonly job_id: string;
|
|
208
|
+
readonly product: ScrapeJobProduct;
|
|
209
|
+
readonly status: "waiting" | "processing" | "completed" | "failed";
|
|
210
|
+
readonly max_results: number;
|
|
211
|
+
readonly unit_point: number;
|
|
212
|
+
readonly reserved_point: number;
|
|
213
|
+
readonly charged_point: number;
|
|
214
|
+
readonly result_count: number;
|
|
215
|
+
readonly created_at: string;
|
|
216
|
+
readonly completed_at: string | null;
|
|
217
|
+
/** 결과 보관 기한(완료 후 72시간). */
|
|
218
|
+
readonly result_expires_at?: string;
|
|
219
|
+
readonly result_expired?: boolean;
|
|
220
|
+
readonly items?: readonly T[];
|
|
221
|
+
readonly error?: { readonly code: string; readonly message: string };
|
|
222
|
+
}
|
|
223
|
+
|
|
82
224
|
export interface InstagramProfile {
|
|
83
225
|
readonly username: string;
|
|
84
226
|
readonly full_name: string;
|
|
@@ -472,6 +614,17 @@ export class ApickClient {
|
|
|
472
614
|
instagramProfile(usernameOrUrl: string): Promise<ApickResult<InstagramProfile>>;
|
|
473
615
|
instagramPost(url: string): Promise<ApickResult<InstagramPost>>;
|
|
474
616
|
tiktokProfile(usernameOrUrl: string): Promise<ApickResult<TiktokProfile>>;
|
|
617
|
+
amazonProduct(urlOrAsin: string): Promise<ApickResult<AmazonProduct>>;
|
|
618
|
+
xProfile(usernameOrUrl: string): Promise<ApickResult<XProfile>>;
|
|
619
|
+
xPost(url: string): Promise<ApickResult<XPost>>;
|
|
620
|
+
createInstagramPostsJob(usernameOrUrl: string, options?: ScrapeJobOptions): Promise<ApickResult<ScrapeJob<InstagramPost>>>;
|
|
621
|
+
createInstagramCommentsJob(url: string, options?: ScrapeJobOptions): Promise<ApickResult<ScrapeJob<SocialComment>>>;
|
|
622
|
+
createTiktokSearchJob(keyword: string, options?: ScrapeJobOptions): Promise<ApickResult<ScrapeJob<TiktokVideo>>>;
|
|
623
|
+
createTiktokVideoJob(url: string, options?: Pick<ScrapeJobOptions, "idempotencyKey">): Promise<ApickResult<ScrapeJob<TiktokVideo>>>;
|
|
624
|
+
createTiktokCommentsJob(url: string, options?: ScrapeJobOptions): Promise<ApickResult<ScrapeJob<SocialComment>>>;
|
|
625
|
+
createAmazonReviewsJob(urlOrAsin: string, options?: ScrapeJobOptions): Promise<ApickResult<ScrapeJob<AmazonReview>>>;
|
|
626
|
+
getScrapeJob<T = unknown>(jobId: string): Promise<ApickResult<ScrapeJob<T>>>;
|
|
627
|
+
waitForScrapeJob<T = unknown>(jobId: string, options?: { intervalMs?: number; timeoutMs?: number }): Promise<ApickResult<ScrapeJob<T>>>;
|
|
475
628
|
screenshot(url: string): Promise<ApickBinaryResult>;
|
|
476
629
|
youtubeMetadata(url: string): Promise<ApickResult<YoutubeMetadata>>;
|
|
477
630
|
youtubeThumbnail(url: string): Promise<ApickBinaryResult>;
|