Skip to content

Commit 976c319

Browse files
committed
非同期反復可能オブジェクトを返すラッパー関数を実装
1 parent eaaa962 commit 976c319

File tree

1 file changed

+44
-45
lines changed

1 file changed

+44
-45
lines changed

src/client/Qiita.ts

Lines changed: 44 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,21 @@ export class Qiita extends Gateway {
2222
* @param url リクエストするURL
2323
* @param params リクエストのオプション
2424
*/
25-
public async * paginationGenerator <T extends T[]> (url: string, params?: any): AsyncIterableIterator<T> {
25+
public async * paginationGenerator <T extends any[]> (url: string, params?: any) {
2626
// Qiitaのページネーションインデックスは1から始まります
27-
let nextPage = 1;
27+
let page = 1;
2828

2929
while (true) {
30-
const data = await this.get<T>(url, params);
30+
const data = await this.get<T>(url, { ...params, page });
3131
const result: T | 'reset' = yield data;
3232

3333
if (result === 'reset') {
34-
nextPage = 1;
34+
page = 1;
3535
} else {
36-
nextPage++;
36+
page++;
3737

38-
// Qiita APIの最大ページネーション値 (100) か
3938
// レスポンスの配列の長さがない場合にイテレーターを終了します。
40-
if (nextPage > 100 || !data.length) {
39+
if (!data.length) {
4140
break;
4241
}
4342
}
@@ -129,10 +128,10 @@ export class Qiita extends Gateway {
129128
* @param page ページ番号 (1から100まで)
130129
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
131130
* @param sort 並び順 (countで投稿数順、nameで名前順)
132-
* @return タグ一覧
131+
* @return タグ一覧を返す非同期反復可能オブジェクト
133132
*/
134-
public fetchTags = (page: string, perPage: string, sort: string): AsyncIterableIterator<Tag[]> => {
135-
return this.paginationGenerator(`${this.url}${this.version}/tags`, {
133+
public fetchTags = (page: string, perPage: string, sort: string) => {
134+
return this.paginationGenerator<Tag[]>(`${this.url}${this.version}/tags`, {
136135
page,
137136
per_page: perPage,
138137
sort,
@@ -180,10 +179,10 @@ export class Qiita extends Gateway {
180179
* @param tagId タグID
181180
* @param page ページ番号 (1から100まで)
182181
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
183-
* @return 投稿一覧
182+
* @return 投稿一覧を返す非同期反復可能オブジェクト
184183
*/
185-
public fetchTaggedItems = (tagId: string, page: string, perPage: string): Promise<Item[]> => {
186-
return this.get(`${this.url}${this.version}/tags/${tagId}`, {
184+
public fetchTaggedItems = (tagId: string, page: string, perPage: string) => {
185+
return this.paginationGenerator<Item[]>(`${this.url}${this.version}/tags/${tagId}`, {
187186
page,
188187
per_page: perPage,
189188
});
@@ -193,10 +192,10 @@ export class Qiita extends Gateway {
193192
* チーム内のテンプレート一覧を返します。
194193
* @param page ページ番号 (1から100まで)
195194
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
196-
* @return テンプレート一覧
195+
* @return テンプレート一覧を返す非同期反復可能オブジェクト
197196
*/
198-
public fetchTemplates = (page: string, perPage: string): Promise<Template[]> => {
199-
return this.get(`${this.url}${this.version}/templates`, {
197+
public fetchTemplates = (page: string, perPage: string) => {
198+
return this.paginationGenerator<Template[]>(`${this.url}${this.version}/templates`, {
200199
page,
201200
per_page: perPage,
202201
});
@@ -250,8 +249,8 @@ export class Qiita extends Gateway {
250249
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
251250
* @return プロジェクト一覧
252251
*/
253-
public fetchProjects = (page: string, perPage: string): Promise<Project[]> => {
254-
return this.get(`${this.url}${this.version}/projects`, {
252+
public fetchProjects = (page: string, perPage: string) => {
253+
return this.paginationGenerator<Project[]>(`${this.url}${this.version}/projects`, {
255254
page,
256255
per_page: perPage,
257256
});
@@ -351,10 +350,10 @@ export class Qiita extends Gateway {
351350
* 全てのユーザの一覧を作成日時の降順で取得します。
352351
* @param page ページ番号 (1から100まで)
353352
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
354-
* @return ユーザー一覧
353+
* @return ユーザー一覧を返す非同期反復可能オブジェクト
355354
*/
356-
public fetchUsers = (page: string, perPage: string): Promise<User[]> => {
357-
return this.get(`${this.url}${this.version}/users`, {
355+
public fetchUsers = (page: string, perPage: string) => {
356+
return this.paginationGenerator<User[]>(`${this.url}${this.version}/users`, {
358357
page,
359358
per_page: perPage,
360359
});
@@ -374,10 +373,10 @@ export class Qiita extends Gateway {
374373
* @param userId ユーザーID
375374
* @param page ページ番号 (1から100まで)
376375
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
377-
* @return ユーザー一覧
376+
* @return ユーザー一覧を返す非同期反復可能オブジェクト
378377
*/
379-
public fetchUserFollowees = (userId: string, page: string, perPage: string): Promise<User[]> => {
380-
return this.get(`${this.url}${this.version}/users/${userId}/followees`, {
378+
public fetchUserFollowees = (userId: string, page: string, perPage: string) => {
379+
return this.paginationGenerator<User[]>(`${this.url}${this.version}/users/${userId}/followees`, {
381380
page,
382381
per_page: perPage,
383382
});
@@ -388,10 +387,10 @@ export class Qiita extends Gateway {
388387
* @param userId ユーザーID
389388
* @param page ページ番号 (1から100まで)
390389
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
391-
* @return ユーザー一覧
390+
* @return ユーザー一覧を返す非同期反復可能オブジェクト
392391
*/
393-
public fetchUserFollowers = (userId: string, page: string, perPage: string): Promise<User[]> => {
394-
return this.get(`${this.url}${this.version}/users/${userId}/followers`, {
392+
public fetchUserFollowers = (userId: string, page: string, perPage: string) => {
393+
return this.paginationGenerator<User[]>(`${this.url}${this.version}/users/${userId}/followers`, {
395394
page,
396395
per_page: perPage,
397396
});
@@ -402,10 +401,10 @@ export class Qiita extends Gateway {
402401
* @param userId ユーザID
403402
* @param page ページ番号 (1から100まで)
404403
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
405-
* @return 投稿一覧
404+
* @return 投稿一覧を返す非同期反復可能オブジェクト
406405
*/
407-
public fetchUserItems = (userId: string, page: string, perPage: string): Promise<Item[]> => {
408-
return this.get(`${this.url}${this.version}/users/${userId}/items`, {
406+
public fetchUserItems = (userId: string, page: string, perPage: string) => {
407+
return this.paginationGenerator<Item[]>(`${this.url}${this.version}/users/${userId}/items`, {
409408
page,
410409
per_page: perPage,
411410
});
@@ -416,10 +415,10 @@ export class Qiita extends Gateway {
416415
* @param userId ユーザID
417416
* @param page ページ番号 (1から100まで)
418417
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
419-
* @return 投稿一覧
418+
* @return 投稿一覧を返す非同期反復可能オブジェクト
420419
*/
421-
public fetchUserStocks = (userId: string, page: string, perPage: string): Promise<Item[]> => {
422-
return this.get(`${this.url}${this.version}/users/${userId}/items`, {
420+
public fetchUserStocks = (userId: string, page: string, perPage: string) => {
421+
return this.paginationGenerator<Item[]>(`${this.url}${this.version}/users/${userId}/items`, {
423422
page,
424423
per_page: perPage,
425424
});
@@ -430,10 +429,10 @@ export class Qiita extends Gateway {
430429
* @param userId ユーザーID
431430
* @param page ページ番号 (1から100まで)
432431
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
433-
* @return タグ一覧
432+
* @return タグ一覧を返す非同期反復可能オブジェクト
434433
*/
435-
public fetchUserFollowingTags = (userId: string, page: string, perPage: string): Promise<Tag[]> => {
436-
return this.get(`${this.url}${this.version}/users/${userId}/following_tags`, {
434+
public fetchUserFollowingTags = (userId: string, page: string, perPage: string) => {
435+
return this.paginationGenerator<Tag[]>(`${this.url}${this.version}/users/${userId}/following_tags`, {
437436
page,
438437
per_page: perPage,
439438
});
@@ -471,10 +470,10 @@ export class Qiita extends Gateway {
471470
* @param page ページ番号 (1から100まで)
472471
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
473472
* @param query 検索クエリ
474-
* @return 投稿一覧
473+
* @return 投稿一覧を返す非同期反復可能オブジェクト
475474
*/
476-
public fetchItems = (page: string, perPage: string, query: string): Promise<Item[]> => {
477-
return this.get(`${this.url}${this.version}/items`, {
475+
public fetchItems = (page: string, perPage: string, query: string) => {
476+
return this.paginationGenerator<Item[]>(`${this.url}${this.version}/items`, {
478477
page,
479478
per_page: perPage,
480479
query,
@@ -657,10 +656,10 @@ export class Qiita extends Gateway {
657656
* 投稿をストックしているユーザ一覧を、ストックした日時の降順で返します。
658657
* @param page ページ番号 (1から100まで)
659658
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
660-
* @return ユーザー一覧
659+
* @return ユーザー一覧を返す非同期反復可能オブジェクト
661660
*/
662-
public fetchItemStockers = (itemId: string, page: string, perPage: string): Promise<User[]> => {
663-
return this.get(`${this.url}${this.version}/items/${itemId}/stockers`, {
661+
public fetchItemStockers = (itemId: string, page: string, perPage: string) => {
662+
return this.paginationGenerator<User[]>(`${this.url}${this.version}/items/${itemId}/stockers`, {
664663
page,
665664
per_page: perPage,
666665
});
@@ -749,10 +748,10 @@ export class Qiita extends Gateway {
749748
* 認証中のユーザの投稿の一覧を作成日時の降順で返します。
750749
* @param page ページ番号 (1から100まで)
751750
* @param perPage 1ページあたりに含まれる要素数 (1から100まで)
752-
* @return 投稿一覧
751+
* @return 投稿一覧を返す非同期反復可能オブジェクト
753752
*/
754-
public fetchMyItems = (page: string, perPage: string): Promise<Item[]> => {
755-
return this.get(`${this.url}${this.version}/authenticated_user/items`, {
753+
public fetchMyItems = (page: string, perPage: string) => {
754+
return this.paginationGenerator<Item[]>(`${this.url}${this.version}/authenticated_user/items`, {
756755
page,
757756
per_page: perPage,
758757
});

0 commit comments

Comments
 (0)